Recherche à distance à l'aide de @ejb annotation
J'ai 2 serveurs en cas de Jboss 5, chaque de ce qui est déployée avec deux OREILLES. Dire Client.L'oreille et le Serveur.De l'oreille.
Serveur Oreille exposer quelques-ejb. Je veux injecter ce à ClientEar via l'annotation. En utilisant JNDI de recherche, je l'ai fait bien et il fonctionne. Mais l'utilisation de l'annotation j'ai toujours javax.de nommage.NamingException.
Cependant lors de l'injection de beans de session à travers le déploiement des artefacts le nom JNDI global doit être utilisé pour l'injection et que j'ai utilisé aussi comme
@EJB(mappedName ="java:global/Serveur/component/ApplicationService!com.test.serveur.ApplicationServiceInterface")
Mais il me semble que je ne suis pas fournir la provider_url du serveur distant pour lié au client de l'oreille de l'instance.
Comment pourrais-je configurer jndi propriétés, c'est à dire provider_url, contexte initial properites avec l'annotation @ EJB?
OriginalL'auteur JavaGeek | 2013-05-13
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé un post sur le forum qui répond à votre question:
https://community.jboss.org/thread/228789
En elle, il se réfère à https://docs.jboss.org/author/display/AS71/EJB+appels+de+une+télécommande+serveur+exemple
Et d'accomplir la recherche jndi avec le @EJB annotaion il utilise
jboss-ejb-client.properties
de fichiers sous la racine de votre dossier source. Un exemple d'un tel fichier est ici: github.com/akquinet/jbosscc-wildfly-examples/blob/master/...OriginalL'auteur rodrigo.botti
@EJB
annotation peut être utilisée seulement si les applications sont déployées dans le même sever instance.@EJB
annotation ne fonctionnera pas si vous essayez de faire croix instance de serveur d'appel ou d'un serveur distant appel. Donc, dans votre cas, l'annotation d'injection ne fonctionne pas.Alors, quelles sont les solutions ?
Option 1) Utiliser de vieux style programmatique JNDI rechercher
Option 2) Créer bean géré par
CDI (Context Dependency Injection)
et de configurer toutes les JNDI propriétés là-bas. Et@inject
lamanaged bean
dans votre client.@EJB
annotation à la cible à distance les haricots, y compris JBoss (comme par rodrigo de réponse), et Glassfish.Mais Rodrigo réponse ne montrent pas où pour définir l'adresse IP du serveur qui est le déploiement de la télécommande EJB.
Vous définissez l'adresse IP du serveur via un fichier de propriétés. Dans le cas de Jboss, vous placez un
jboss-ejb-client.properties
dans votre source de dossier racine. Pour un exemple, voir: github.com/akquinet/jbosscc-wildfly-examples/blob/master/...OriginalL'auteur Ravi Trivedi
Je sais que cela peu, trop tard . Y compris cette pour de plus amples référence
Vous pouvez utiliser le portable rechercher format de Chaîne de caractères
Les ejb utiliser RMI sur IIOP et a mapping standard EJB architecture CORBA
De sorte que vous pouvez rechercher par d'hôte du serveur et le numéro de port par
Références:
https://docs.oracle.com/javase/8/docs/technotes/guides/idl/corba.html
https://docs.oracle.com/javase/8/docs/technotes/guides/idl/INStutorial.html
Avec l'exemple:
Properties 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(props); return (RemoteService) ctx.lookup("com.server.package.RemoteService"); } catch (NamingException e) { ...; }
OriginalL'auteur Sudhakar