Was sind die Regeln für Java: comp / env?

8

Ich verstehe, dass java:comp/env der Knoten in der JNDI-Struktur ist, wo Sie Eigenschaften für die aktuelle Java EE-Komponente (eine Webapp oder EJB) finden können, und ich weiß auch, dass jede EJB auch eine eigene Komponentenumgebung hat Es gibt java:global und java:app und ein java:module abhängig davon, dass ich einige Fragen habe

  1. Wenn ich Context envContext = (Context)initContext.lookup("java:comp/env"); verwende, um initContext zu erhalten, welchen Kontext bekomme ich genau (global, app, modul, webApp oder EJB Context)?
  2. Gibt es bestimmte Regeln für die Suche nach verschiedenen Bereichen?
  3. Angenommen, ich habe eine Webanwendung mit vielen EJBs, bedeutet dies, dass ich viele anfängliche Kontexte (eine für webApp und eine für jedes EJB) habe oder alle diese Ressourcen in einem Kontext gesammelt werden java:comp/env ?

Vielen Dank.

    
Melad Ezzat 13.05.2015, 08:53
quelle

4 Antworten

1
  1. wenn ich Kontext verwende envContext = (Kontext) initContext.lookup ("java: comp / env"); bekomme ich initContext welchen Kontext bekomme ich genau (global, app, modul, webApp oder EJB Context)?

Zitieren aus der TomEE-Dokumentation Ссылка

  

In einer Webanwendung wird der Namensraum java: comp / env von allen Servlets gemeinsam genutzt.   Dies entspricht im Wesentlichen dem Java-Modul-Namespace in Java EE   6. Verstehen Sie, dass hier ein Konflikt in der Definition besteht und dass für Java-EJBs java: comp auf die Komponente (die EJB selbst) und nicht auf die Komponente beschränkt ist   Modul wie bei Webapps.

  1. Gibt es bestimmte Regeln für die Suche in verschiedenen Bereichen?

Zitat aus JavaEE 6-Lernprogramm Ссылка

  

Der java: global JNDI-Namespace ist die portable Methode, um remote zu finden   Enterprise-Beans, die JNDI-Lookups verwenden. Der Java-Modul-Namespace wird verwendet   lokale Enterprise-Beans innerhalb desselben Moduls nachschlagen. Das   Der Java-App-Namespace wird verwendet, um nach lokalen Enterprise-Beans zu suchen   innerhalb der gleichen Anwendung. Das heißt, die Enterprise-Bean ist gepackt   innerhalb einer EAR-Datei, die mehrere Java EE-Module enthält.

  1. Nehmen wir an, ich habe eine Webanwendung mit vielen EJBs, bedeutet dies, dass ich viele anfängliche Kontexte habe (eine für webApp und eine für jedes EJB) oder alle diese Ressourcen werden irgendwie in einem Kontext gesammelt: java: comp / env?
  

Aufgrund der obigen Links haben Sie nicht viele Kontexte.

    
CuriousMind 13.05.2015, 09:21
quelle
1

Zu Frage 3 zum Umfang von java:comp/env in Anwesenheit von EJBs.

Traditionell (vor JEE 6) java:comp/env war Modulebene für war -Module und EJB-Ebene für EJBs in jar -Module. In diesem Modell muss man für jeden einzelnen EJB Umgebungseinträge definieren (über resource-ref und env-entry in ejb-jar.xml oder für Ressourcenreferenzen, da JEE5 @Resource auf Klassenebene verwenden kann).

%Vor%

Seit JEE 6 kann man EJBs als Teil von war -Modul bereitstellen. Ob das Modul war direkt bereitgestellt wird oder ein Teil oder ear -Modul ist, es hat einen einzelnen java:comp/env -Namespace, der zwischen allen Servlets, EJBs und jedem anderen Code innerhalb dieses Moduls geteilt wird. Man kann Umgebungseinträge in web.xml definieren:

%Vor%

In diesem war basierten Modell könnte man noch ejb-jar.xml haben, um andere Aspekte von EJBs zu konfigurieren, aber env-entry für eine gegebene Bean in ejb-jar.xml würde den Umgebungswert für alle anderen Beans in der war .

Also würde ich immer war archives für alles verwenden (möglicherweise in ear verpackt).

    
Ivan 17.01.2017 14:56
quelle
0
  
  1. Wenn ich Kontext verwende envContext = (Kontext) initContext.lookup ("java: comp / env"); bekomme ich initContext welchen Kontext bekomme ich genau (global, app, modul, webApp oder EJB Context)?
  2.   

Sie erhalten den von Ihnen angeforderten, den, den Sie korrekt als "die aktuelle Java EE-Komponente (eine Webanwendung oder EJB)" beschrieben haben.

  
  1. Gibt es bestimmte Regeln für die Suche in verschiedenen Bereichen?
  2.   

Sie suchen innerhalb des von Ihnen angegebenen Bereichs. Ich weiß nicht, was deine Frage sonst noch bedeuten könnte.

  
  1. Nehmen wir an, ich habe eine Webanwendung mit vielen EJBs, bedeutet dies, dass ich viele anfängliche Kontexte habe (eine für webApp und eine für jedes EJB) oder alle diese Ressourcen werden irgendwie in einem Kontext gesammelt: java: comp / env?
  2.   

Die Frage ergibt keinen Sinn. Sie haben so viele InitialContexts , wie Sie erstellen. Sie sind Objekte. Worauf sie sich beziehen hängt davon ab, was Sie in that InitialContext suchen. Wenn Sie weiterhin nach "the current Java EE component (a webapp, or an EJB)" suchen, werden Sie genau das bekommen. Alle diese Ressourcen werden unter ihrem eigenen Namen, innerhalb von java:comp/env .

, gesammelt     
EJP 13.05.2015 09:21
quelle
0

Soweit ich weiß, ist der Bereich Global

    
Jagadish Sharma U 13.05.2015 09:57
quelle

Tags und Links