Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java EJB2.x ear中还需要什么?_Java_Ejb - Fatal编程技术网

Java EJB2.x ear中还需要什么?

Java EJB2.x ear中还需要什么?,java,ejb,Java,Ejb,我现在有 ear |----test.jar |-------META-INF |-------application.xml |-------test |-------Test.class |-------TestEJB.class |-------TestHome.class |----test.war |-------WEB-INF

我现在有

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>

Ejb测试
test.jar
测试战争
/试验
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>

试验
test.TestServlet
试验
/试验

在一个正常工作的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>

支原体
test.TestHome
测试,测试
test.TestEJB
我自己也曾与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的名称
一场
支原体
如果引用与EJB位于同一个JAR中,则
指向EJB的相应
。否则,您必须预先输入JAR的名称,例如
test.JAR\mycolejb

然后,在servlet中,您可以对“java:comp/env/TheJNDINameOfYourEJB”执行JNDI查找,以访问EJB的主接口。我希望,这能给你一些建议,让你自己深入研究


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

您的EJB似乎没有很好地打包:它应该在自己的EJB模块中,我看不到EJB部署描述符(EJB-jar.xml文件)。看一看

还有没有其他的,区别是什么?我不能只在应用程序中包含EJBHome部分,直接调用create而不使用refs和jndi吗?前者用于引用EJB的远程接口,后者用于引用本地接口。例如,有关所有接口之间差异的解释,请参见。JNDI:在EJB2.x中,您使用home接口的create()方法获取对EJB的引用。但是,您首先需要有对home接口的引用,为此您需要refs和JNDI