# Kann ich das so implementieren?



## Jailbird (24. Apr 2005)

Hallo!! ich weiss, man sollte sich kurz fassen in diesem Froum... Aber hier geht das grade nicht, sorry!
ich würde gerne wissen ob man einen web service, so wie beschrieben, implementieren kann. danke 



- User greift über Browser auf Servlet zu, über das er sich einloggen kann.

- Beim Absenden der Daten wandelt das Servlet die vom Browser empfangenen Daten in einen SOAP request und schickt diesen über HTTP zum web service.

- Der web service prüft anhand des usernamen die Rechte desselben und erlaubt entweder die weitere Verarbeitung oder sendet Fehlermeldung à la 'You don't have valid subscription to access this service'.

- Wenn der user authorisiert ist, holt sich der web service, ebenfalls basierend auf den login informationen die Liste seiner Partner aus der Oracle Datenbank.

- Basierend auf dieser Namensliste erstellt der web service select statements und schickt die an Oracle.

- Oracle XML SQL utility holt die Informationen, packt sie in eoin XML file und schickt dieses zum web service zurück.

- Der baut dann die SOAP response und schickt die dann zum servlet.

- Das servlet wandelt die SOAP response in XML, bzw. extrahiert das XML file mit den Information aus der Nachricht, und schickt das file zum Browser.

- Der Browser öffnet ein Download Dialog und der user kann das file speichern.

WÜRDET IHR DAS SO ABSEGNEN?? Will sagen, kann das so funktionieren?

(?) wenn ja, stimmt das dann auch:

Kommunikation zwischen Browser und Servlet: HTTP
Kommunikation zwischen Servlet und web service: SOAP
Kommunikation zwischen web service und Oracle: JDBC

Das ist dann eine 4-Tier-Architektur, mit Browser(1) als Client-Tier, Servlet(2) als Presentation-Tier, dem web service(3) als businesslogic-Tier und Oracle(4) als Database-Tier.

System für den Browser ist das jeweilige Betriebssystem -> Portabilität
System für das Servlet ist ein web server
System für den web service ist ein application server


