Вот пример того, что мне нужно сделать. Существует удаленный интерфейс EJB с фиктивным методом. Интерфейс реализуется двумя EJB с отслеживанием состояния, и первый должен выполнять поиск второго:
@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");
}
}
Вспомогательный класс 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.
Любая помощь будет оценена.