【问题标题】:How would I build Rest + EJB using Weblogic?我将如何使用 Weblogic 构建 Rest + EJB?
【发布时间】:2011-04-14 21:53:09
【问题描述】:

我需要使用 weblogic 构建 1 个 restful web 服务。此 Web 服务将具有用于选择服务应返回的数据的参数。比如“客户”或“产品”。

现在我想将“客户”和“产品”代码部署为单独的可部署应用程序,这样我就可以添加或删除新代码,而无需在每次发生更改时重新部署所有代码。

所以我想要一个通用的网络服务来调用这个业务逻辑。

我的问题是,构建它的最佳方式是什么?我能否为我的业务逻辑部署单独的 EJB,并让 Web 服务根据传递的参数调用 EJB?

或者我应该将业务组件作为共享库并以这种方式调用它们?我正在寻找一种获得最佳性能的方法。

我将有大约 20 个由其他程序员编写的不同业务模块。就像我说的,我不希望所有模块都在同一个 EAR 或 WAR 文件中。它们需要单独部署。

有什么想法吗?

【问题讨论】:

    标签: java ejb-3.0 weblogic ejb


    【解决方案1】:

    WebLogic 10.3.4 包括新的 Java EE6 API 支持,包括带有 Jersey 的 JAX-RS 1.1。我们最近做了一个关于这个功能的网络广播,网络广播#4 涵盖了 JAX-RS。这是链接:http://www.oracle.com/technetwork/middleware/weblogic/learnmore/weblogic-javaee6-webcasts-358613.html 这还有一个名为 Oracle Parcel Service 的示例应用程序,您可以在此处下载代码:https://www.samplecode.oracle.com/sf/projects/oracle-parcel-svc/

    如果您使用 JAXB,您可以将 JSON 和 XML 编组到同一个 Java 对象中。这里的挑战是 JAXB 生成的类默认情况下是不可序列化的,因此如果您想从 JAX-RS 服务访问远程 EJB,那么您将遇到问题。

    由于您不能将模块放在同一个 EAR 中,因此还有另一种选择。您可能会使用 Java EE 共享库。然后,您可以将 EJB 部署为 Java EE 共享库并在 REST 客户端中引用该库。这是一个例子:

    在您的 EJB 模块中,在清单中包含以下内容:

    Extension-Name: ops-util
    Implementation-Title: OPS 2.0 Utils Library EXAMPLE_ONLY
    Implementation-Vendor: Oracle
    Implementation-Vendor-Id: com.oracle
    Implementation-Version: 2.0.1
    Specification-Title: Oracle Parcel Service 2.0 Utils Library
    Specification-Vendor: Oracle
    Specification-Version: 2.0
    

    然后在 weblogic.xml (WAR) 或 weblogic-application.xml (EAR) 中引用共享库:

    <wls:weblogic-application
        xmlns:wls="http://www.bea.com/ns/weblogic/weblogic-application"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/javaee_5.xsd http://www.bea.com/ns/weblogic/weblogic-application http://www.bea.com/ns/weblogic/weblogic-application/1.0/weblogic-application.xsd">
      <!-- server-version: 10.3 -->
    <wls:library-ref>
      <wls:library-name>ops-util</wls:library-name>
      <wls:specification-version>2.0</wls:specification-version>
      <wls:implementation-version>2.0.1</wls:implementation-version>
      <wls:exact-match>false</wls:exact-match>
    </wls:library-ref>
    </wls:weblogic-application>
    

    【讨论】:

    • 是的,我正在使用 Jax-rs。不利的一面是,根据公司政策,任何重新部署到生产环境的代码都必须重新测试,即使它没有更改(确实会发生事故)。所以我只想部署新的或更改的业务功能,而不部署整个应用程序。
    • 有趣的方法,我理解他们为什么会这样做,但这显然会使您的工作过于复杂。您可以从您的 JAX-RS 应用程序中使用“远程”EJB 调用(即使它部署在同一个容器上)。只需创建一个不带参数的 InitialContext,您就可以查找您的 EJB:
    • 我能够独立于 jax-rs 应用程序部署一个 ejb 并让它与远程接口一起工作。因为它们都在同一个 jvm 中运行,有没有办法让本地接口工作?
    • 我不这么认为,但我不确定。我相信本地接口用于同一应用程序部署中的类或模块之间。此外,您必须将 REST 模块(可能是 WAR)和 EJB 模块 (JAR) 部署在一个 ear 文件中,这违反了单独部署它们的要求。
    • 或者,您可以为您的 EJB 创建一个直通式 REST 接口并将其与您的 EJB 一起部署,然后通过 REST 接口从您的其他 REST 部署调用 EJB。不太理想,但正确的做法是将其打包到 EAR 中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多