`

java配置tomcat连接池的具体操作含义?

阅读更多
想深入了解下,使用数据源和连接池的具体操作含义。找了很多资料都没有详细的描述,想问下大家一点疑问。
如下:
方式一:在tomcat的context.xml中添加了如下代码

<Resource name="jdbc/oracleds" auth="Container" type="javax.sql.DataSource" username="scott" password="abcd" driverClassName="oracle.jdbc.OracleDriver"
     url="jdbc:oracle:thin:@192.168.1.100:1521:ora9"/>


方式二:在tomcat的context.xml中添加了如下代码

<Resource name="jdbc/oracleds" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30"
     maxWait="10000" username="scott" password="abcd" driverClassName="oracle.jdbc.OracleDriver"
     url="jdbc:oracle:thin:@192.168.1.100:1521:ora9"/>

-------------------------------------------
问题:
如果采用方式一配置的话,是否只是按照jndi规范进行一般数据源的创建。
如果采用方式二配置的话,是否按照jndi规范进行了数据连接池的创建。

如果采用方式一的话,我再java文件中编写的连接代码应该如下(未实践过,吃晚饭后再试)
参考:http://hi.baidu.com/lurim/blog/item/963bdef5101a6d64ddc4749f.html
我看人家是可以的:

Context ctx=new InitialContext();
  DataSource ds=(Datasource)ctx.lookup("java:jdbc/oracleds");   
  conn=ds.getConnection();
------------------------------------------------
如果采用方式二的话,代码应该如下:
Context ctx=new InitialContext();
  Context env=(Context)ctx.lookup("java:comp/env");
  DataSource ds=(DataSource)env.lookup("jdbc/oracleds");  
  con=ds.getConnection();

----------------------------------
问题来了:
根据我理解,jndi封装了我们要对数据源的连接内容,只是提供了简单的数据源的名称,我们就可以进行连接了。
“Context对象表示JDNI共享目录;lookup方法是Context对象的主要方法,根据一个对象的JNDI共享名获得这个对象本身,返回Object”
参考:http://bbs.accp168.com/bbs/frame.php?frameon=yes&referer=http%3A//bbs.accp168.com/bbs/redirect.php%3Ffid%3D7%26tid%3D3660%26goto%3Dnextoldset
根据上面的话,应该是使用方式一的java代码就可以访问连接池的啊,为什么会多出一条Context env=(Context)ctx.lookup("java:comp/env");
创建的env到底是什么东东啊。 
Context env,应用程序上下文对象,java:comp/env 没记错的话,是tomcat在jndi注册的目录名 

 

eg:

 

public class DataConn {
 
 private String sDBDriver = "com.mysql.jdbc.Driver";
 private String sConnStr = "jdbc:mysql://localhost:3306/test";
 private String username = "root";
 private String password = "comtowerbgpserverDataconn";
 private Connection conn = null;
 private Statement stmt = null;
 private ResultSet rs = null;
 

 
 public Connection getConnection() {
  try {
   Class.forName(sDBDriver);
   conn = DriverManager.getConnection(sConnStr, username, password);

//上面是直接连接的方法,下面是使用连接池连的方法
//   Context initCtx;
//   Context ctx;
//   Object obj;
//   try {
//    initCtx = new InitialContext();
//    ctx = (Context) initCtx.lookup("java:comp/env");
//    obj = (Object) ctx.lookup("jdbc/GwtSample");
//    javax.sql.DataSource ds = (javax.sql.DataSource) obj;
//    conn = ds.getConnection();
//   } catch (NamingException e) {
//    // TODO Auto-generated catch block
//    e.printStackTrace();
//   } catch (SQLException e) {
//    // TODO Auto-generated catch block
//    e.printStackTrace();
//   }

 

tomcat的server.xml

 

 <Context path="" docBase="D:\bgpwww\aaa" >
     <Resource name="jdbc/GwtSample" auth="Container"
                type="javax.sql.DataSource"
                username="root"
                password="root"
                driverClassName="com.mysql.jdbc.Driver"
                maxIdle="200"
                maxActive="200"
               url="jdbc:mysql://localhost:3306/database"/>
    </Context>

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics