1. 本帖应用场景
JNDI应用场景之一就是用于引用数据库,通过JNDI的配置使应用得以应用DataSource。
JNDI的配置大概有三种形式,即全局和局部,本文只涉及全局配置,此为最常应用的场景。
2. JNDI的server.xml的配置
2.1 <GlobalNamingResources/>中的配置
在<GlobalNamingResources/>中增加<Resource/>节点,内容如下所示:
<Resource name="jdbc/oracle"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="scott"
password="tiger"
initialSize="3"
defaultAutoCommit="true"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@localhost:1521:orcl"/>
配置讲解:
1.name:当前全局变量的名称,在局部变量(单个工程配置)中需要引用
2.auth : 默认是容器,即Container
2.auth : 默认是容器,即Container
其他参数请参考BasicDataSource 的配置,此处不赘述
2.2 在<host/>节点中增加相关的<Context/>节点
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
<!-- 本工程的名称是 COMMON,增加<Context/>节点可以为工程引用 -->
<Context crossContext="false" docBase="COMMON" path="/COMMON" privileged="false" reloadable="false" useHttpOnly="true">
<WatchedResource>
WEB-INF/web.xml
</WatchedResource>
<Manager pathname=""/>
<!-- name 用于外部引用,外部通过该name可以找到该资源 -->
<ResourceLink name="oracleDataSource" global="jdbc/oracle" type="javax.sql.DataSource"/>
</Context>
<!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
-->
<!-- Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b" prefix="localhost_access_log." suffix=".txt"/>
</Host>
3. 上层引用
try {
Context ctx = new InitialContext();
//oracleDataSource为server.xml中的<context/>节点中指定的name
DataSource ds = (DataSource)ctx.lookup("java:comp/env/oracleDataSource");
Connection conn = ds.getConnection();
if(null != conn) {
System.out.println("datasource's connection is not null");
}
}catch(Exception e) {
System.out.println(e.toString());
}
4. 结果展示
5. BasicDataSource 使用说明
BasicDataSource 具体使用可以参考相关文档,此处仅以几个常用的配置进行说明
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName("oracle.jdbc.driver.OracleDriver");//driver内容
ds.setUsername("scott");//数据库用户名称
ds.setPassword("tiger");//密码
ds.setUrl("jdbc:oracle:thin:@localhost:1521:orcl");//数据库url
ds.setDefaultAutoCommit(true);
ds.setInitialSize(3);
ds.setMaxActive(5);
ds.setMaxIdle(3000);
try {
Connection conn = ds.getConnection();
System.out.println("start to get connection");
if(null == conn) {
System.out.println("conn is null");
}else {
System.out.println("connection is not null");//不为空
}
}catch(Exception e) {
System.out.println(e.toString());
}