我现在
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>
工作耳朵应用程序中是否存在我缺少的内容以及这些配置文件的用途是什么?如何从servlet访问我的ejb服务?
答案 0 :(得分:1)
您需要test.jar/META-INF/ejb-jar.xml
中的EJB部署描述符,并且EAR部署描述符必须转到your.ear/META-INF/application.xml
(EJB jar中的 NOT !)。
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接口了。所以拿一点我的例子。
在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的相应<ejb-name/>
,如果您的引用与EJB在同一个JAR中。否则,您必须预先提供JAR的名称,例如<ejb-link>test.jar#MyCoolEJB</ejb-link>
。
然后,在您的servlet中,您可以对“java:comp / env / TheJNDINameOfYourEJB”执行JNDI查找,以访问EJB的home接口。我希望,这给了你一些指导,让你自己深入研究。
顺便说一句:如果EJB 2.x不是固定要求,那么看看EJB 3.x.在那个版本中,很多东西都更容易使用!
答案 1 :(得分:1)
您的EJB似乎没有打包好:它应该在它自己的EJB模块中,我看不到EJB部署描述符(ejb-jar.xml文件)。请查看Packaging Applications和Directory Structure in an EJB Module JAR File