java:comp/env
when looking up ejb/resource in the current naming environment. Equally important is to know where/when not to use it.1. Don't use
java:comp/env
in standard deployment descriptors, such as web.xml, ejb-jar.xml, and application-client.xml. I can't think of any elements in these descriptors that contain java:comp/env
.2. Don't use
java:comp/env
in appserver-specific deployment plan files.3. Don't use
java:comp/env
in any fields of resource and/or ejb injection, whether it's field or method injection.4. Don't use
java:comp/env
when looking up resource/ejb using javax.ejb.EJBContext.lookup(String name)
. This is a new method in javax.ejb.EJBContext
in EJB 3. The lookup name in this case is always relative to java:comp/env
. For more details, please see 5 Ways to Get Resources in EJB 3.5. Don't use
java:comp/env
when looking up certain standard J2EE and JavaEE resources. They reside directly under java:comp/, with no /env. For instance:- java:comp/UserTransaction
- java:comp/EJBContext
- java:comp/ORB
- java:comp/TransactionSynchronizationRegistry
java:comp/env
when looking up global resources in a server-dependent way. Some application servers let you look up resources by their global JNDI name. In such case, their lookup name should not contain java:comp/env
. For example, java:/defaultDS
in jboss. In JavaEE SDK 5/Glassfish/Sun Java System Application Server 9, I can also directly look up jdbc/__default
(the default datasource) without configuring it in any descriptors. Note that this style of lookup is not portable. It ties your apps to specifc runtime server environment, and should really be avoided.7. Don't use
java:comp/env
in the name of any physical resources inside an application server, like jdbc-resource, jdbc-pool, JMS queue or topic, EJB JNDI name, persistence manager, etc.Tags: