`
javabaike
  • 浏览: 23766 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
文章分类
社区版块
存档分类
最新评论

Tomcat连接池配置与实现/JNDI

阅读更多
刚刚终于配置好了Tomcat6.0的连接池,唉,太不容易了,我太笨了,弄了几个小时。呵呵。
连接池的配置网上有很多种,我也测试了几种,第一种连接成功了
先在Tomcat\conf文件夹里面找到server.xml文件,在里面的这一段里面添加代码
<Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>

添加如下代码
<Resource name="jdbc/exam"        
			auth="Container" type="javax.sql.DataSource"  
			driverClassName="com.mysql.jdbc.Driver"  
			maxIdle="30"  
			maxWait="5000"  
			username="root"  
			password="lzj"  
			url="jdbc:mysql://localhost/exam"        
			maxActive="100"    
			removeAbandoned="true"  
			removeAbandonedTimeout="60" 
			logAbandoned="true"/> 

然后在找到同文件夹下面的context.xml文件,在<context></context>之间添加一行代码
。引用server.xml文件中刚刚加入的部分
<ResourceLink name="jdbc/exam" global="jdbc/exam" type="javax.sql.DataSource"/>

然后再在项目的web.xml文件中加入
<resource-ref>
	<description>DB Connection</description>
	<res-ref-name>jdbc/exam</res-ref-name>
	<res-type>javax.sql.DataSource</res-type>
	<res-auth>Container</res-auth>
  </resource-ref>

配置就算是完成了,最主要的是连接池类的代码
下面我把连接池的代码也贴出来,已经测试成功
import java.sql.*;
import javax.sql.*;
import java.io.*;
import javax.naming.*;

public class ConnectionPool
{
	private static ConnectionPool instace;
	private static DataSource ds;
	//获得数据源
    public static DataSource createDataSource() 
    { 
      if (ds == null) 
      { 
         try 
         { 
             Context ct = new InitialContext(); 
             if (ct == null) 
                 System.out.println("无配置环境"); 
             Context envContext = (Context) ct.lookup("java:/comp/env"); 
             ds = (DataSource) envContext.lookup("jdbc/exam"); //根据名称取得数据源 
          } 
          catch (NamingException e) 
          { 
              e.printStackTrace(); 
          } 
       } 
       return ds; 
    } 

	//从连接池中取得连接对象
	public static synchronized Connection getConnection() throws SQLException,NamingException{
		Connection con=null;
		try
		{
			//获取连接
			con=(Connection)createDataSource().getConnection();
		}
		catch (Exception e)
		{
			e.printStackTrace();
			System.out.print("Get Connection Error");
		}
		return con;
	}
	//释放连接
	public static synchronized void freeConnection(Connection con){
		try
		{
			con.close();
		}
		catch (SQLException e)
		{
			e.printStackTrace();
			System.out.println("Close Connection Error");
		}
	}
}

在使用的时候,这样使用就可以了
先导入要使用的包javax.naming.*;因为要抛出异常使用try,
try
			{
				con=cp.getConnection();
			}
			catch (NamingException e)
			{
				e.printStackTrace();
			}
			con.setAutoCommit(false);
//下面就开始写SQL语句,最后再用pstmt.executeUpdate();
				con.commit();执行语句

这就是第一种方法,测试成功,只不过这种配置出来的是共享连接,哪个web app都可以连接。还有一种是直接在context.xml中添加配置,还没有测试成功,不知道是哪里出错了,
还有一种是直接用类,先创建一些连接,使用的时拿出来。这里我也不贴代码了,呵呵,人家讲的比我清楚,地址http://jalant.iteye.com/blog/378436
http://www.iteye.com/topic/245596
在我们的WEB项目中的META-INF文件夹下建立一个context.xml,把配置代码粘贴进去,接下来基本和上面的一样.
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics