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
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)? java:comp/env
? Vielen Dank.
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.
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.
Aufgrund der obigen Links haben Sie nicht viele Kontexte.
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).
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:
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).
- 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)?
Sie erhalten den von Ihnen angeforderten, den, den Sie korrekt als "die aktuelle Java EE-Komponente (eine Webanwendung oder EJB)" beschrieben haben.
- Gibt es bestimmte Regeln für die Suche in verschiedenen Bereichen?
Sie suchen innerhalb des von Ihnen angegebenen Bereichs. Ich weiß nicht, was deine Frage sonst noch bedeuten könnte.
- 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?
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
.
Tags und Links java