我一直在试图注入一个EJB到JAX-RS资源通过InitialContext()lookup()
收到以下异常:中的NameNotFoundException JAX-RS注入EJB种源
<javax.naming.NameNotFoundException: While trying to look up
comp/env/AServiceLocal
in /app/webapp/wcc/1377099157.; remaining name 'comp/env/AServiceLocal'>
我查找资源的构造函数:
try {
initialContext = new InitialContext();
String jndiSubcontext = "java:comp/env/";
aService = (AServiceLocal) initialContext.lookup(jndiSubcontext+AServiceLocal.class.getSimpleName());
eSService = (ESServiceLocal) initialContext.lookup(jndiSubcontext+ESServiceLocal.class.getSimpleName());
eService = (EServiceLocal) initialContext.lookup(jndiSubcontext+EServiceLocal.class.getSimpleName());
} catch (NamingException e) {
e.printStackTrace();
}
这里是考虑到他们都是Maven项目的文件结构:
global
|
--shared
|
|---src/main/java/com/x/y/z/AServiceLocal.java (ejb)
|
--war-project
|
|--src/main/java/comm/x/y/z/TheResource.java (jax-rs)
还有更多的maven项目相关,它们都是通过全局项目以等级方式进行maven配置的。
也有在同一项目中war-project
也执行查找到shared
项目,他们做工作资源。
我不明白是什么问题。
编辑
加入ejb-local-ref
部署描述符后:
<ejb-local-ref>
<ejb-ref-name>AServiceLocal</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<local>com.x.y.service.AdminXProfileServiceLocal</local>
<ejb-link>shared.jar#AdminXProfileService</ejb-link>
</ejb-local-ref>
我收到以下错误:
[J2EE:160101]Error: The ejb-link "shared.jar#AService" declared in the ejb-ref or ejb-local-ref "AServiceLocal" in the application module "xyz-99.1.0-SNAPSHOT.war" could not be resolved. The target EJB for the ejb-ref could not be found. Ensure that the link is correct.
罐子shared.jar
是战争项目的依赖,但似乎该位置不正确。我必须将这些软件包也添加到ejb-link
吗?
喜欢的东西:<ejb-link>shared.jar#com.x.y.ServiceImpl</ejb-link>
我ASLO需要指出的是,有一种HK2,CDI和查找作为注入的部分混合由于该项目是很老,也有人迁移到WebLogic 12c版最近如此正常@Inject
或@EJB
似乎没有工作。
你在哪里包装shared.jar?你将它打包在EAR中,还是依赖于EJB-in-WAR(从EJB 3.1开始添加)? –