90

what is meant by java:comp/env ?

What does the look up like :

Context envContext = (Context)initContext.lookup("java:comp/env");

do ?

I understand that a look-up like :

(DataSource)envContext.lookup("jdbc/MyDatasource")

looks up for the name MyDatasource in the context.xml or web.xml to get the URL of the database. Is it so ? !! But what does the former look up do ?

saplingPro
  • 20,769
  • 53
  • 137
  • 195

3 Answers3

75

java:comp/env is the node in the JNDI tree where you can find properties for the current Java EE component (a webapp, or an EJB).

Context envContext = (Context)initContext.lookup("java:comp/env");

allows defining a variable pointing directly to this node. It allows doing

SomeBean s = (SomeBean) envContext.lookup("ejb/someBean");
DataSource ds = (DataSource) envContext.lookup("jdbc/dataSource");

rather than

SomeBean s = (SomeBean) initContext.lookup("java:comp/env/ejb/someBean");
DataSource ds = (DataSource) initContext.lookup("java:comp/env/jdbc/dataSource");

Relative paths instead of absolute paths. That's what it's used for.

Arjan Tijms
  • 37,782
  • 12
  • 108
  • 140
JB Nizet
  • 678,734
  • 91
  • 1,224
  • 1,255
  • What is _this_ node meant for ? There would be many nodes in the JNDI tree. – saplingPro Jul 24 '12 at 13:53
  • 12
    I still don't get the feel of what actually is `java:comp/env`. – saplingPro Jul 24 '12 at 13:54
  • 10
    Each JEE component (webapp, EJB) can define properties that are local to this component. And these properties are accessible through `java:comp/env`. See http://tomcat.apache.org/tomcat-7.0-doc/jndi-resources-howto.html#web.xml_configuration for example. EJBs have the same sort of thing. – JB Nizet Jul 24 '12 at 15:02
10

It's an in-memory global hashtable where you can store global variables by name.

The "java:" url scheme causes JNDI to look for a javaURLContextFactory class, which is usually provided by your app container, e.g. here is Tomcat's implementation javadoc

See also NamingManager.getURLContext

ACV
  • 9,964
  • 5
  • 76
  • 81
Rich
  • 15,048
  • 2
  • 66
  • 119
8

I know I'm far late, but I was asking the same question, and I think I came some answer. So, if I may put my two cents.

java:comp/env/jdbc/myDataSource

  • java: is just like jdbc: from connection string. Acts as a protocol.
  • comp is the root for all JNDI contexts.
  • env is the subcontext for all resource related. There is another for user. Check this out.
  • jdbc is the subcontext for jdbc resources. There are types. Check the link from the previous bullet.
  • myDataSource is the name of your jdbc resource.
joker
  • 3,416
  • 2
  • 34
  • 37
  • this should be the accepted answer - clear explanation. – likejudo Jun 02 '21 at 16:45
  • @joker: The link you shared from Sun Java System Application Server is a very useful source to understand the jargon in JNDI. I can hardly find it in tomcat docs while setting it as it never explained much there. I found the Admin Guide as well in the Sun link, it clears the whole picture. Thanks. – sylye Sep 28 '21 at 08:05
  • 1
    `comp` is short for "composite", as in `javax.naming.CompositeName`. – gjvc Nov 27 '22 at 20:51