2016-03-15 1 views
0

La méthode est de charger un haricotEjb Association JNDI dans le code java

Context ctx = new InitialContext(); 
Object lookupResult = ctx.lookup("abilitecConsumerClient/local"); 

Et une autre classe

@Stateless 
@LocalBinding(jndiBinding="abilitecConsumerClient/local") 
@Local() 

Que signifie exactement représenter abilitecConsumerClient/local? Est-ce le chemin de mon ordinateur local que j'ai besoin de rechercher ce fichier de propriétés ou le fichier dont j'ai besoin pour ce nom de liaison EJB JNDI?

Si vous pouvez également indiquer comment spécifier un nom de liaison EJB JNDI personnalisé dans JBoss EAP 6?

Cette application va fonctionner sur EAP 6. JBOSS

Répondre

0

Selon le ancienJBoss documentation:

... lorsque l'application est déployée dans un .jar, les haricots de session se liera à JNDI sous la forme (...) ejbName/local dans le cas d'interfaces locales. Lorsque les EJB sont déployés dans un fichier .ear, la liaison JNDI par défaut sera précédée du nom du fichier .ear.

Donc, si nous avons un fichier EAR dont le nom est foo.ear le nom par défaut JNDI serait foo/EJB-NOM/local.

Ce comportement peut être outrepassé en définissant notre propre annotation @LocalBinding sur notre bean.

Par definition, l'annotation @LocalBinding spécifie la JNDI locale de liaison pour un EJB d'interface locale.

Ce qui signifie que la valeur de l'élément jndiBinding, transmis @LocalBinding, représente le nom associé (binded) pour le haricot, où l'annotation a été placée, sur le Java Naming and Directory Interface (JNDI).

Cela nous permet ensuite de récupérer une instance de la fève, comme vous l'avez mentionné, en regardant vers le haut sur le JNDI, en utilisant le jndiBinding défini sur l'annotation @LocalBinding:

MyBean bean = ctx.lookup("abilitecConsumerClient/local"); 

MAINTENANT, au sujet de votre dernière question, notez qu'au début de ma réponse j'ai dit ... vieux documentation JBoss .... Pourquoi? Parce que depuis JBoss EAP 6 (or JBoss AS 7), la liaison des EJB aux noms JNDI personnalisés n'est plus autorisée par annotations ou XML configuration.

On peut supposer que c'était dû aux efforts de Java EE 6 pour standardiser les espaces de noms EJB.

Vous pouvez regarder de plus près le JNDI changes présent sur JBoss EAP 6, où EJB 3.1 a introduit un espace de noms JNDI global normalisé et une série d'espaces de noms associés qui correspondent aux différentes portées d'une application Java EE.

Faire un parallèle entre EAP avant 6 et après, nous avons:

Avant EAP 6

// Bean definition 
@Stateless 
@LocalBinding(jndiBinding="custom/MyBean") 
public class MyBeanImpl implements MyBean { 
    (...) 
} 

// look-up 
ctx = new InitialContext(); 
MyBean myBean = (MyBean) ctx.lookup("custom/MyBean"); 

Après EAP 6

// Bean definition 
@Stateless 
@Local(MyBean.class) 
public class MyBeanImpl implements MyBean { 
    (...) 
} 

// look-up 
MyBean myBean = (MyBean) 
    InitialContext.lookup("java:module/MyBean"); 

// or through injection 
@EJB 
MyBean myBean; 

Enfin, vous peut trouver plus d'exemples sur la façon de faire la recherche EJB sur le JBoss AS 7 examples et jeter un regard attentif à l'adresse suivante:

+0

Merci! @aribeiro, c'est une information très utile pour moi. – docaUS

+0

un autre Q de moi. J'ai également ci-dessous la structure ci-dessous, mais je ne suis pas sûr de ce que représente ce chemin CWrapper/env/CClient/webservice? Contexte initialContext = new InitialContext(); \t \t \t Service service = (Service) initialContext.lookup ("CWrapper/env/CClient/webservice"); Voudriez-vous s'il vous plaît dites-moi vos pensées/info? ty @aribeiro – docaUS

+0

@docaUS, il est similaire à la question que vous avez faite précédemment: ce "path" est le nom de la ressource JNDI associée au bean * Service *. Mais encore une fois, depuis JBoss EAP 6, la liaison des EJB aux noms JNDI personnalisés n'est plus autorisée. Comment la classe * Service * est-elle définie? – aribeiro