首先,我想强调我已经阅读了StackOverflow中的其他帖子(example)有类似的问题,但不幸的是我没有设法用我看到的答案解决这个问题在那些帖子上。我无意重新发布一个已经回答过的问题,所以如果是这样的话,我会道歉,我会感谢谁指出解决方案的发布位置。
这是我的问题:
我正在尝试在WebLogic 10.3.2中部署EJB。目的是使用特定的WorkManager
来执行在此组件范围内生成的工作。
考虑到这一点,我使用基于Web的界面( Environment &gt; <)在我的WebLogic配置上设置了WorkManager
(名为ResponseTimeReqClass-0
) em>工作经理&gt; 新)。这是一个截图:
这是我的会话bean定义和描述符:
OrquestratorRemote.java
package orquestrator;
import javax.ejb.Remote;
@Remote
public interface OrquestratorRemote {
public void initOrquestrator();
}
OrquestratorBean.java
package orquestrator;
import javax.ejb.Stateless;
import com.siemens.ecustoms.orchestration.eCustomsOrchestrator;
@Stateless(name = "OrquestratorBean", mappedName = "OrquestratorBean")
public class OrquestratorBean implements OrquestratorRemote {
public void initOrquestrator(){
eCustomsOrchestrator orquestrator = new eCustomsOrchestrator();
orquestrator.run();
}
}
META-INF \ ejb-jar.xml中
<?xml version='1.0' encoding='UTF-8'?>
<ejb-jar xmlns='http://java.sun.com/xml/ns/javaee'
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
metadata-complete='true'>
<enterprise-beans>
<session>
<ejb-name>OrquestradorEJB</ejb-name>
<mapped-name>OrquestratorBean</mapped-name>
<business-remote>orquestrator.OrquestratorRemote</business-remote>
<ejb-class>orquestrator.OrquestratorBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
</enterprise-beans>
<assembly-descriptor></assembly-descriptor>
</ejb-jar>
META-INF \ WebLogic的EJB-jar.xml中
(我已将工作管理器配置放在此文件中,正如我在互联网上的教程中看到的那样)
<weblogic-ejb-jar xmlns="http://www.bea.com/ns/weblogic/90"
xmlns:j2ee="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.bea.com/ns/weblogic/90
http://www.bea.com/ns/weblogic/90/weblogic-ejb-jar.xsd">
<weblogic-enterprise-bean>
<ejb-name>OrquestratorBean</ejb-name>
<jndi-name>OrquestratorBean</jndi-name>
<dispatch-policy>ResponseTimeReqClass-0</dispatch-policy>
</weblogic-enterprise-bean>
</weblogic-ejb-jar>
我已将其编译为JAR并将其部署在WebLogic上,作为管理服务器和我的解决方案上的所有群集节点共享的库(处于“活动”状态)。
正如我在几个教程和示例中看到的那样,我在我的应用程序中使用此代码,以便调用bean:
InitialContext ic = null;
try {
Hashtable<String,String> env = new Hashtable<String,String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
env.put(Context.PROVIDER_URL, "t3://localhost:7001");
ic = new InitialContext(env);
}
catch(Exception e) {
System.out.println("\n\t Didn't get InitialContext: "+e);
}
//
try {
Object obj = ic.lookup("OrquestratorBean");
OrquestratorRemote remote =(OrquestratorRemote)obj;
System.out.println("\n\n\t++ Remote => "+ remote.getClass());
System.out.println("\n\n\t++ initOrquestrator()");
remote.initOrquestrator();
}
catch(Exception e) {
System.out.println("\n\n\t WorkManager Exception => "+ e);
e.printStackTrace();
}
不幸的是,这不起作用。它在运行时抛出异常,如下所示:
WorkManager Exception =&gt; javax.naming.NameNotFoundException: 无法解析'OrquestratorBean'。 已解决''[根异常是 javax.naming.NameNotFoundException: 无法解析'OrquestratorBean'。 解决 ''];剩下的名字 'OrquestratorBean'
看到这个后,我甚至尝试改变这一行
Object obj = ic.lookup("OrquestratorBean");
到此:
Object obj = ic.lookup("OrquestratorBean#orquestrator.OrquestratorBean");
但结果是相同的运行时异常。
任何人都可以帮助我检测我在这里做错了什么吗?我正在调试这个问题,因为我不知道如何检查可能导致此问题的原因......
提前感谢您的耐心和帮助。
答案 0 :(得分:3)
您的EJB绑定在以下JNDI名称下(当部署为EJB模块时):
Object obj = ic.lookup("OrquestratorBean#orquestrator.OrquestratorRemote");
请注意,我将代码(没有 weblogic-ejb-jar.xml )部署为EJB模块,而不是共享库。
答案 1 :(得分:0)
似乎是ejb-jar.xml中的映射名称“Orquestrator”可能会覆盖Bean的mappedName = OrquestratorBean设置。 您是否尝试过“Orquestrator”的ic.lookup?