2009-04-08 4 views
3

Wir haben ein Legacy-System, das eine Reihe gespeicherter Prozeduren enthält, die wir anderen Anwendungen als Web-Services zur Verfügung stellen möchten. Wir bauen die Webdienste mit JBoss auf. Die gespeicherten Prozeduren können von Oracle-, DB2- oder MS SQL Server-Datenbanken ausgeführt werden.Was ist der einfachste Weg, eine gespeicherte Prozedur in einen Web Service zu übertragen?

JDeveloper verfügt über einen Assistenten zum Generieren der Stubs und zum Bereitstellen in einer Ear-Datei, die auf Oracle App Server (OC4J) ausgeführt wird. Wir sind gerade dabei, zu JBoss zu migrieren und Eclipse als IDE unserer Wahl zu verwenden.

Ich würde lieber ein Framework verwenden und dann die Infrastruktur selbst aufbauen und warten. Im Idealfall möchte ich eine Open-Source-Bibliothek oder ein JBoss-Tool/IDE verwenden, um den Web-Service basierend auf der Verbindungspool-Definition und dem Namen der gespeicherten Prozedur zu generieren.

Was sind meine Optionen?

+0

Ich könnte Ihnen helfen, wenn Sie .Net wären ... Windows Communication Foundation wäre perfekt für diese ... Sie können grundsätzlich jede vorhandene Methode in einen Web-Service mit ein paar Code-Ergänzungen verwandeln. Entschuldigung, ich konnte nicht helfen! – hunter

+0

Danke für die Info Hunter. Produkte wie diese lassen mich denken, dass es ein passendes Java Werkzeug oder eine Bibliothek geben muss, die dieses Szenario für JBoss behandeln können. –

Antwort

1

nicht sicher, dass Sie genau das finden, was Sie suchen, so, wenn etwas zu schreiben, sich aus der Frage ist, sind hier zwei Alternativen:

  1. Verwenden Sie einen generischen Web-Service, der SP Namen erhalten , params und rufen Sie das Verfahren auf. Dies ist nicht sehr freundlich zum Anrufer und nicht typsicher, aber es wird den Job erledigen.

  2. Verwenden Sie einen zweistufigen Ansatz. Erster Schritt - Umschließen Sie Ihre gespeicherte Prozedur in einer Java-Klasse (entweder POJO oder EJB). Zweiter Schritt - die Klasse als Web-Service mit Apache Axis2 verfügbar machen, was sehr beliebt ist und sich bewährt hat.

Eine schnelle Suche kam uns mit this framework für SPs in EJBs Einwickeln, aber ich habe es selbst nicht getestet. Außerdem denke ich, dass einige Anbieter proprietäre Tools für diesen Zweck haben. Es ist eine viel einfachere Frage, sicher.

+0

Hallo zvikico, danke für den Link. Wir migrieren von oc4j nach Jboss. Ich vermute, dass das Framework, mit dem Sie verbunden sind, eine externalisierte Version des Wrappers ist, den ich für JBoss zu ersetzen versuche. Ihre Option 2 sieht wahrscheinlicher aus, es scheint mir einfach nicht DRY zu sein, alle diese SPs over-and-over-and-ov zu konvertieren –

+0

Option 2 war der Ansatz, auf den wir uns festgelegt haben. Danke für die Rückmeldung. –

4

Wenn die gespeicherten Prozeduren nicht mit der Absicht geschrieben wurden, direkt als Web-Service-Operationen angezeigt zu werden, dann kann es eine sehr schlechte Idee sein, sie offenzulegen. Sie machen möglicherweise Annahmen, die nicht wahr sind, wenn sie direkt angerufen werden.

Eine Alternative besteht darin, basierend auf den Anforderungen eine externe API zu entwickeln. Wenn es sich herausstellt, dass der beste Weg zur Implementierung einer bestimmten Operation darin besteht, eine gespeicherte Prozedur aufzurufen, tun Sie dies. Wenn sich herausstellt, dass der beste Weg, alle Operationen zu implementieren, darin besteht, die vorhandenen gespeicherten Prozeduren aufzurufen, dann hatten Sie Recht, und ich habe gerade Ihre Zeit verschwendet.

Aber ich denke, es ist wahrscheinlich, dass es einige Operationen gibt, die nicht am besten implementiert werden, indem die vorhandenen gespeicherten Prozeduren direkt aufgerufen werden.

+0

Vielen Dank für Ihr Feedback. Diese Anforderung ist Teil eines JBoss-Migrationsprojekts, in dem diese Verfahren bereits als Web-Services von Oracle App Server dargestellt werden. Ich möchte den Client lieber von den verschiedenen DB-Anforderungen (Client-Bibliotheken, Verbindungsinformationen ...) abkoppeln, also die Nutzung von Web-Diensten. –

+0

Die Sache ist, egal wie Sie an gespeicherte Prozeduren koppeln, Sie sind immer noch an Implementierungsdetails gekoppelt. Ich schlage vor, dass Sie das nicht tun. –

+0

Die Kopplung wird jedoch auf einen einzigen Punkt reduziert, der zur Laufzeit aktualisiert werden kann, anstatt die Client-JAR-Versionen und die Verbindungsinformationen auf der X-Anzahl der Clients, die die Prozedur aufrufen, zu verwalten. –

1

Ich fand eine Open Source (Apache lizenziert) Framework namens Data Services from WS02. Hat jemand das versucht? Haben Sie Ratschläge/Tipps/Warnungen?

+0

scheint übermäßig komplex und schwer für meine Bedürfnisse. WS02 kann ein gutes Werkzeug für Sie sein, wenn Sie Ihre SOA-Schnittstellen verwalten möchten. –

2

Möglicherweise möchten Sie in diesem Zusammenhang die Verwendung von EJBs untersuchen. Alle J2EE 1.4-Container sollten JSR 109 unterstützen, wodurch EJBs als Webdienste verfügbar gemacht werden können.

Insbesondere können Sie Ihre gespeicherten Prozeduraufrufe in Stateless EJBs umbrechen und dann die EJBs als Webdienste verfügbar machen.

OC4J 10.1.3 und JBoss 4 unterstützen dieses Bereitstellungsmodell. Dies gilt auch für alle anderen J2EE 1.4-konformen Container.Sie müssen nur nach unterstützender Dokumentation auf suchen, um die Anwendung auf diesem Container zu rekonfigurieren (im Gegensatz zu recode).

+0

+1 Es sieht so aus, als wäre dies der Ansatz, den ich eingehen werde. Wenn ich dies nicht als Antwort ansehe, dann nur deshalb, weil zvikico etwas Ähnliches in seinem Beitrag vorgeschlagen hat. –

+0

Amen. Axis2 ist für mich keine schlechte Wahl, nur weil EJBs als Webdienste verfügbar gemacht werden, reduziert sich die Menge an Code, die man pflegen muss. –

+0

Nochmals vielen Dank für das Feedback Vineet –

1

Unter JBoss ist die einfachste Möglichkeit, diese Dienste verfügbar zu machen, die Verwendung einer Stateless Session-Bean EJB3. Mit diesem Modell erhalten Sie Zugriff auf viele zusätzliche Funktionen, die Ihnen helfen können (Ressourcenpooling, Transaktionsunterstützung usw.).

+0

Ich wäre wahrscheinlich mit dieser Lösung gegangen wäre hatte ich zu der Zeit darüber bekannt. Danke für die Antwort –

Verwandte Themen