Vielen, vielen Dank, dass ihr diesen Oschi gelesen habt!! Es wäre wirklich super, wenn ihr mir sagen könntet, ob ich das so als Applikations Architektur vorlegen kann. Hab ich irgendwas entscheidendes vergessen? (Den check ob der user die rechte hat, auf den Service zuzugreifen - mach ich den wie beschrieben, also vom web service aus, oder macht es mehr Sinn, den direkt vom servlet aus zu machen? Den SOAP request also nur zu erstellen, wenn der user authorisiert ist.


----------



## Bleiglanz (25. Apr 2005)

kannst du vorlegen, wenn ich dein Chef wäre, würde ich dich als erstes fragen:

"Warum greifst du nicht vom Servlet aus direkt mit JDBC auf die Datenbank zu?"

"Warum das doppelte XML Wrapping? Warum soll Oracle XML liefern - willst du das direkt in den SOAP Response reinschreiben oder verwendest du RPC-Style?"

"Die meisten User können nichts mit einem XML File anfangen, wozu der Download?"


----------



## Jailbird (25. Apr 2005)

das nenn ich mal konstruktive kritik. vielen dank!!!

ich versuch mich mal im antworten..

>>"Warum greifst du nicht vom Servlet aus direkt mit JDBC auf die Datenbank zu?" 

so hab ich direkt einen sicherheitsmechansimus innerhalb des EJBs. wenn man das außerhalb machen würde und das EJB immer die Informationen bei nem aufruf geben würde, wäre das nicht gut. wenn man das EJB z.b. nochmal benutzt die abfrage aber vergißt.

>>"Warum das doppelte XML Wrapping? Warum soll Oracle XML liefern - willst du das direkt in den SOAP Response reinschreiben oder verwendest du RPC-Style?"

das XML file auf der platte des users ist das ziel der ganzen geschichte. dem user sollen die informationen geliefert werden, kein schnickschnack html drumrum, sondern nur die infos. und zum weiterverarbeiten bietet sich XML nun mal an, da es wunderbar mächtig und maschinen-verständlich ist.

>>"Die meisten User können nichts mit einem XML File anfangen, wozu der Download?"

Die Frage dürfte dann wohl auch beantwortet sein.. der user soll die infos NUTZEN können. ohne viel klimbim, schnickschnack und der ganze scheiss.. pure data

würden diese antworten meinen potentiellen chef zufrieden stellen?

na.. und noch mal danke.. war mal eine wirklich konstruktive antwort.


----------



## Roar (25. Apr 2005)

Anonymous hat gesagt.:
			
		

> >>"Die meisten User können nichts mit einem XML File anfangen, wozu der Download?"
> 
> Die Frage dürfte dann wohl auch beantwortet sein.. der user soll die infos NUTZEN können. ohne viel klimbim, schnickschnack und der ganze scheiss.. pure data



ma eine frage sind das normal user oder auch leute die mit dem rechner arbeiten? :? denn ich weiß nicht wirklich ob ein normal user überhaupt weiß wie er die xml öffnen kann (ok mit seinem wörd wirds schon gehen) geschweige denn wie die ganzen zeichen dadrin zu interpretieren sind.

evtl. würde ich wirklich noch ein xsl oder java web oder stabndalone client interface bauen :-/


----------



## Jailbird (25. Apr 2005)

hallo roar..
nee.. normale user sind das nicht )
wie gesagt, es geht nur um die informationen. und diese werden dann - im nächsten schritt und von den usern, nicht von mir - weiter verarbeitet, z.bsp, wie du gesagt hast, mit xsl zu xhtml und ab ins web.. oder das file kann genutzt werden um die eigene datenbank up zu daten (muss natürlich db schema passen oder xml file geändert werden). wie auch immer, mir wurscht.. 
eigentlich, also wenn mans ganz genau nimmt, muss ich auch nur den web service selbst bauen, ganz ohne client. den client kann sich der user anhand der wsdl selber bauen.. wenn er denn mag..


----------



## Bleiglanz (26. Apr 2005)

Jailbird hat gesagt.:
			
		

> >>"Warum greifst du nicht vom Servlet aus direkt mit JDBC auf die Datenbank zu?"
> 
> so hab ich direkt einen sicherheitsmechansimus innerhalb des EJBs. wenn man das außerhalb machen würde und das EJB immer die Informationen bei nem aufruf geben würde, wäre das nicht gut. wenn man das EJB z.b. nochmal benutzt die abfrage aber vergißt.


WAS? EJBs hast du auch noch? Als was - Service-Endpoint des Webservices??

"Welchen Sicherheitsmechanismus"? Woher sollen denn in deinem Modell die Informationen über den Principal kommen, das Weiterreichen des Sicherheitskontexts über einen Webservice hinweg ist nicht ganz trivial.

Ausserdem hast du die Frage nicht beantwortet




> >>"Warum das doppelte XML Wrapping? Warum soll Oracle XML liefern - willst du das direkt in den SOAP Response reinschreiben oder verwendest du RPC-Style?"
> 
> das XML file auf der platte des users ist das ziel der ganzen geschichte. dem user sollen die informationen geliefert werden, kein schnickschnack html drumrum, sondern nur die infos. und zum weiterverarbeiten bietet sich XML nun mal an, da es wunderbar mächtig und maschinen-verständlich ist.


auch hier die Frage nicht beantwortet, was soll das Gefasel?

Frage: kann der Output der Oracle DIREKT als SOAP Body genutzt werden?

Frage: Literal oder RPC Style, weisst du überhaupt was du machst?




> >>"Die meisten User können nichts mit einem XML File anfangen, wozu der Download?"
> 
> Die Frage dürfte dann wohl auch beantwortet sein.. der user soll die infos NUTZEN können. ohne viel klimbim, schnickschnack und der ganze scheiss.. pure data


