Прежде всего, я хотел бы подчеркнуть, что я уже читал другие статьи в 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");
но результатом было то же исключение времени выполнения.
Может кто-нибудь помочь мне определить, что я здесь делаю неправильно? У меня проблемы с отладкой, потому что я не знаю, как проверить, что может быть причиной этой проблемы ...
Заранее благодарим вас за терпение и помощь.