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