java - ejb 2.x Ear 还需要什么?

标签 java ejb

我现在有了

ear 
|----test.jar
     |-------META-INF
             |-------application.xml
     |-------test
             |-------Test.class
             |-------TestEJB.class
             |-------TestHome.class
|----test.war
     |-------WEB-INF
             |-------web.xml
     |-------test
             |-------TestServlet.class

application.xml

<application>
  <display-name>Ejb Test</display-name>
  <module>
    <ejb>test.jar</ejb>
  </module>
  <module>
    <web>
      <web-uri>test.war</web-uri>
      <context-root>/test</context-root>
    </web>
  </module>
</application>

web.xml

<web-app>
  <servlet>
    <servlet-name>Test</servlet-name>
    <servlet-class>test.TestServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Test</servlet-name>
    <url-pattern>/test</url-pattern>
  </servlet-mapping>
</web-app>

工作中的 Ear 应用程序是否缺少某些内容?这些配置文件的用途是什么?如何从 servlet 访问我的 ejb 服务?

最佳答案

您需要 test.jar/META-INF/ejb-jar.xml 中的 EJB 部署描述符并且 EAR 部署描述符必须转到 your.ear/META-INF/application.xml (不在 EJB jar 内!)。

ejb-jar.xml 将包含类似于以下 EJB 的 XML 片段的内容:

<enterprise-beans>
    <session>
        <ejb-name>MyCoolEJB</ejb-name>
        <local-home>test.TestHome</local-home>
        <local>test.Test</local>
        <ejb-class>test.TestEJB</ejb-class>
    </session>

    <!-- ... more <session/> or <entity/> entries ... -->
</enterprise-beans>

我自己也使用过 EJB3,但情况有些不同,而且不再有 home 接口(interface)。因此,请以我的例子为例。

在 web.xml 中,您必须有对 EJB 的相应引用:

<ejb-local-ref>
    <ejb-ref-name>TheJNDINameOfYourEJB</ejb-ref-name>
    <ejb-ref-type>Session</ejb-ref-type>
    <ejb-link>MyCoolEJB</ejb-link>   <!-- the value from <ejb-name/> above -->
</ejb-local-ref>

<ejb-link/>指向对应的<ejb-name/>如果您的引用与您的 EJB 位于同一个 JAR 中,则该引用位于您的 EJB 中。否则,您必须预先添加 JAR 的名称,例如 <ejb-link>test.jar#MyCoolEJB</ejb-link> .

然后,在您的 servlet 中,您可以对“java:comp/env/TheJNDINameOfYourEJB”进行 JNDI 查找,以访问 EJB 的 home 接口(interface)。我希望这能给您一些深入研究的指导。

顺便说一句:如果 EJB 2.x 不是固定要求,那么看看 EJB 3.x。在该版本中,很多东西都变得更容易使用!

关于java - ejb 2.x Ear 还需要什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1433667/

相关文章:

java - jit会优化新对象吗

java - 开关中的中断标签

java - 从使用 EJB 的 Glassfish 迁移到使用 Spring 的 Google App Engine

java - 如何将复杂的业务验证与 JSR-303 合并?

java - 在 Firestore Java 管理 SDK 中未收到有关网络断开和重新连接的文档更新

java - java中128位的位运算

java - Java EE 中的异步执行

jsf - 托管bean中的回滚事务

java - 事务不回滚

java - 如何在 Java 中指定文件的路径?