一直都JNDI这个名字,可是一直都没有去研究过,因为工作中一直都没用到。。。
这次面试的时候用到了。。。 于是乎,找来例子练练手。。
- 看了Tomcat官方的说明,顺便看到々上善若水々的文章,理解了整个意思。
- 下面将我的例子写在这里,只希望下次面试的时候,我可以说,来我博客看吧,这些我都会。。
- 在server.xml中添加:
-
-
<Context path="/connjndi" docBase="D:\workspace\TestJndi\WebRoot" reloadable="true">
<Resource name="jdbc/SampleData" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="sampledata" password="password" driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@//localhost:1521/mondrian"/>
</Context>
Tomcat标准数据源资源工厂配置项如下:
* driverClassName - 所使用的JDBC驱动类全称。
* maxActive - 同一时刻可以自数据库连接池中被分配的最大活动实例数。
* maxIdle - 同一时刻数据库连接池中处于非活动状态的最大连接数。
* maxWait - 当连接池中没有可用连接时,连接池在抛出异常前将等待的最大时间,单位毫秒。
*password - 传给JDBC驱动的数据库密码。
* url - 传给JDBC驱动的连接URL。
* user - 传给JDBC驱动的数据库用户名。
* validationQuery - 一个SQL查询语句,用于在连接被返回给应用前的连接池验证。
* 如果指定了该属性,则必为至少返回一行记录的SQL SELECT语句。
在web.xml中添加:
<description>Oracle Test App</description>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/SampleData</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
写一个简单的jsp测试了一下:
1<%@ page import="java.sql.*,javax.sql.*,javax.naming.*" %>
2
3<%
4Connection conn = null;
5try
6 {
7 Context ctx = new InitialContext();
8 DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/SampleData");
9 conn = ds.getConnection();
10 System.out.println("connection pool connected !!");
11 } catch (NamingException e) {
12 System.out.println(e.getMessage());
13 } catch (SQLException e) {
14 System.out.println(e.getMessage());
15 e.printStackTrace();
16 }finally
17 {
18 conn.close();
19 }
20 %>
我就是这样连接成功了。
写的时候还是看了下々上善若水々 的博客,总感觉他的写得比较全,而我总感觉写不出比他好的,又不能写出和他不同的地方。。就这样子啦。。
PS:在查资料的时候,看到在CSDN中有位朋友谈到了JNDI的用处:
JNDI不止用于数据源,其可以用于存储和获得任何类型的已命名的java对象等等.
如果使用JDBC有thin和oci两种连接方式:
[先说thin]
打开数据库连接方式:DriverManager.getConnection
1 DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
2
3 Connection myConnection = DriverManager.getConnection(
4 "jdbc:oracle:thin:@test2000:1521:orac", //orac为oracle的SID
5 "user",
6 "password"
7 );
或者用前面给出的那个
OracleDataSource myODS = new OracleDataSource(); //其属性简单明了,不难掌握
Connection myConnection = myODSgetConnection("user","password");
[再说OCI](可以使连接池中有多个缓冲的连接)
1 OracleOCIConnectionPool myOOCP = new OracleOCIConnectionPool();
2
3 // set the attributes for the physical database connections
4 myOOCP.setServerName("test2000");
5 myOOCP.setDatabaseName("ORCL");
6 myOOCP.setDriverType("oci");
7 myOOCP.setPortNumber(1521);
8 myOOCP.setUser("store_user");
9 myOOCP.setPassword("store_password");
10
11 // set the values for the dynamic attributes of myOOCP
12 Properties myProperties = new Properties();
13 myProperties.put(OracleOCIConnectionPool.CONNPOOL_MIN_LIMIT,"5");
14 myProperties.put(OracleOCIConnectionPool.CONNPOOL_MAX_LIMIT,"10");
15 myProperties.put(OracleOCIConnectionPool.CONNPOOL_INCREMENT,"2");
16 myProperties.put(OracleOCIConnectionPool.CONNPOOL_TIMEOUT,"30");
17 myProperties.put(OracleOCIConnectionPool.CONNPOOL_NOWAIT,"true");
18 myOOCP.setPoolConfig(myProperties);
19
20 // request a connection instance from myOOCP and store
21 // the connection instance in myConnection
22 OracleOCIConnection myConnection = (OracleOCIConnection) myOOCP.getConnection();
23
这个就当是个引子,之后对JNDI有个深入的了解和认识。。。。
posted on 2008-03-26 21:27
Mr. Michael.Q 阅读(3732)
评论(1) 编辑 收藏 所属分类:
JNDI 概念学习与应用研究