2016-10-12 1 views
0

recommandée pour appeler une méthode d'interface locale EJB est d'effectuer une recherche:Mise en cache JNDI Recherche

<code> 
Context ic = new IntialContext(); 
ic.lookup(objectJndiName); 
</code> 

Cependant, je parcourir l'arborescence complète JNDI au début de l'application et à la fin, je suis en mesure de créer une carte de tous les objets avec:

<code> 
    Map <String,Object> 
</code> 

avec la clé ObjectName et l'objet de l'implémentation d'interface requise. Je recherche l'objet avec la clé et invoque la méthode requise sur l'interface comme ceci:

method.invoke(bean, args); 

Cette méthode est-elle correcte? ou dois-je effectuer une recherche pour le ejb requis à chaque fois?

+0

Votre chemin n'attrape pas les modifications qui surviennent après le chargement de votre carte. Il n'y a aucun point à cela. Il n'y a rien de coûteux à optimiser ici. – EJP

+0

Je n'ai pas besoin de suivre les modifications dans l'objet impl car les implémentations sont des beans de session sans état avec des méthodes sans aucun état. –

+0

Je n'ai rien dit à propos des modifications apportées aux objets impl. J'ai juste dit des changements. Ne sautez pas aux conclusions. Il pourrait y avoir des changements dans ce qui est lié. Il n'y a toujours aucun intérêt à cela. Alors ne le fais pas. – EJP

Répondre

1

Les recherches JNDI ne sont pas la méthode recommandée pour instancier des références d'interfaces locales de beans sans état, à partir de EE5 et au-dessus. Il suffit d'injecter le bean avec l'annotation @EJB ou le @Inject de CDI fera l'affaire bien.

+0

C'est un problème de code hérité. L'utilisation d'annotations n'est pas une option dans le scénario actuel. Le code existant utilise des conventions de dénomination codées en dur pour résoudre les classes impl. C'est la première étape. l'étape suivante active naturellement les annotations EJB et Inject. Voyez-vous des problèmes avec la sécurité des threads? –

+0

Désolé mais vous avez mentionné l'interface locale. Je pense que dans l'EJB 2.x, il y avait des interfaces Home et Remote qui n'étaient pas locales. Je ne les ai pas utilisés depuis longtemps et je ne peux que rappeler l'utilisation du modèle EE «Service Locator» dans lequel les références JNDI obtenues ont été mises en cache dans une classe singleton. – garfield

+1

Les interfaces locales ont été introduites dans la spécification EJB 2.1 –