2013-05-13 16 views
5

Ho due istanze server di Jboss 5, ognuna delle quali è distribuita con due EAR. Dì Client.Ear e Server.Ear. Server Ear espone alcuni ejb. Voglio iniettarlo su ClientEar tramite annotazione. Usando la ricerca JNDI l'ho fatto bene e funziona. Ma usando l'annotazione ottengo sempre javax.naming.NamingException. Tuttavia, quando si iniettano i bean di sessione con gli artefatti di distribuzione, è necessario utilizzare il nome globale JNDI per l'iniezione e io l'ho usato anche come @EJB (mappedName = "java: global/Server/componente/ApplicationService! Com.test.server.ApplicationServiceInterface")Ricerca remota usando l'annotazione @ejb

Ma sembra che non fornisca il provider_url del server remoto per collegarlo all'istanza dell'orecchio del client. Come potrei configurare le proprietà jndi, ie provider_url, le proprietà di contesto iniziali con l'annotazione @ EJB?

risposta

1

@EJB l'annotazione può essere utilizzata solo se le applicazioni vengono distribuite nella stessa istanza di sever. L'annotazione @EJB non funzionerà se si sta tentando di effettuare una chiamata di istanza cross server o una chiamata al server remoto. Quindi, nel tuo caso, l'iniezione di annotazioni non funzionerà.

Quindi, quali sono le soluzioni?

Opzione 1) Usa vecchio stile JNDI programmatico sguardo

opzione 2) Creare bean gestito come per CDI (Context Dependency Injection) e configurare tutte le proprietà JNDI lì. E @inject il managed bean nel tuo client.

+0

Molti application server supportano l'uso dell'annotazione '@ EJB' di indirizzare i fagioli remoti, tra cui JBoss (come per ogni risposta di Rodrigo), e Glassfish. – DavidS

+0

Ma la risposta di Rodrigo non mostra dove definire l'indirizzo IP del server che sta distribuendo l'EJB remoto. – Farah

+0

@Farah: si definisce l'indirizzo IP del server tramite un file delle proprietà. In caso di Jboss, si inserisce un 'jboss-ejb-client.properties' nella cartella radice di origine. Per un esempio, consultare: https://github.com/akquinet/jbosscc-wildfly-examples/blob/master/ejb-remote-example/ejb-remote-example-ejb-client/src/main/resources/jboss- ejb-client.properties – gmazlami

5

ho trovato un post sul forum che risponde alla tua domanda: https://community.jboss.org/thread/228789

In esso si riferisce a https://docs.jboss.org/author/display/AS71/EJB+invocations+from+a+remote+server+instance

E per compiere la ricerca JNDI con l'annotaion @EJB usa

@EJB(lookup = "ejb:earname/modulename/BeanClass!fully.qualified.RemoteInterface") 
private RemoteInterface bean; 
+0

Si noti che l'host remoto, la porta e le informazioni utente devono essere definite tramite un file delle proprietà affinché funzioni. Inserisci un file 'jboss-ejb-client.properties' nella cartella di origine root.Un esempio per tale file è qui: https://github.com/akquinet/jbosscc-wildfly-examples/blob/master/ejb-remote-example/ejb-remote-example-ejb-client/src/main/resources /jboss-ejb-client.properties – gmazlami

1

Conosco questo po 'troppo tardi. Compreso questo per ogni ulteriore consultazione

È possibile utilizzare il portatile guardare in alto formato String EJB utilizzare RMI su IIOP e ha un'architettura standard mappatura EJB per CORBA Così si può cercare dal server host e portnumber da

@EJB(lookup = "corbaname:iiop:example.com:3701#java:global/mycrud/mycrud-dss-ejb/InformeBean!com.myorg.ejb.InformeRemote") 

riferimenti: https://docs.oracle.com/javase/8/docs/technotes/guides/idl/corba.html https://docs.oracle.com/javase/8/docs/technotes/guides/idl/INStutorial.html

+0

Suona perfettamente ma quando invoco il servizio remoto non ottengo risposta e nessun errore mai ... L'unico modo in cui ha funzionato era tramite la ricerca usando Abstract Factory. –

+0

Con l'esempio: 'Proprietà props = new Properties(); props.put (Context.INITIAL_CONTEXT_FACTORY, "com.sun.enterprise.naming.SerialInitContextFactory"); props.setProperty ("org.omg.CORBA.ORBInitialHost", "server.com"); props.setProperty ("org.omg.CORBA.ORBInitialPort", "3700"); try { InitialContext ctx = new InitialContext (oggetti di scena); return (RemoteService) ctx.lookup ("com.server.package.RemoteService"); } catch (NamingException e) { ...; } ' –