【问题标题】:JAX-RS implementation on Websphere 8.0.0.6Websphere 8.0.0.6 上的 JAX-RS 实现
【发布时间】:2013-08-14 17:00:19
【问题描述】:

我了解 Websphere 8.0.0.6 使用 JAX-RS 1.1 的 Apache Wink 实现。

我只是想知道它使用的是哪个版本的 Apache Wink?

另外,如果我需要使用 Apache CXF,我是否只需将 CXF jar 与我的战争捆绑在一起?

Websphere 8.0.0.6 还对 CDI(Weld 2.x ??)、Bean Validation (??)、JPA (??)、JAXB (??) 等使用了哪些实现。

【问题讨论】:

    标签: websphere jax-rs websphere-8


    【解决方案1】:

    WAS v8.0.0.x 使用它自己的 Wink v1.1-incubating 的修改版本。如果导航到 {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 实现。我已经将 wink-jcdi-server 从 v1.2-incubating 反向移植到 v1.1-incubating 并取得了暂时的成功(我让 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 中指定您的应用程序子类。但是,您会注意到控制台会告诉您使用了默认的 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 取得了惊人的成功。

    【讨论】:

    • 谢谢。可以使用unzip -p /opt/IBM/WebSphere/AppServer/plugins/com.ibm.ws.prereq.jaxrs.jar META-INF/MANIFEST.MF查看所有版本号
    • 我从 2017 年开始在 WAS 8 上使用 CXF,并且它有效(因为您写道 “您可以在 WAS 8 中尝试 CXF,但您很可能会遇到问题。”) 但信息量很大
    • @aliopi - 谢谢。很高兴知道。我想我在 8 年前尝试在 WAS 上将 CXF 用于 Web 应用程序时遇到了类加载器问题,但遇到了一些问题,这就是我写这篇文章的原因。我听说/读到你可以让 CXF 工作。我将编辑我的答案。
    【解决方案2】:

    您可以通过运行位于 WAS_HOME/bin 目录中的versionInfo 脚本来获取有关组件版本的详细报告。例如,对于 Linux:

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

    规格版本列于Specifications and API documentation

    【讨论】:

    • 获得了版本报告,但没有提供有关 JEE6 实现或支持的规范的任何详细信息?
    • 我手头没有 WAS 8.0。例如,使用 WAS 7.0 JAXB 版本反映为 bundle.fp.jaxb 组件。我使用为 WAS 8.0 指定所有规范版本的链接更新了答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    • 2020-06-08
    • 2014-09-01
    • 2013-06-26
    • 1970-01-01
    相关资源
    最近更新 更多