In this post, I wrote about the need to use the prefix
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
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/envwhen 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:/defaultDSin 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/envin 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.