0

首先,我想强调一下,我已经阅读过 StackOverflow(示例)中的其他帖子,里面有类似的问题,但不幸的是,我没有通过在这些帖子中看到的答案来解决这个问题。我无意重新发布已经回答的问题,所以如果是这种情况,我很抱歉,我会感谢谁指出了解决方案的发布位置。

这是我的问题:

我正在尝试在 WebLogic 10.3.2 中部署 EJB。目的是使用一个特定WorkManager的来执行在这个组件范围内产生的工作。

考虑到这一点,我使用基于 Web 的界面(Environment > Work Managers > New )在我的 WebLogic 配置上设置了一个WorkManager(命名)。这是一个屏幕截图:ResponseTimeReqClass-0

http://img11.imageshack.us/img11/8607/screenshot0p.jpg

这是我的会话 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");

但结果是相同的运行时异常。

谁能帮我检测一下我在这里做错了什么?我在调试时遇到了麻烦,因为我不知道如何检查可能导致此问题的原因...

提前感谢您的耐心和帮助。

4

2 回答 2

3

您的 EJB 绑定在以下 JNDI 名称下(部署为 EJB 模块时):

Object obj = ic.lookup("OrquestratorBean#orquestrator.OrquestratorRemote");

请注意,我将您的代码(没有weblogic-ejb-jar.xml)部署为 EJB 模块,而不是共享库。

于 2010-04-13T19:48:56.937 回答
0

似乎您在 ejb-jar.xml “Orquestrator”中的映射名称可能会覆盖 Bean 的 mappedName=OrquestratorBean 设置。您是否尝试过 ic.lookup 的“Orquestrator”?

于 2010-04-13T13:07:35.853 回答