mein aktuelles Problem im Allgemeinen ist, dass ich zwei Wildfly 8.2.0Final-Instanzen auf meinem Rechner ausgeführt habe. Ich weiß, es gibt ähnliche Fragen, aber keine von ihnen hilft wirklich bei meinem Problem. Einer von ihnen hält eine erholsame Anwendung, die eine statusfreie Session-Bean SenderBean
auslöst, wenn es ein GET empfängt. Anschließend sollte diese statuslose Session-Bean eine Methode von einer fernen Stateless-Session-Bean PrintBean
aufrufen, die sich auf der anderen Wildfly-Instanz befindet.EJB auf Wildfly Calling Remote EJB von einem anderen Wildfly
Ich werde damit beginnen zu erklären, was ich bisher gemacht habe (vielleicht habe ich etwas verpasst, ich bin ziemlich neu in Java EE und Wildfly).
Ich werde die Wildfly Instanz mit dem SenderBean
die Sender
und das mit dem PrintBean
die Receiver
nennen.
Ich habe eine Benutzeranmeldung Stefan
mit Passwort namens stefan
, das zur Gruppe guest
auf den Receiver
. Auf den Sender
im standalone-full.xml
, fügte ich einen Sicherheits-Realm von
<security-realm name="ejb-security-realm">
<server-identities>
<secret value="c3R1ZmFu"/>
</server-identities>
</security-realm>
in den <security-realms>
Abschnitt setzen. Ich habe auch eine Outbound-socket-Bindung durch
<outbound-socket-binding name="remote-ejb">
<remote-destination host="localhost" port="8080"/>
</outbound-socket-binding>
in die <socket-binding-group ...>
Abschnitt setzen. Schließlich habe ich eine Outbound-Verbindung, von
<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>
in den <subsystem xmlns="urn:jboss:domain:remoting:2.0">
Abschnitt setzen.
Ich starte die Sender
mit dem CLI-Befehl standalone.bat -c standalone-full.xml -Djboss.socket.binding.port-offset=100 -Djboss.node.name=Sender
und die Receiver
mit standalone.bat -c standalone-full.xml -Djboss.node.name=Receiver
.
Die lokale Stateless Session Bean auf die Sender
SenderBean
genannt wird:
@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();
}
}
}
Und die Receiver
enthält die PrintBean
:
@Stateless
@Remote(PrintService.class)
public class PrintBean implements PrintService {
@Override
public String print(String name) {
return "Hello " + name;
}
}
das Problem ist jetzt, ich immer ein IllegalStateException
erhalten, die EJBCLIENT000025 sagt : Kein EJB-Empfänger zum Handhaben verfügbar ...
Bin ich vielleicht etwas falsch machen? Ich bin ziemlich neu bei EJBs und Wildfly. Sie finden das Projekt-Setup unter GitHub.