我有一个在JBOSS 4.2.3GA上运行的EJB2应用程序,使用java:comp/env/ejb/MyEJB
查找工作正常。
当转移到JBOSS AS 6.1.Final时,它突然破坏了NameNotFoundException异常。
JNDI View确实显示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>
答案 0 :(得分:0)
在上下文中获取EJB(在本例中使用类名):
public static <T> T getInstance(final Class<T> type) {
T result = null;
try {
InitialContext ctx = new InitialContext();
BeanManager manager = (BeanManager) ctx.lookup("java:comp/BeanManager");
Set<Bean<?>> beans = manager.getBeans(type);
Bean<T> bean = (Bean<T>) manager.resolve(beans);
if (bean != null) {
CreationalContext<T> context = manager.createCreationalContext(bean);
if (context != null) {
result = (T) manager.getReference(bean, type, context);
}
}
} catch (NamingException e) {
throw new RuntimeException(e);
}
return result;
}
答案 1 :(得分:0)
看起来较新的JBoss / WildFly版本不能很好地处理旧的部署描述符。
如果从以下位置更新ejb-jar.xml架构:
<ejb-jar xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd"
version="2.1">
至少:
<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
version="3.0">
那么它应该像宣传的那样工作。
上找到GitHub上的工作示例