首先,我想强调一下,我已经阅读过 StackOverflow(示例)中的其他帖子,里面有类似的问题,但不幸的是,我没有通过在这些帖子中看到的答案来解决这个问题。我无意重新发布已经回答的问题,所以如果是这种情况,我很抱歉,我会感谢谁指出了解决方案的发布位置。
这是我的问题:
我正在尝试在 WebLogic 10.3.2 中部署 EJB。目的是使用一个特定WorkManager
的来执行在这个组件范围内产生的工作。
考虑到这一点,我使用基于 Web 的界面(Environment > Work Managers > New )在我的 WebLogic 配置上设置了一个WorkManager
(命名)。这是一个屏幕截图:ResponseTimeReqClass-0
这是我的会话 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 => javax.naming.NameNotFoundException:无法解析“OrquestratorBean”。已解决“”[根异常是 javax.naming.NameNotFoundException:无法解析“OrquestratorBean”。解决 '']; 剩余名称“OrquestratorBean”
看到这个之后,我什至尝试改变这条线
Object obj = ic.lookup("OrquestratorBean");
对此:
Object obj = ic.lookup("OrquestratorBean#orquestrator.OrquestratorBean");
但结果是相同的运行时异常。
谁能帮我检测一下我在这里做错了什么?我在调试时遇到了麻烦,因为我不知道如何检查可能导致此问题的原因...
提前感谢您的耐心和帮助。