2012-10-15 8 views
8

Ho ottenuto @Remote EJB su JBoss AS 7, disponibile per nome java:global/RandomEjb/DefaultRemoteRandom!pl.lechglowiak.ejbTest.RemoteRandom.Spring <jee: remote-slsb> e JBoss AS7 - Nessun ricevitore EJB disponibile per la gestione

Il client standalone è un'applicazione Spring che utilizza il bean <jee:remote-slsb>. Quando provo ad usare quel bean ottengo java.lang.IllegalStateException: EJBCLIENT000025: No EJB receiver available for handling [appName:, moduleName:RandomEjb, distinctName:] combination for invocation context [email protected].

Ecco parte rilevante del applicationContext.xml:

<jee:remote-slsb id="remoteRandom" 
    jndi-name="RandomEjb/DefaultRemoteRandom!pl.lechglowiak.ejbTest.RemoteRandom" 
    business-interface="pl.lechglowiak.ejbTest.RemoteRandom" 
    <jee:environment> 
     java.naming.factory.initial=org.jboss.naming.remote.client.InitialContextFactory 
     java.naming.provider.url=remote://localhost:4447 
     jboss.naming.client.ejb.context=true 
     java.naming.security.principal=testuser 
     java.naming.security.credentials=testpassword 
    </jee:environment> 
</jee:remote-slsb> 

<bean id="remoteClient" class="pl.lechglowiak.RemoteClient"> 
    <property name="remote" ref="remoteRandom" /> 
</bean> 

RemoteClient.java public class RemoteClient {

private RemoteRandom random; 

public void setRemote(RemoteRandom random){ 
    this.random = random; 
} 

public Integer callRandom(){ 
    try { 
     return random.getRandom(100); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return null; 
    } 
} 

}

mio JBoss vaso cliente: org.jboss .as jboss-as-ejb-client-bom 7.1.2.Finale pom

pl.lechglowiak.ejbTest.RemoteRandom è disponibile per il classpath dell'applicazione client. jndi.properties contiene proprietà esatte come in <jee:environment> di <jee:remote-slsb>.

Tale codice viene eseguito senza eccezione:

Context ctx2 = new InitialContext(); 
RemoteRandom rr = (RemoteRandom) ctx2.lookup("RandomEjb/DefaultRemoteRandom!pl.lechglowiak.ejbTest.RemoteRandom"); 
System.out.println(rr.getRandom(10000)); 

Ma questo:

ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); 
RemoteClient client = ctx.getBean("remoteClient", RemoteClient.class); 
System.out.println(client.callRandom()); 

termina con eccezione: java.lang.IllegalStateException: EJBCLIENT000025: No Ricevitore EJB disponibili per la gestione [appName :, moduleName : RandomEjb, distinctName:] combinazione per il contesto di chiamata [email protected]

jboss.naming.client.ejb.context=true impostato. Hai idea di cosa sto impostando errato in <jee:remote-slsb>?

+0

Questo è un miglioramento https://jira.primekey.se/browse/ECA-3607 – eluish192

risposta

1

Ho appena risolto un problema molto simile. Hai creato un file "jboss-ejb-client.propties"?

In caso contrario, dai un'occhiata a queste: https://docs.jboss.org/author/display/AS71/EJB+invocations+from+a+remote+client+using+JNDI (in particolare la "Configurazione di EJB proprietà di contesto client" sub-topic)

https://community.jboss.org/message/740827

https://community.jboss.org/thread/197989

È necessario posizionare il file nel percorso di classe del tuo cliente. Ecco un semplice esempio di come potrebbe essere:

remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false 

remote.connections=default 

remote.connection.default.host=localhost 
remote.connection.default.port=4447 
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false 

remote.connection.default.username=login 
remote.connection.default.password=password 

Buona fortuna!

PS: I soli valori specifici del progetto in questa configurazione sarebbero "nome utente" e "password".

PS2: E nel caso in cui non hai aggiunto un utente al tuo jboss set-up, è fatto attraverso lo script "bin/add-user. [Bat/sh]", che si trova nella tua cartella jboss.

0

impostare expose-access-context="true" su jee: tagli-slsb remoto.

0

utilizzando java.naming.factory.url.pkgs = org.jboss.ejb.client.naming anziché java.naming.factory.initial = org.jboss.naming.remote.client.InitialContextFactory