tomcat7 JNDI 配置

详细请参考官方文档

tomcat7的jndi配置有多种方式,相对对来说也比较简单。下面介绍我在一次工作中使用的方式。

tomcat version: apache-tomcat-7.0.61

1. 添加数据库驱动: ojdbc6.jar

2. 找到tomcat原始配置文件:%tomcat_home%/conf/context.xml,打开

<?xml version='1.0' encoding='utf-8'?>
<Context>

    <!-- 
        省略其他配置信息
    -->
    
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    
</Context>

3. zaicontext.xml文件的Context中添加Resource节点(JNDI的数据源节点),配置后的文件如下:

<?xml version='1.0' encoding='utf-8'?>
<Context>

    <!-- 
        省略其他配置信息
    -->
    
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    
    <Resource 
       name="java:/SCPRD_WMWHSE1" 
       auth="Container" 
       type="javax.sql.DataSource"
       maxIdle="100"
       maxActive="100"
       maxWait="10000"
       timeBetweenEvictionRunsMillis="300000"
       username="wmwhse1" 
       password="WMwhSql1" 
       driverClassName="oracle.jdbc.driver.OracleDriver"
       url="jdbc:oracle:thin:@haibei.synnex.com:1521:SCPRD"
	/>

</Context>

4. 编写一个jsp页面测试连接情况:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import=" java.util.*,java.sql.*" %>
<%@ page import="java.util.Hashtable,javax.sql.DataSource " %>
<%@ page import=" javax.naming.Context,javax.naming.InitialContext" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
  </head>
  
  <body>
    <%
     	try{
     		out.println("连接开始....");
     
     		Context initCtx = new InitialContext();
     		Context envCtx = (Context) initCtx.lookup("java:comp/env");
     		DataSource ds = (DataSource)envCtx.lookup("java:/SCPRD_WMWHSE1");
	    	Connection conn = ds.getConnection();
	    	
	    	if(conn != null){
	    		out.println("jndi连接成功!");
	    	}
	    	
     	}catch(Exception e){
     		e.printStackTrace();
     		out.println("jndi连接出错!");
     	}finally{
     		out.println("连接结束....");
     	}
	%> 
  </body>
</html>

5. 测试结果如下:

连接开始.... 
jndi链接成功! 
测试结束....

6. 总结注意事项

   6.1 数据源获取方式错误

   a)

Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource ds = (DataSource)envCtx.lookup("java:/SCPRD_WMWHSE1");
Connection conn = ds.getConnection();

   b)

InitialContext ic=new InitialContext();
DataSource ds=(DataSource) ic.lookup(dataSource);

   这此次测试中,如果使用b)方式则会报一下错误:

javax.naming.NameNotFoundException: Name [SCPRD_WMWHSE1] is not bound in this Context. Unable to find [SCPRD_WMWHSE1].
	at org.apache.naming.NamingContext.lookup(NamingContext.java:819)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:167)
	at org.apache.naming.SelectorContext.lookup(SelectorContext.java:156)
	at javax.naming.InitialContext.lookup(InitialContext.java:392)
	at org.apache.jsp.index_jsp._jspService(index_jsp.java:96)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)

 6.2 oracle驱动错误,遇上这个问题,直接换一个oracle驱动即可,因为有些版本的oracle驱动有这bug。

javax.management.MalformedObjectNameException: Invalid character '
' in value part of property
	at javax.management.ObjectName.construct(ObjectName.java:602)
	at javax.management.ObjectName.<init>(ObjectName.java:1403)

到此tomcat7简单的jndi配置就完成了,希望能报到有需要的朋友。

转载于:https://my.oschina.net/51stick/blog/468471

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值