NameNotFoundException при вызове EJB в Weblogic 10.3 - PullRequest
0 голосов
/ 13 апреля 2010

Прежде всего, я хотел бы подчеркнуть, что я уже читал другие статьи в StackOverflow ( пример ) с похожими вопросами, но, к сожалению, мне не удалось решить эту проблему с помощью ответов Я видел на этих постах. Я не собираюсь публиковать вопрос, на который уже дан ответ, поэтому, если это так, я приношу свои извинения и буду благодарен тем, кто указывает, где размещено решение.

Вот мой вопрос:

Я пытаюсь развернуть EJB в WebLogic 10.3.2. Цель состоит в том, чтобы использовать определенный WorkManager для выполнения работы, произведенной в рамках этого компонента.

Имея это в виду, я настроил WorkManager (с именем ResponseTimeReqClass-0) в своей конфигурации WebLogic, используя веб-интерфейс ( Environment > Work Managers > Новый ). Вот скриншот:

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

Вот мое определение и дескрипторы сессионного компонента:

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 в виде библиотеки, общей для административного сервера и всех узлов кластера в моем решении (оно находится в состоянии «Активно»).


Как я видел в нескольких уроках и примерах, я использую этот код в своем приложении для вызова компонента:

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 => javax.naming.NameNotFoundException: Невозможно разрешить 'OrquestratorBean'. Разрешено '' [Исключение корня javax.naming.NameNotFoundException: Невозможно разрешить 'OrquestratorBean'. Решено '']; оставшееся имя 'OrquestratorBean'

Увидев это, я даже попытался изменить эту строку

Object obj = ic.lookup("OrquestratorBean");

на это:

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

но результатом было то же исключение времени выполнения.

Может кто-нибудь помочь мне определить, что я здесь делаю неправильно? У меня проблемы с отладкой, потому что я не знаю, как проверить, что может быть причиной этой проблемы ...

Заранее благодарим вас за терпение и помощь.

Ответы [ 2 ]

3 голосов
/ 13 апреля 2010

Ваш EJB привязывается под следующим именем JNDI (при развертывании как модуль EJB):

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

Обратите внимание, что я развернул ваш код (без weblogic-ejb-jar.xml ) как модуль EJB, а не как разделяемая библиотека.

0 голосов
/ 13 апреля 2010

похоже, что ваше отображаемое имя в ejb-jar.xml "Orquestrator" может переопределять настройку Bean mappedName = OrquestratorBean.Вы пробовали ic.lookup для "Orquestrator"?

...