|
想深入了解下,使用数据源和连接池的具体操作含义。找了很多资料都没有详细的描述,想问下大家一点疑问。
如下:
方式一:在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> |
|
|
|
|
|
|