看了j2ee的视频,视频里的老师讲的很深奥呀。如果真把老师讲的学会了,那肯定又能提高一大截。
JNDI(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API。命名服务将名称和对象联系起来,使得我们可以用名称访问对象。目录服务是一种命名服务,在这种服务里,对象不但有名称,还有属性。(360百科)
从上面的定义中可以看出JNDI提供了两种API。
命名服务是将名称和对象联系起来。例如我们的手机的通讯录一样,手机通讯录里是姓名对应手机号,可以通过姓名找到手机号。
目录服务是命名服务的自然扩展。它将有关现实世界中的事物(如人、计算机、打印机等等)描述为具有属性的对象,例如人这个对象,有性别、年龄。
优点
JNDI包含了大量的命名和目录服务,直接使用不同种类的服务,这样程序就不用与各种服务产生耦合。
这就类似:我的手机的通讯录里存有提高班所有人的手机号,如果我想给某个人,直接找到他名字就能拨打,而不用再记住手机号码再输入手机号码拨打。这样我不用记手机号码,我和手机号码的耦合度就降低了。
使用
配置Tomcat的Server.xml
type="javax.sql.DataSource"
password="karid"
driverClassName="oracle.jdbc.driver.OracleDriver"
maxIdle="2"
maxWait="5000"
username="karid"
url="jdbc:oracle:thin:@127.0.0.1:1521:karid" maxActive="4"
/>
removeAbandoned
true
removeAbandonedTimeout
60
logAbandoned
false
factory
org.apache.commons.dbcp.BasicDataSourceFactory
配置web.xml
MySQL Test App
DB Connection
jdbc/test
javax.sql.DataSource
Container
使用JNDI定义和引用public class DataSourceFactory
{
private static DataSource ds;
public static DataSource createDataSourde()
{
if (ds == null)
{
try
{
Context initContext = new InitialContext();
if (initContext == null)
System.out.println("无配置环境");
Context envContext = (Context) initContext.lookup("java:/compenv");
ds = (DataSource) envContext.lookup("jdbc/test"); //根据名称取得数据源
}
catch (NamingException e)
{
e.printStackTrace();
}
}
return ds;
}
}
总结
JNDI包含了大量的命名和目录服务,直接使用不同种类的服务,不用关心服务的提供者是什么。就像配置数据源一样,不用去关心它用的是什么数据库,只管去去引用JNDI即可。