什么是JNDI
全称:Java命名与目录接口(Java Naming and Directory lnterface),是一个有关应用程序设计的API,为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口。
他可以通过名称将资源和服务进行关联。
他的作用和优点:
1.在应用与java对象或资源之间建立送耦合的逻辑关系,简化应用对于资源的置和维护工作。
2.可以在更大范围、不同应用之间共享资源。
使用JNDI可以访问的目录及服务有很多,如DNS、文件服务、数据库等。下面我们可以用示例来学习使用JNDI API访问tomcat中的JNDI资源。
例:在Tomcat中发布一条信息供所有的Web应用程序使用。
Tmocat目录\conf\context.xml文件为全局的上下文配置文件,对所有的 Web应用有效。所以将要发布的信息配置在此文件中,再通过JNDI来查找信息。
首先在context.xml文件中的<Context>
元素中添加<Environment />
元素
<Environment type="java.lang.String" value="hello JNDI" name="tjndi"/>
其中<Environment />
这个元素代表的就是资源信息,其中三个属性如下:
name:环境条目的名称,相当于java:comp/env的名称。JNDI就是通过次属性来查找这个资源。
type:环境条目的java类名的全称。
value:通过 JNDI context请求时,返回给应用的参数值,该值必须转换成type属性定义的java类型。就比如value值是String类型那么接收时就需要转换成String类型。
配置完之后怎么在应用中获取使用:
<%
Context ctx=new InitialContext();
String testjndi=(String)ctx.lookup("java:comp/env/tjndi");
out.print("JNDI:"+testjndi);
%>
Javax.naming包下的Context接口表示命名上下文,它是由一组名称到对象的绑定组成。InitiaContext是Context接口的实现类。其中Object lookup(String name)方法根据名称检索指定对象。其中的参数为了避免命名空间的资源的名称互相冲突,其前缀是固定要加上"java:comp/env"的,然后加上对应资源名称。
通过此示例就可以总结使用JNDI的步骤了:
1.配置资源
2.通过Context的lookup()方法查找资源。
在上面就说过还可以通过JNDI访问数据库,下面就了解怎么实现。
数据库连接池
为什么使用数据库连接池
前面我们学习过JDBC来连接数据库,它在执行过程中,需要频繁的连接和释放连接,这必然就会耗费很多系统资源,而连接池就可以弥补这方面的不足。
什么是连接池
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个。
连接池是怎样管理连接的:
对于连接的管理可使用空闲池,即把已经创建但尚未分配出去的连接存放在一个空闲池中,每当用户请求一个连接时,系统首先检查空闲池也没有空闲连接,如果有就分配一个连接用户,如果没有则检查当前连接池是否达到连接池所允许的最大连接数。如果没有达到,就创建一个新的连接。如果已经达到,就等待一定的时间,如果在等待时间内有连接释放出来,就可以把这个连接分配给等待的用户,如果等待时间超过预定时间,则返回空值(null)。系统对已经分配出去正在使用的连接只做计数,当使用完被释放再返还给空闲池。
数据源与连接池
数据库是什么:数据库是JDBC2.0中引入的一个概念。再JDBC扩展包中定义了javax.sqp.DataSource接口。它有一组特性用于确定和描述它所代表的现实存在的数据源,配置好的数据库连接池就是以DataSource的形式存在。
在这里DataSource就可以看作是一个数据源。