我正在使用Weblogic 11g,EJB3.0。
我试图在同一台机器上从一个部署到另一个部署进行简单的查找。但没有成功。
这是代码:
在一个部署中,这是目标类:
@CallByReference
@Stateless (mappedName = "ejb/SyncOperatorsBean")
@Local ({SyncOperatorsBeanLocal.class})
@Remote ({SyncOperatorsBeanRemote.class})
@JNDIName("ejb/SyncOperatorsBean") //added
public class SyncOperatorsBean implements SyncOperatorsBeanLocal,SyncOperatorsBeanRemote
...
现在,在第二次部署中,这是我进行查找以实现第一次部署的方式:
SyncOperatorsBeanRemote SyncOperatorsBean = (SyncOperatorsBeanRemote) context
.lookup("ejb/SyncOperatorsBean#com.mirs.sbngenerate.beans.SyncOperatorsBeanRemote");
SyncOperatorsBean.executeSyncOperation();
这是例外:
javax.naming.NameNotFoundException: While trying to lookup 'ejb.SyncOperatorsBean#com.mirs.sbngenerate.beans.SyncOperatorsBeanRemote' didn't find subcontext 'SyncOperatorsBean#com'. Resolved 'ejb'; remaining name 'SyncOperatorsBean#com/mirs/sbngenerate/beans/SyncOperatorsBeanRemote'
at weblogic.jndi.internal.BasicNamingNode.newNameNotFoundException(BasicNamingNode.java:1139)
现在我可以在控制台的JNDI TREE中看到bean SyncOperatorsBean。但仍然有上述例外。
我不能使用Injection
,因为调用类不在容器内(在quartz工作中)。
有什么想法吗?
答案 0 :(得分:0)
查看部署EJB的受管服务器的JNDI树,看看是否可以找到它。另外,您使用的是管理服务器的URL还是部署EJB的受管服务器?
答案 1 :(得分:0)
我通过取消@JNDI注释解决了这个问题。 并调整查找命令,如:
SyncOperatorsBeanRemote SyncOperatorsBean =
(SyncOperatorsBeanRemote) context
.lookup("ejb/SyncOperatorsBean#com.mirs.sbnsync.beans.SyncOperatorsBeanRemote");
SyncOperatorsBean.executeSyncOperation();
更多我不得不将目标类jar添加到服务器lib目录。(很奇怪但这就是我必须做的事情)