2017-04-21 6 views
0

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?

+1

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 –

+0

Haben Sie die öffentliche IP-Adresse https://docs.jelastic.com/ aktiviert? öffentlich-ipv4? – Ruslan

+0

@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

Antwort

0

ok, dank @Federico Sierra Kommentare ich das Problem

die erste Ausgabe mit dem Remote-Port war lösen konnte, 8080 brauchte, war anstelle von 4447

der zweiten Ausgabe verwendet werden, um mit der Anwendung Benutzer nicht richtig auf der Serverseite eingerichtet.

Mein Server ist remote und ich konnte das Skript add-user.sh nicht ausführen. Daher habe ich den Benutzer direkt in der Datei application-user.properties hinzugefügt. Das Format muss lauten: username = HEX (MD5 (Benutzername ':' ApplicationRealm ':' Passwort))

Verwandte Themen