我如何使用Weblogic构建Rest + EJB?

时间:2011-04-14 21:53:10

标签: java ejb-3.0 weblogic ejb

我需要使用weblogic构建1个restful Web服务。此Web服务将具有参数以选择服务应返回的数据。像'客户'或'产品'。

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

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

我的问题是,构建这个的最佳方法是什么?我可以为业务逻辑部署单独的EJB,并让Web服务根据传递的参数调用EJB吗?

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

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

有什么想法吗?

1 个答案:

答案 0 :(得分: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>