Außer Nerds dürfte wohl keiner in der Lage sein, mit XML irgendwas anzufangen

Eventuell kriegt es die eine oder andere Sekretärin noch hin, sowas mit Excel zu öffnen...


----------



## Jailbird (26. Apr 2005)

cool down baby.. ich bin anfänger und das ist doch ein forum für fragen, die man nicht stellen würde, wenn man so nen plan hat wie du..

aber ich gebe nicht auf es wenigstens zu versuchen gescheite antworten auf deine fragen zu geben 

Aaaalsoo...



> "Welchen Sicherheitsmechanismus"?


mit Sicherheitsmechanismus hab ich den Check des usernamens/passworts gemeint:


> - Der web service prüft anhand des usernamen die Rechte desselben und erlaubt entweder die weitere Verarbeitung oder sendet Fehlermeldung à la 'You don't have valid subscription to access this service'.








> WAS? EJBs hast du auch noch? Als was - Service-Endpoint des Webservices??


Das Servlet ist Geschichte.. ich will nur den service selbst bauen, wie und ob die user darauf zugreifen, sei ihnen selbst überlassen. Entweder sie bauen sich ein Servlet auf das sie über browser zugreifen können, oder sie implementieren einen 'richtigen' client, also ne lokal installierte applikation. wie gesagt, die WSDL haben sie.
na und der service-end-point soll ein (Session??) Bean sein, dass über JDBC auf die Datenbank zugreift. Erst werden username/passwort gecheckt, dann die zum usernamen gehörenden informationen innerhalb von Oracle in ein XML file gepackt und dieses dann innerhalb einer SOAP Nachricht an den (wie gesagt, von user selbst programmierten) Client geschickt. 
Also reduziert sich das Ganze auf ein Bean und die Verbindung zu Oracle über JDBC. Wenn das WSDL dokument alles enthält, was der user braucht um einen client zu implementieren, dann hab ich mein Ziel erreicht. (Etappenziel)






> Woher sollen denn in deinem Modell die Informationen über den Principal kommen, das Weiterreichen des Sicherheitskontexts über einen Webservice hinweg ist nicht ganz trivial.


Die werden im Request mitgeschickt. das passwort natürlich verschlüsselt. Was genau meinst du mit Weiterreichen des Sicherheitskontexts? Die Übermittlung von sensiblen Daten?





> >>"Warum das doppelte XML Wrapping? Warum soll Oracle XML liefern - willst du das direkt in den SOAP Response reinschreiben oder verwendest du RPC-Style?"
> 
> das XML file auf der platte des users ist das ziel der ganzen geschichte. dem user sollen die informationen geliefert werden, kein schnickschnack html drumrum, sondern nur die infos. und zum weiterverarbeiten bietet sich XML nun mal an, da es wunderbar mächtig und maschinen-verständlich ist.
> 
> auch hier die Frage nicht beantwortet, was soll das Gefasel?


ich seh kein doppeltes XML-Wrapping. meinst du von XML in SOAP und wieder zurück? Der Grund dafür ist, dass es ein über SOAP kommunizierender web service sein soll und nicht eine einfache Applikation mit DB Zugriff. 
Und das Gefasel nennt man requirement. Ich will nun mal die Infos in einem XML file liefern. punkt. 
Wenn das file auf der Platte vom user liegt kann der entscheiden wozu er das braucht. 


> wie gesagt, es geht nur um die informationen. und diese werden dann - im nächsten schritt und von den usern, nicht von mir - weiter verarbeitet, z.bsp, wie du gesagt hast, mit xsl zu xhtml und ab ins web.. oder das file kann genutzt werden um die eigene datenbank up zu daten (muss natürlich db schema passen oder xml file geändert werden). wie auch immer, mir wurscht..








