【发布时间】:2018-02-25 00:51:45
【问题描述】:
我有一个在 JBOSS 4.2.3GA 上运行的 EJB2 应用程序,并且查找工作正常,使用:java:comp/env/ejb/MyEJB。
在迁移到 JBOSS AS 6.1.Final 时,突然出现异常 NameNotFoundException。
JNDI 视图确实显示 EJB 绑定到正确的树。在查找之前放置一个断点,我能够观察并确认它已绑定。使用context.list("java:comp/env/ejb"),我能够在迭代器中看到MyEJB。使用context.lookup("java:comp/env/ejb") 也可以。但是 context.lookup("java:comp/env/ejb/MyEJB") 在监视窗口上显示 NamingException(运行实际代码时显示 NameNotFoundException)。
有什么我不知道的变化吗?很难找到有关此 EJB 内容的信息,并且我发现的任何信息表明要么确认我做对了,要么说使用 ejb/MyEJB,这根本不起作用。
提前致谢。感谢您的帮助。
ejb-jar.xml:
<session>
<ejb-name>AdminSessionEJB</ejb-name>
<local-home>com.admin.ejb.business.AdminSessionHome</local-home>
<local>com.admin.ejb.business.AdminSession</local>
<ejb-class>com.admin.ejb.business.AdminSessionEJB</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
<ejb-local-ref>
<ejb-ref-name>ejb/UserEJB</ejb-ref-name>
<ejb-ref-type>Entity</ejb-ref-type>
<local-home>com.admin.ejb.entity.UserHome</local-home>
<local>com.admin.ejb.entity.User</local>
<ejb-link>UserEJB</ejb-link>
</ejb-local-ref>
<ejb-local-ref>
<ejb-ref-name>ejb/UniqueKeyEJB</ejb-ref-name>
<ejb-ref-type>Entity</ejb-ref-type>
<local-home>com.framework.ejb.entity.UniqueKeyHome</local-home>
<local>com.framework.ejb.entity.UniqueKey</local>
<ejb-link>UniqueKeyEJB</ejb-link>
</ejb-local-ref>
<ejb-local-ref>
<ejb-ref-name>ejb/UserGroupEJB</ejb-ref-name>
<ejb-ref-type>Entity</ejb-ref-type>
<local-home>com.admin.ejb.entity.UserGroupHome</local-home>
<local>com.admin.ejb.entity.UserGroup</local>
<ejb-link>UserGroupEJB</ejb-link>
</ejb-local-ref>
</session>
jboss.xml:
<enterprise-beans>
<entity>
<ejb-name>UserEJB</ejb-name>
<local-jndi-name>ejb/UserHome</local-jndi-name>
<read-only>false</read-only>
<configuration-name>UserEJB Container Configuration</configuration-name>
<ejb-local-ref>
<ejb-ref-name>ejb/UserGroupEJB</ejb-ref-name>
<local-jndi-name>ejb/UserGroupHome</local-jndi-name>
</ejb-local-ref>
</entity>
</enterprise-beans>
【问题讨论】:
-
请显示 ejb-jar.xml 文件中 EJB 声明的 XML 声明和 jboss.xml 文件中相应的 XML。
-
我已经发布了仅用于 UserEJB 的部分,这就是我正在测试的内容。如果您需要更多,请告诉我。谢谢。
-
我认为您需要从 jboss.xml 文件中删除
<local-jndi-name>ejb/UserHome</local-jndi-name>,因为容器应该从 ejb-jar.xml 文件中的<ejb-link>UserEJB</ejb-link>条目中找出链接。此外,将<ejb-local-ref>...</ejb-local-ref>放在 jboss.xml 文件中也没有意义(除非您试图覆盖 ejb-jar.xml 文件的内容)。 -
删除上面提到的 1 个或两个后出现同样的错误。看日志,去掉
<local-jndi-name>后,JBOSS自动给它起了一个新名字Bound EJB LocalHome 'UserEJB' to jndi 'local/UserEJB@1161245188'。这是删除之前的样子:Bound EJB LocalHome 'UserEJB' to jndi 'ejb/UserHome' -
好吧,我继续删除了
jboss.xml中的所有内容,以便所有 EJB 都由名称为NameEJB@xxxxxxxxxx的 JBOSS 生成,然后在首次访问时使用key = NameEJB和 @987654337 存储所有这些名称@ 然后根据值查找。非常感谢您花时间研究我的问题。非常感谢你,史蒂夫。
标签: java jakarta-ee jboss jndi