下面是我需要完成的一個示例。有一個虛擬方法的遠程EJB接口。該接口由兩個狀態EJB實現,並且第一個需要執行第二的查找:WildFly 8 EJB查找失敗,並顯示「No cluster context available」
@Stateful
@Remote(BeanI.class)
public class Bean1 implements BeanI {
@Override
public void doSomething() {
try {
System.out.println("Bean1");
JndiManager.lookup(Bean2.class).doSomething();
} catch (Exception ex) { ... }
}
}
@Stateful
@Remote(BeanI.class)
public class Bean2 implements BeanI {
@Override
public void doSomething() {
System.out.println("Bean2");
}
}
helper類JndiManager
如下:
public class JndiManager {
private static Hashtable<String, Object> jndiProps;
static {
jndiProps = new Hashtable<>();
jndiProps.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
}
public static BeanI lookup(Class<?> cls) throws NamingException {
final String name = "ejb:/TestServer//" + cls.getSimpleName() + "!" +
BeanI.class.getName() + "?stateful";
Context ctx = new InitialContext(jndiProps);
return (BeanI) ctx.lookup(name);
}
}
客戶端應用程序執行查找Bean1
並調用它的方法。這裏的jboss-ejb-client.properties
文件:
remote.clusters=ejb
remote.cluster.ejb.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
remote.cluster.ejb.connect.options.org.xnio.Options.SSL_ENABLED=false
remote.cluster.ejb.username=someuser
remote.cluster.ejb.password=somepass1~
endpoint.name=client-endpoint
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
remote.connections=default
remote.connection.default.host=localhost
remote.connection.default.port=8080
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
remote.connection.default.username=someuser
remote.connection.default.password=somepass1~
Bean1
調用成功,但它的Bean2
查找失敗。錯誤是:
java.lang.IllegalStateException: EJBCLIENT000029: No cluster context available for cluster named ejb
line -> JndiManager.lookup(Bean2.class).doSomething();
它在獨立模式下工作正常,但在域模式下運行失敗(運行單個主節點)。另外,在JBoss EAP 6.1中,一切都很好。
任何幫助,將不勝感激。