一直都JNDI這個(gè)名字,可是一直都沒有去研究過,因?yàn)楣ぷ髦幸恢倍紱]用到。。。
這次面試的時(shí)候用到了。。。 于是乎,找來例子練練手。。
- 看了Tomcat官方的說明,順便看到々上善若水々的文章,理解了整個(gè)意思。
- 下面將我的例子寫在這里,只希望下次面試的時(shí)候,我可以說,來我博客看吧,這些我都會(huì)。。
- 在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標(biāo)準(zhǔn)數(shù)據(jù)源資源工廠配置項(xiàng)如下:
* driverClassName - 所使用的JDBC驅(qū)動(dòng)類全稱。
* maxActive - 同一時(shí)刻可以自數(shù)據(jù)庫(kù)連接池中被分配的最大活動(dòng)實(shí)例數(shù)。
* maxIdle - 同一時(shí)刻數(shù)據(jù)庫(kù)連接池中處于非活動(dòng)狀態(tài)的最大連接數(shù)。
* maxWait - 當(dāng)連接池中沒有可用連接時(shí),連接池在拋出異常前將等待的最大時(shí)間,單位毫秒。
*password - 傳給JDBC驅(qū)動(dòng)的數(shù)據(jù)庫(kù)密碼。
* url - 傳給JDBC驅(qū)動(dòng)的連接URL。
* user - 傳給JDBC驅(qū)動(dòng)的數(shù)據(jù)庫(kù)用戶名。
* validationQuery - 一個(gè)SQL查詢語句,用于在連接被返回給應(yīng)用前的連接池驗(yàn)證。
* 如果指定了該屬性,則必為至少返回一行記錄的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>
寫一個(gè)簡(jiǎn)單的jsp測(cè)試了一下:
1<%@ page import="java.sql.*,javax.sql.*,javax.naming.*" %>
2
3<%
4Connection conn = null;
5try
6{
7Context ctx = new InitialContext();
8DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/SampleData");
9conn = ds.getConnection();
10System.out.println("connection pool connected !!");
11} catch (NamingException e) {
12System.out.println(e.getMessage());
13} catch (SQLException e) {
14System.out.println(e.getMessage());
15e.printStackTrace();
16}finally
17{
18conn.close();
19}
20%>
我就是這樣連接成功了。
寫的時(shí)候還是看了下々上善若水々 的博客,總感覺他的寫得比較全,而我總感覺寫不出比他好的,又不能寫出和他不同的地方。。就這樣子啦。。
PS:在查資料的時(shí)候,看到在CSDN中有位朋友談到了JNDI的用處:
JNDI不止用于數(shù)據(jù)源,其可以用于存儲(chǔ)和獲得任何類型的已命名的java對(duì)象等等.
如果使用JDBC有thin和oci兩種連接方式:
[先說thin]
打開數(shù)據(jù)庫(kù)連接方式:DriverManager.getConnection
1DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
2
3Connection myConnection = DriverManager.getConnection(
4"jdbc:oracle:thin:@test2000:1521:orac", //orac為oracle的SID
5"user",
6"password"
7);
或者用前面給出的那個(gè)
OracleDataSource myODS = new OracleDataSource(); //其屬性簡(jiǎn)單明了,不難掌握
Connection myConnection = myODSgetConnection("user","password");
[再說OCI](可以使連接池中有多個(gè)緩沖的連接)
1OracleOCIConnectionPool myOOCP = new OracleOCIConnectionPool();
2
3// set the attributes for the physical database connections
4myOOCP.setServerName("test2000");
5myOOCP.setDatabaseName("ORCL");
6myOOCP.setDriverType("oci");
7myOOCP.setPortNumber(1521);
8myOOCP.setUser("store_user");
9myOOCP.setPassword("store_password");
10
11// set the values for the dynamic attributes of myOOCP
12Properties myProperties = new Properties();
13myProperties.put(OracleOCIConnectionPool.CONNPOOL_MIN_LIMIT,"5");
14myProperties.put(OracleOCIConnectionPool.CONNPOOL_MAX_LIMIT,"10");
15myProperties.put(OracleOCIConnectionPool.CONNPOOL_INCREMENT,"2");
16myProperties.put(OracleOCIConnectionPool.CONNPOOL_TIMEOUT,"30");
17myProperties.put(OracleOCIConnectionPool.CONNPOOL_NOWAIT,"true");
18myOOCP.setPoolConfig(myProperties);
19
20// request a connection instance from myOOCP and store
21// the connection instance in myConnection
22OracleOCIConnection myConnection = (OracleOCIConnection) myOOCP.getConnection();
23
這個(gè)就當(dāng)是個(gè)引子,之后對(duì)JNDI有個(gè)深入的了解和認(rèn)識(shí)。。。。
posted on 2008-03-26 21:27 Mr. Michael.Q 閱讀(3746) 評(píng)論(1) 編輯 收藏 所屬分類: JNDI 概念學(xué)習(xí)與應(yīng)用研究