ich seit Tagen bin versucht, EJBs zugreifen, auf einem entfernten Wildfly 10.x Server über einen Client, aber ich kann es nicht machen.EJB-Aufruf von einem Remote-Client wieder
habe ich sehen this, this, this, this und viele andere Beiträge, aber noch ist es nicht funktioniert.
die Vorschläge in den oben genannten Stellen Nach habe ich zwei Java-Code-Versionen werfen entweder „EJB nicht registrieren konnte“ oder „nicht bestanden Verbindung zum Server“.
Vielleicht ist das Problem mit der Serverkonfiguration, aber ich bin hier nicht der Experte.
Ich würde wirklich jede Hilfe dankbar.
I eingesetzt EJBs auf Wildfly 10.1 Remote-Server:
java:global/Remote/EJB-Remote-Demo-ejb-1.0/CalculatorBean!com.maggioni.Stateless2.RemoteCalculator
java:app/EJB-Remote-Demo-ejb-1.0/CalculatorBean!com.maggioni.Stateless2.RemoteCalculator
java:module/CalculatorBean!com.maggioni.Stateless2.RemoteCalculator
java:jboss/exported/Remote/EJB-Remote-Demo-ejb-1.0/CalculatorBean!com.maggioni.Stateless2.RemoteCalculator
java:global/Remote/EJB-Remote-Demo-ejb-1.0/CalculatorBean
java:app/EJB-Remote-Demo-ejb-1.0/CalculatorBean
java:module/CalculatorBean
der Server-Konfiguration:
<subsystem xmlns="urn:jboss:domain:remoting:3.0">
<endpoint/>
<http-connector name="http-remoting-connector" connector-ref="default" security-realm="ApplicationRealm"/>
</subsystem>
die pom-Konfiguration:
<dependency>
<groupId>org.wildfly</groupId>
<artifactId>wildfly-ejb-client-bom</artifactId>
<version>10.1.0.Final</version>
<type>pom</type>
</dependency>
Ich habe jetzt zwei Versionen meiner Code.
Version 1:
private static RemoteCalculator lookupRemoteStatelessCalculator() throws NamingException {
final Hashtable jndiProperties = new Hashtable<>();
jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
jndiProperties.put("jboss.naming.client.ejb.context", true);
final Context context = new InitialContext(jndiProperties);
String appName = "Remote/"
String moduleName = "EJB-Remote-Demo-ejb-1.0/";
String beanName = CalculatorBean.class.getSimpleName();
String viewClassName = RemoteCalculator.class.getName();
final String jndiname = "ejb:" + appName + moduleName + "/" + beanName + "!" + viewClassName;
System.out.println("jndiname is : " + jndiname);
return (RemoteCalculator) context.lookup(jndiname);
}
diese Version wirft den Fehler "Könnte ein EJB-Empfänger nicht registrieren":
Apr 21, 2017 10:44:47 AM org.jboss.ejb.client.remoting.ConfigBasedEJBClientContextSelector setupEJBReceivers
WARN: Could not register a EJB receiver for connection to <myEnvironmentNumber>.jelastic.dogado.eu:4447
java.net.ConnectException: Connection refused: no further information
........
Exception in thread "main" java.lang.IllegalStateException: EJBCLIENT000025: No EJB receiver available for handling [appName:Remote, moduleName:EJB-Remote-Demo-ejb-1.0, distinctName:] combination for invocation context [email protected]
at org.jboss.ejb.client.EJBClientContext.requireEJBReceiver(EJBClientContext.java:798)
Version 2:
private static RemoteCalculator lookupRemoteStatelessCalculator() throws NamingException {
Properties jndiProperties = new Properties();
jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
jndiProperties.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
jndiProperties.put(javax.naming.Context.PROVIDER_URL, "http-remoting://<myEnvironmentNumber>.jelastic.dogado.eu:4447");
jndiProperties.put(javax.naming.Context.SECURITY_PRINCIPAL, "app");
jndiProperties.put(javax.naming.Context.SECURITY_CREDENTIALS, "app");
jndiProperties.put("jboss.naming.client.ejb.context", true);
final Context context = new InitialContext(jndiProperties);
String appName = "Remote/";
String moduleName = "EJB-Remote-Demo-ejb-1.0/";
String beanName = CalculatorBean.class.getSimpleName();
String viewClassName = RemoteCalculator.class.getName();
final String jndiname = appName + moduleName + beanName + "!" + viewClassName;
System.out.println("jndiname is : " + jndiname);
return (RemoteCalculator) context.lookup(jndiname);
}
diese Version wirft den Fehler "Fail zu einem Server verbinden":
Apr 21, 2017 9:42:10 AM org.xnio.Xnio <clinit>
INFO: XNIO version 3.4.0.Final
Apr 21, 2017 9:42:10 AM org.xnio.nio.NioXnio <clinit>
INFO: XNIO NIO Implementation Version 3.4.0.Final
Apr 21, 2017 9:42:11 AM org.jboss.remoting3.EndpointImpl <clinit>
INFO: JBoss Remoting version 4.0.21.Final
jndiname is : Remote/EJB-Remote-Demo-ejb-1.0/CalculatorBean!com.maggioni.Stateless2.RemoteCalculator
Exception in thread "main" javax.naming.CommunicationException: Failed to connect to any server. Servers tried: [http-remoting://<myEnvironmentNumber>.jelastic.dogado.eu:4447 (java.net.ConnectException: Connection refused: no further information)]
für beide Versionen die jboss-ejb-client.properties sucht wie:
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
remote.connections=default
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOPLAINTEXT=false
remote.connection.default.host=<myEnvironmentNumber>.jelastic.dogado.eu
remote.connection.default.port = 4447
remote.connection.default.username=app
remote.connection.default.password=app
EDIT:
Ich vermute, dass das Problem vielleicht mit der Benutzerkonfiguration auf WildFly. Leider kann ich kein Skript verwenden, um einen Benutzer einzurichten, also muss ich es direkt in die application-users.properties eingeben.
Angenommen, ich möchte einen Benutzernamen einrichten = MyUser und ein Passwort = MyUser sollte der Eintrag wie Benutzername = HEX (MD5 (MyUser ':' Realm ':' MyUser)) aussehen?
Standardmäßig verwendet WildFly 8080 als Remoting-Port. Werfen Sie einen Blick auf https://docs.jboss.org/author/display/WFLY10/EJB+invocations+aus+einem+fernen+Client+mit+JNDI –
Haben Sie die öffentliche IP-Adresse https://docs.jelastic.com/ aktiviert? öffentlich-ipv4? – Ruslan
@FedericoSierra ändern Port 8080 zeigt den folgenden Fehler: Ausnahme im Thread "Haupt" javax.naming.AuthenticationException: Konnte keine Verbindung zu einem Server herstellen. Server versucht: [http-remoting: // .jelastic.dogado.eu: 8080 (Authentifizierung fehlgeschlagen: Alle verfügbaren Authentifizierungsmechanismen fehlgeschlagen: JBOSS-LOCAL-USER: javax.security.sasl.SaslException: Fehler beim Lesen der Server-Herausforderung [ Verursacht durch java.io.FileNotFoundException: \ opt \ repo \ versionen \ 10.1 \ standalone \ tmp \ auth \ local7673066471051300535.challenge (Das System kann den angegebenen Pfad nicht finden)] –
ken