tomcat架构分析 (JNDI配置)
JNDI(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API。命名服务将名称和对象联系起来,使得我们可以用名称访问对象。目录服务是一种命名服务,在这种服务里,对象不但有名称,还有属性。
---百度百科
通俗点说,JNDI封装了一个简单name到实体对象的mapping,通过字符串可以方便的得到想要的对象资源。通常这种对象资源有很多种,例如数据库JDBC,JMS,EJB等。平时用的最多的就是数据库了。在tomcat中,这些资源都是以java:comp/env开头的字符串来绑定的。以数据库连接为例,我们在app中的调用场景是;
或者在每个app的Context.xml中配置
然后在app的WEB-INF/web.xml中配置
Tomcat这种资源不限于数据库连接,还有很多例如EJB,Web Service等,在配置中它们分别对应不同的节点。例如上面的数据库连接,在server.xml中对应<Resource>,在web.xml中对应的是<resource-ref>,EJB连接在server.xml中对应<Ejb>,在web.xml中对应的是<ejb-ref>等,因为有些资源在现在的开发中应用的不是很多,就不一一例举了,总结一下它们所有的对应关系;
第二种方案
没有上述方案那么麻烦,主要是为了需要引用一个自己独有的资源对象的app而言。
<tomcat>/conf/server.xml//获得对数据源的引用:Context ctx = new InitalContext();DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/mysql");//获得数据库连接对象:Connection conn = ds.getConnection();//返回数据库连接到连接池:conn.close();
比较一下,两种方式的配置,调用java:comp/env的name时还是不一样的。