JNDI(Java Naming and Directory Interface)是一个应用程序设计的API,为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口。使用时在J2EE容器中配置JNDI参数,定义一个数据源,也就是JDBC引用参数,给这个数据源设置一个名称。然后在程序中,通过数据源名称引用数据源从而访问后台数据库。
本文着重介绍使用JNDI连接DM数据库时,应用以及中间件(TONGWEB\TOMCAT)如何配置。
一、使用TOMCAT
1.应用配置,应用框架为springmvc
- web.xml,添加以下代码:
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/dm</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
- META_INF下增加context.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource name="jdbc/dm" auth="Container"
type="javax.sql.DataSource"
driverClassName="dm.jdbc.driver.DmDriver"
url="jdbc:dm://127.0.0.1:5236/dameng"
username="GFW_EASYUI"
password="GFW_EASYUI"
maxActive="50"
maxIdle="30"
maxWait="10000" />
</Context>
- 配置文件增加数据源:
<bean id="dataSource2" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/jdbc/dm</value>
</property>
</bean>
2.测试代码:
public void testTongwebArray() {
// TODO Auto-generated method stub
Connection conn=null;
try {
Context ctx = new InitialContext();
Object datasourceRef = ctx.lookup("java:comp/env/jdbc/dm");
//引用数据源
DataSource ds = (DataSource) datasourceRef;
conn = ds.getConnection();
Statement stat = conn.createStatement();
ResultSet rs = stat.executeQuery("SELECT A.* FROM FW_B_USER A LEFT JOIN FW_B_USER_ROLE B ON A.USER_ID = B.USER_ID");
while(rs.next()) {
String user_id = rs.getString("user_id");
System.out.println(user_id);
}
} catch(Exception e) {
e.printStackTrace();
} finally {
if(conn!=null) {
try {
conn.close();
} catch(SQLException e) {
e.printStackTrace();
}
}
}
}
启动tomcat,访问应用,正常输出。
二、使用TONGWEB
1.介绍一下如何使用tongweb配置数据源
tongweb7.0部署成功后,访问控制台地址,登陆。
选择JDBC配置,创建连接池,添加相应设置。
提交成功后,tongweb会自动生成一个名称为dm的jndi连接。
2.应用配置,应用框架为springmvc
- web.xml,添加以下代码:
<resource-ref>
<description>DB Connection</description>
<res-ref-name>dm</res-ref-name> <!-- 名称为tongweb中设置的jndi名称-->
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
3.测试代码:
public void testTongwebArray() {
// TODO Auto-generated method stub
Connection conn=null;
try {
Context ctx = new InitialContext();
Object datasourceRef = ctx.lookup("java:comp/env/dm"); //名称为tongweb中设置的jndi名称
//引用数据源
DataSource ds = (DataSource) datasourceRef;
conn = ds.getConnection();
Statement stat = conn.createStatement();
ResultSet rs = stat.executeQuery("SELECT A.* FROM FW_B_USER A LEFT JOIN FW_B_USER_ROLE B ON A.USER_ID = B.USER_ID");
while(rs.next()) {
String user_id = rs.getString("user_id");
System.out.println(user_id);
}
} catch(Exception e) {
e.printStackTrace();
} finally {
if(conn!=null) {
try {
conn.close();
} catch(SQLException e) {
e.printStackTrace();
}
}
}
}
启动tongweb,访问应用,正常输出。