> Frage: kann der Output der Oracle DIREKT als SOAP Body genutzt werden?


ich weiss nicht genau.. wenn ich einen 'superuser' hab und der alle infos haben will, dann ist das XML file EXTREM gross. Das können über 10MB werden. MB! Da die Performance von SOAP schlecht ist, dachte ich, dass file entweder nur zu komprimieren oder zu 'zerschnippeln' und die Teile dann nacheinander in komprimierter Form zu schicken. Das ist auf jeden Fall noch ein sehr wunder Punkt an der ganzen Sache, weiss auch noch nicht, wie man die sog. Transaktionszeit auf ein angemessenes Mass bringen kann. (ich denke da in Minuten)






> Frage: Literal oder RPC Style, weisst du überhaupt was du machst?


Soll eigentlich nach dem RPC-Prinzip ablaufen. Aber ich lass mich von guten Argumenten für Literal Style gerne überzeugen. Nee, so genau weiss ich halt nicht was ich mache.. Ich versuch das ja herauszufinden und zu kapieren, aber Bits und Bytes waren in der Muttermilch meiner Mutter leider nicht vorhanden..






> Außer Nerds dürfte wohl keiner in der Lage sein, mit XML irgendwas anzufangen


Die user sollen sich die Infos auch nicht als textfile reinziehen sondern eben in der Lage sein, die Infos weiterzuverwenden. (siehe oben....) und programme machen sich doch gut als Nerds, oder? was fängt Java denn mit HTML oder son quatsch an?




Also dann Bleiglanz.. was meinst du dazu??
sei nicht genervt von soviel Planlosigkeit, ich gebs doch wenigstens zu...

Jailbird :bahnhof:


----------



## Bleiglanz (27. Apr 2005)

LOL, ich war von einem Profi ausgegangen 

Für einen Anfänger ist die ganze Architektur etwas "Highpowered", meinst du nicht...?

Das erste Etappenziel ist schon OK, vergessen wir den ganzen Bims und reden nur noch vom Endpoint

Prinzipiell schon OK, Endpoint macht über JDBC eine DB-Abfrage und liefert das Ergebnis per SOAP

Das mit Benutzername/Kennwort ist dabei aber auf jeden Fall schwierig/herstellerabhängig; soweit ich weiss gibts noch keinen festen Standard für "Authentifizierung am Webservice"; und deine Idee des verschlüsselten mitschickens ist auch nicht so toll - so ein protokoll zu implementieren ist NICHT einfach.

Die Frage beim XML zielte eher darauf, ob du die Ergebnisse von ORACLE als XML zurückerhalten willst [ist das nötig???], btw kannst du dir die ganze Idee abschminken, wenn du 10 MB übertragen willst

Zerstückeln geht auch nicht, weil Webservices zustandslos sind

versuchs mal lieber mit komprimierung, aber auch das ist nicht trivial wegen der Interop schwierigkeiten...(oft werden bei Datenbankzeugs im XML Format aus 10MB läppische 200 kB)


----------



## Jailbird (27. Apr 2005)

nix für ungut, bleiglanz  :roll:  war nur gaaanz klein bisschen angepisst, weil eben auch angespannt, weil eben unter zeitdruck und eben weil wiisend über meine vermeintliche inkompetenz... ich danke dir auf jeden fall für deine antworten und deinen support. hast mir sehr geholfen. ich versuch dann jetzt mal, das alles so umzusetzen und werd mich in den nächsten tagen wieder mit einem 'ausgefeilteren' konzept melden. bis dahin, nochmal danke und alles gute..

jailbird


----------



## Jailbird (4. Mai 2005)

Hello again...

