問題は次のとおりです。プロジェクトを JBoss 4.2 から JBoss 7.1 に移行しようとしています。以前は、ejb ルックアップは次の方法で行われていました。
Properties props = new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.security.jndi.JndiLoginInitialContextFactory");
props.put(Context.SECURITY_PRINCIPAL, new SimplePrincipal(login));
props.put(Context.SECURITY_CREDENTIALS, password);
InitialContext ctx = new InitialContext(props);
SomeClass someClass = (SomeClass) ctx.lookup("appName/SomeClass/local");
そして、すべてがうまくいきました。現在、実装は次のとおりです。
InitialContext ctx = new InitialContext();
SomeClass someClass = (SomeClass) ctx.lookup("java:app/jarModuleName/SomeClass!com.example.SomeClass");
ejb インターフェイス:
@Local
public interface SomeClass(){
...
}
ejb クラス:
@Stateless(name = "SomeClass")
public class SomeClassImpl implements SomeClass() {
...
}
ブート中に jboss はバインディングが次のように表示されます。
java:app/jarModuleName/SomeClass!com.example.SomeClass
しかし、その後の lookup() は NameNotFoundException を引き起こします。
パッケージ構造は次のとおりです。
appName.ear
|
+--jmx-services.sar (where lookup method is invoked)
|
+--jarModuleName.jar (where ejb is located.)
jarModuleName の ejb-jar.xml の内容:
<ejb-jar version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd">
<session>
<ejb-name>SomeClass</ejb-name>
<ejb-class>com.example.SomeClassImpl</ejb-class>
</session>
</enterprise-beans>
@Startup および @Singleton アノテーションではなく、jboss-service.xml および start()/stop() メソッドを使用して、「古いスタイル」で MBean を作成することも指定できます。