まず、StackOverflow の他の投稿 ( example ) で同様の質問を既に読んだことを強調したいと思いますが、残念ながら、それらの投稿で見た回答でこの問題を解決できませんでした。すでに回答済みの質問を再投稿するつもりはありません。その場合は、お詫び申し上げます。また、解決策が投稿されている場所を指摘してくださる方に感謝します。
これが私の質問です:
EJB を WebLogic 10.3.2 にデプロイしようとしています。目的はWorkManager
、このコンポーネントの範囲内で作成された作業を実行するために特定のものを使用することです。
これを念頭に置いて、Web ベースのインターフェース ( [環境] > [ワーク マネージャー] > [新規WorkManager
]) を使用して、WebLogic 構成に(名前付き)をセットアップしました。スクリーンショットは次のとおりです。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 例外 => javax.naming.NameNotFoundException: 「OrquestratorBean」を解決できません。解決済み '' [ルート例外は javax.naming.NameNotFoundException です: 'OrquestratorBean' を解決できません。解決済み '']; 残りの名前「OrquestratorBean」
これを見た後、この行を変更してみました
Object obj = ic.lookup("OrquestratorBean");
これに:
Object obj = ic.lookup("OrquestratorBean#orquestrator.OrquestratorBean");
しかし、結果は同じ実行時例外でした。
ここで私が間違っていることを誰かが見つけてくれますか? この問題の原因を確認する方法がわからないため、これをデバッグするのに苦労しています...
ご理解とご協力をよろしくお願いいたします。