aaalso: es wird ein service bestehend aus einem session bean (auf BEA weblogic application server 7.0), das über JDBC auf eine Oracle Datenbank zugreift. Der service empfängt über HTTPS oder VPN einen SOAP request, der username und passwort enthält. Er baut eine Verbindung zum ConnectionPool auf und gleicht das passwort mit dem Eintrag in der Datenbank ab. Wenn das passt, holt der service sich anhand des usernamens verschiedene informationen über die gleiche Verbindung. Noch in Oracle werden die Informationen mit dem Oracle XML SQL utility (XSU) in ein XML file gepackt und das wird zurück an den service geschickt. Der service greift auf eine Klasse zu, die das file komprimiert als zip liefert und packt das in die SOAP response, die er dann wieder zum client schickt.


soviel zum service.. beim client werd ich mich auch kurz fassen :wink:

um den client kümmer ich mich erstmal gar nicht. Und vergesst die Browser-Variante. Es wird einfach nur stand-alone client applications geben. und basta. und ich glaub, ich sollte mich einfach erst mal auf den service konzentrieren, quasi als Etappenziel. Der service soll funktionieren anhand der WSDL werd ich dann einen Standard-Client implementieren. ganz simpel, aber erweiterbar. Also: vergesst den client!!


das ist schon auf dem applikationsserver vorhanden, von anderen anwendungen. kann also so genutzt werden ohne das rad neu erfinden zu müssen.:

- JDBC incl. Connection Pools - aber: wie find ich raus, ob ich einen/die vorhandenen ConnectionPool(s) benutzen kann oder ob ein zusätzlicher benötigt wird? (entschuldigt, hört sich wahrscheinlich bisschen wirr an aber weiss über connectionPools noch gar nix.. ist morgen dran..)
- Der ganze Passwort-Check- und Informationshol-Vorgang
- Die Klasse, die mir ein XML InputStream in einen zip OutputStream verwandelt


was ich noch brauche:

das, was mich grade ganz besonders grübeln lässt, ist die Schnittstelle nach draussen, also der Punkt zwischen Internet und meinem System. Kennt sich hier irgendjemand mit diesem weblogic server aus? Wenn er bislang noch keinen web service am laufen hatte, wie muss er dann konfiguriert werden damit mein service so wie beschrieben funktionieren kann? will fragen, welche zusätzlichen komponenten müssten noch installiert werden? über die adminconsole kann ich das ja alles machen, aber wie, oder besser was? hmpf.
z.bsp. XML Encryption, XML Signature und Certificates. wenn ich das nutzen will, wie check ich, ob ich noch zusätzliche Konfiguration des servers brauche? Apropos.. ist XML Enc, Sig + Cert. hier 'nice to have', überflüssig oder trotzdem nötig? (da doch HTTPS oder VPN requirement ist)


ok. ich geb zu, das sind doch wieder fragen und nicht nur die lösung.. ich hör jetzt auch besser auf, dann bin ih morgen ausgeschlafen und kann mir vielleicht die ein oder andere auch selber beantworten.. wenn ihr trotzdem noch tipps habt oder auch bedenken, was meinen service angeht, dann lasst es mich wissen!! und schonmal - wiedermal - vielen dank fürs lesen dieses mega-oschis.

mehr Sonne für alle,
Jailbird


----------



## Jailbird (4. Mai 2005)

Gut.. ihr habts nicht anders gewollt, eine Frage hab ich noch 

ich will mir morgen mal eine WSDL zusammenbauen, da ich von XML-schema mehr weiss als von Java scheint mir das ein effektiverer Ansatz zu sein. Es müssen im WSDL ja alle messagetypes, bindings, interfaces und eben alles beschrieben werden, was man zum einen braucht, um den service bis ins detail zu beschreiben und zum anderen um einen stand-alone client zu schreiben. (korrigiert mich..)
Bedeutet das, dass ich beschreiben muss, welche URL, welchen Port, welche Transportprotokolle bzw. message Protkoll, welche 'Input-Erwartung', was für Output blabla...
hat jemand da eine gute Seite zur Hand? Für WSDL 1.1 ? Oder wie kann ich da ran gehen um zur WSDL zu kommen?

Gute Nacht..


----------

