Моя текущая проблема в целом заключается в том, что у меня есть два экземпляра Wildfly 8.2.0Final, запущенные на моей машине. Я знаю, есть похожие вопросы, но никто из них действительно не помогает с моей проблемой. Один из них содержит приложение, которое запускает сессионный компонент без состояния без учета состояния SenderBean
, когда он получает GET. Впоследствии этот сеансовый компонент без состояния должен вызывать метод из удаленного сеанса сеанса без состояния PrintBean
, который находится на другом экземпляре wildfly.EJB на Wildfly, вызывающем удаленный EJB от другого Wildfly
Начну с того, что объясню, что я сделал до сих пор (возможно, я что-то пропустил, я совсем не знаком с Java EE и Wildfly).
Я собираюсь вызвать Wildfly экземпляр с SenderBean
Sender
и один с PrintBean
Receiver
.
Я создал пользователя приложения с именем Stefan
с паролем stefan
, принадлежащим группе guest
на Receiver
. На Sender
в standalone-full.xml
, я добавил Security-Realm, поставив
<security-realm name="ejb-security-realm">
<server-identities>
<secret value="c3R1ZmFu"/>
</server-identities>
</security-realm>
в раздел <security-realms>
. Я также добавил исходящую-сокет-связывания, помещая
<outbound-socket-binding name="remote-ejb">
<remote-destination host="localhost" port="8080"/>
</outbound-socket-binding>
в секцию <socket-binding-group ...>
. Наконец, я создал исходящую связь, поставив
<outbound-connections>
<remote-outbound-connection name="remote-ejb-connection" outbound-socket-binding-ref="remote-ejb" username="Stefan" security-realm="ejb-security-realm">
<properties>
<property name="SASL_POLICY_NOANONYMOUS" value="false"/>
<property name="SSL_ENABLED" value="false"/>
</properties>
</remote-outbound-connection>
</outbound-connections>
в раздел <subsystem xmlns="urn:jboss:domain:remoting:2.0">
.
Я начинаю Sender
командой CLI standalone.bat -c standalone-full.xml -Djboss.socket.binding.port-offset=100 -Djboss.node.name=Sender
и Receiver
с standalone.bat -c standalone-full.xml -Djboss.node.name=Receiver
.
Сессия Bean Местные Stateless на Sender
называется SenderBean
:
@Stateless
public class SenderBean implements SenderService {
private static final Logger logger = Logger.getLogger(SenderBean.class.getSimpleName());
public void send(){
logger.info("Trying to invoke");
this.invoke();
}
private void invoke() {
Properties clientProperties = new Properties();
clientProperties.put("remote.connections", "default");
clientProperties.put("remote.connection.default.port", "8080");
clientProperties.put("remote.connection.default.host", "localhost");
Properties properties = new Properties();
properties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
try {
Context context = new InitialContext(properties);
context = new InitialContext(properties);
Object x = context.lookup("ejb:baseproject-ear-01.00.00-SNAPSHOT/testdomain-service-01.00.00-SNAPSHOT/Receiver/PrintBean!com.schubert.baseproject.testdomain.service.PrintService");
logger.info("Obtained some object "+x.toString());
logger.info("Trying to cast.");
PrintService s = (PrintService) x;
logger.info("Cast successful");
logger.info("Printing using remote ejb: "+s.print("Markus"));
} catch (NamingException e) {
e.printStackTrace();
}
}
}
И Receiver
содержит PrintBean
:
@Stateless
@Remote(PrintService.class)
public class PrintBean implements PrintService {
@Override
public String print(String name) {
return "Hello " + name;
}
}
проблема сейчас, я всегда получаю IllegalStateException
что говорит EJBCLIENT000025 : Нет приемника EJB для обработки ...
Am I возможно, что-то не так? Я довольно новичок в EJB и Wildfly. Вы можете найти проект на GitHub.