代码之家  ›  专栏  ›  技术社区  ›  JtR

EJB2.x ear中还需要什么?

  •  0
  • JtR  · 技术社区  · 16 年前

    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>
    

    2 回复  |  直到 16 年前
        1
  •  1
  •   Pascal Thivent    16 年前

    您的EJB似乎没有很好地打包:它应该在自己的EJB模块中,而我看不到EJB部署描述符(EJB-jar.xml文件)。看看 Packaging Applications Directory Structure in an EJB Module JAR File

        2
  •  1
  •   janko    16 年前

    您需要在中使用EJB部署描述符 test.jar/META-INF/ejb-jar.xml EAR部署描述符必须转到 your.ear/META-INF/application.xml (

    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合作过,那里的情况有点不同,不再有家庭界面。因此,以我的例子为例,恕我直言。

    在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的主接口。我希望,这能给你一些建议,让你自己深入研究。

    顺便说一句:如果EJB2.x不是一个固定的需求,那么看看EJB3.x。在那个版本中,很多东西变得更容易使用!

    推荐文章