我正在将一个应用程序从Jboss 3迁移到Jboss 7。我使用的是jboss-as-7.1.1.Final。该应用程序是一个.ear,包含几个EJB .jar和一个.war,其中包含所有servlet和jsp页面。ejb既是CMP实体bean又是会话bean,并且大量使用Xdoclet。我正处在这样一个点上,应用程序的构建和部署都是正常的,但由于明显的JNDI问题,ejb无法正确地实例化。我知道Jboss 7对JNDI的使用方式进行了更改,但是关于如何将这些更改应用于EJB 2 xdoclet代码的文档很少,几乎不存在。假设我有会话bean代码UserManagerEJB.java,下面是xdoclet
* @ejb.bean
* name="UserManager"
* jndi-name="ejb/UserManager"
* type="Stateless"
* view-type="remote"
* transaction-type="Container"
UserManagerEJB使用以下xdoclet
引用实体bean User* @ejb.ejb-ref
* ejb-name="User"
* view-type="local"
* ref-name="ejb/UserLocal"
和实体bean代码UserEJB.java具有以下xdoclet声明
* @ejb.bean
* name="User"
* local-jndi-name="ejb/UserLocal"
* primkey-field="userId"
* type="CMP"
* view-type="local"
Jboss AS 7指定jndi-name、local-jndi-name和ref-name的正确方法是什么?
在web应用程序的.war/web - inf/web.xml中作为ejb-ref-name使用的JNDI名称是什么?
以前ejb/EJBNAME
只是工作,但现在这样做只是让我一个NamingException。盲目地将所有JNDI名称更改为java:app/myuser/User!com.myco.module.myuser.ejb.entity.UserLocal
不管用,我开始陷入改变事物的深渊,坦率地说,我不太理解。JNDI命名方案的变化似乎比我习惯的要大得多。
如果有人能提供一个简短的解释新的JNDI命名方案,将非常感激!
这对我很有效。
假设你有一只耳朵叫做"测试"。Ear"和无状态会话bean"com.test"。SessionClass",SessionClass实现了"com.test.SessionClassRemote"…JNDI查找将是
ctx.lookup("test/SessionBean/com.test.SessionClass!com.test.SessionRemote");