2013-08-14 6 views
5

Ich verstehe Websphere 8.0.0.6 verwendet die Apache Wink-Implementierung für JAX-RS 1.1.JAX-RS-Implementierung auf Websphere 8.0.0.6

Ich frage mich nur, welche Version von Apache Wink verwendet es?

Auch, wenn ich Apache CXF verwenden musste bündle ich nur die CXF Gläser mit meinem Krieg?

auch, was Implementierungen tut Websphere 8.0.0.6 Verwendung für CDI (Weld 2.x ??), Bean Validation (??), JPA (??), JAXB (??) etc ..

Antwort

6

WAR v8.0.0.x verwendet sie modifizierte Version Wink v1.1-Inkubations- besitzen wird. Wenn Sie zu {WAS_HOME}/plugins navigieren, sehen Sie eine .jar namens com.ibm.ws.jaxrs.jar. Wenn Sie das MANIFEST innerhalb dieses Artefakts erkunden, werden Sie sehen, dass IBM Wink1.1-Inkubation modifiziert und eine eigene Version 1.1.1 erstellt hat. Sie sollten diese Version verwenden, da sie den wink-jcdi-server enthält. Andernfalls können Sie Ihre EJBs nicht in Ihre Wink-Ressourcen injizieren, was zu einigen lästigen Problemen führt. Ich mag es im Allgemeinen nicht, mich an eine herstellerspezifische Lösung zu binden, aber in diesem Fall werden Sie die Wink-Implementierung von IBM verwenden. Ich habe den wink-jcdi-server von v1.2-inv1 auf v1.1-mit temporärem Erfolg zurückgebucht (ich habe die jcdi-Funktion zum Laufen gebracht, aber dann, ohne eine bestimmte Ursache, habe ich ein paar Bereitstellungen später verloren). Also, sparen Sie sich viel Frust und nutzen Sie IMBs Wink-Implementierung. Die Wink-Implementierung von IBM wird Ihrer App über ein OSGi-bezogenes Artefakt angezeigt, unabhängig davon, ob Sie die Klassenladerichtlinie auf PARENT_FIRST oder PARENT_LAST setzen. Ich vermute, das ist ein Fehler. Sie müssen auch das Artefakt com.ibm.ws.prereq.jaxrs.jar in Ihr Projekt einfügen.

In web.xml, verwenden Sie die folgende Konfiguration:

<!-- Wink Servlet --> 
<servlet> 
    <description>JAX-RS Tools Generated - Do not modify</description> 
    <servlet-name>JAX-RS Servlet</servlet-name> 
    <servlet-class>com.ibm.websphere.jaxrs.server.IBMRestServlet</servlet-class> 
    <init-param> 
     <param-name>javax.ws.rs.Application</param-name> 
     <param-value>com.company.webservices.config.WinkApplication</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
    <enabled>true</enabled> 
    <async-supported>false</async-supported> 
</servlet> 

<!-- Wink Servlet Mapping --> 
<servlet-mapping> 
    <servlet-name>JAX-RS Servlet</servlet-name> 
    <url-pattern>/resources/*</url-pattern> 
</servlet-mapping> 

Nach IBM's own WAS v8.0 video on JAX-RS, wird Ihre Anwendung Unterklasse automatisch durch die Erweiterung der Anwendungsklasse und die ApplicationPath Anmerkung anerkannt bekommen. Das ist nicht der Fall. Sie müssen Ihre Anwendungsunterklasse in web.xml angeben. Sie werden jedoch feststellen, dass die Konsole Ihnen mitteilt, dass die Standard-Wink-Anwendung verwendet wurde. Das ist falsch. Ihre Klasse wird abgeholt, und Sie müssen die getClasses-Methode überschreiben und Ihre Provider, Ressourcen usw. registrieren. Dieses Verhalten wurde beobachtet und ab WAS v8.0.0.8 gründlich getestet.

Sie könnten CXF in WAS 8 als Alternative ausprobieren.

Wie Geronimo und TomEE baut auch WAS auf Apache-Produkten auf. Ich könnte mich irren, aber, zuletzt erinnere ich, WAS v8.0 benutzt Apache OpenWebBeans v1.0, Apache BVal v1.0, Apache OpenJPA v2.1.2-SNAPSHOT. Ich bin mir nicht sicher über JAXB, aber ich denke, dass sie ihr eigenes json4j-Framework verwenden. Ich benutze MOXy mit überraschend viel Erfolg.

+0

Danke. Kann alle Versionen sehen mit 'unzip -p /opt/IBM/WebSphere/AppServer/plugins/com.ibm.ws.prereq.jaxrs.jar META-INF/MANIFEST.MF' – DarVar

+0

Ich habe CXF von 2017 auf einem WAS 8 verwendet und es hat funktioniert (weil Sie geschrieben haben _ "Sie könnten CXF in WAS 8 ausprobieren, aber Sie werden höchstwahrscheinlich auf Probleme stoßen."_) Aber sehr informative Posting – aliopi

+0

@aliopi - Danke. Gut zu wissen. Ich glaube, ich stieß auf Classloader Probleme, wenn ich CXF für eine Web-App auf WAS vor 8 Jahren zu verwenden versuchte, stieß aber auf einige Probleme, weshalb ich schrieb das. Ich hatte gehört/gelesen, dass du CXF dazu bringen kannst, daran zu arbeiten. Ich werde meine Antwort bearbeiten. –

1

Sie Sie können einen ausführlichen Bericht über Komponentenversionen abrufen, indem Sie das Skript versionInfo im Verzeichnis WAS_HOME/bin ausführen. Zum Beispiel für Linux:

./versionInfo.sh -file versionReport.txt -maintenancePackages -componentDetail 

Spezifikation Versionen aufgeführt sind, bei Specifications and API documentation

+0

Haben Sie den Versionsbericht, aber keine Details zu JEE6-Implementierungen oder Spezifikationen, die unterstützt werden? – DarVar

+0

Ich habe WAS 8.0 nicht zur Hand. Bei WAS 7.0 wird die JAXB-Version beispielsweise als bundle.fp.jaxb-Komponente wiedergegeben. Ich habe die Antwort mit dem Link aktualisiert, in dem alle Spezifikationsversionen für WAS 8.0 angegeben sind. – fnt