据我所知,Websphere 8.0.0.6使用Apache Wink实现JAX-RS 1.1。
我只是想知道它使用的是什么版本的Apache Wink?
另外,如果我需要使用Apache CXF,我只是将我的战争包装在CXF罐中吗?
Websphere 8.0.0.6用于CDI(Weld 2.x ??),Bean Validation(??),JPA(??),JAXB(??)等的实现是什么。
答案 0 :(得分:6)
WAS v8.0.0.x使用它自己的Wink v1.1孵化修改版本。如果您导航到{WAS_HOME} / plugins,您将看到名为com.ibm.ws.jaxrs.jar的.jar。如果您在该工件中探索MANIFEST,您将看到IBM修改了Wink v1.1-incubating并创建了自己的v1.1.1。您将要使用此版本,因为它包含了wink-jcdi-server。否则,您无法将您的EJB注入Wink资源,这会产生许多恼人的问题。我一般不喜欢使用特定于供应商的解决方案,但在这种情况下,您将要使用IBM的Wink实现。我已经将vink-jcdi-server从v1.2孵化到v1.1 - 孵化暂时成功(我得到了jcdi功能,但是没有确定的根本原因,之后丢失了一些部署) )。因此,节省大量的挫败感并使用IMB的Wink实现。无论您将类加载器策略设置为PARENT_FIRST还是PARENT_LAST,IBM的Wink实现都将通过OSGi相关工件向您的应用程序公开。我怀疑这是一个错误。您还需要在项目中包含com.ibm.ws.prereq.jaxrs.jar工件。
在web.xml中,使用以下配置:
<!-- 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>
根据IBM's own WAS v8.0 video on JAX-RS,您的Application子类将通过扩展Application类和ApplicationPath注释自动识别。不是这种情况。您需要在web.xml中指定您的Application子类。但是,您会注意到控制台会告诉您使用了默认的Wink应用程序。这是错误的。您的课程将被选中,您需要覆盖getClasses方法并注册您的提供者,资源等。从WAS v8.0.0.8开始,已经观察并彻底测试了此行为。
您可以尝试在WAS 8中使用CXF作为替代方案。
与Geronimo和TomEE一样,WAS建立在Apache产品之上。我可能错了,但是,最后我记得,WAS v8.0使用Apache OpenWebBeans v1.0,Apache BVal v1.0,Apache OpenJPA v2.1.2-SNAPSHOT。我不确定JAXB,但我认为他们使用自己的json4j框架。我使用MOXy取得了惊人的成功。
答案 1 :(得分:1)
您可以通过运行位于WAS_HOME / bin目录中的versionInfo
脚本来获取有关组件版本的详细报告。例如,对于Linux:
./versionInfo.sh -file versionReport.txt -maintenancePackages -componentDetail