??? ??? JNDI( Java Naming and Directory Interface ) ,是Java平臺(tái) 的一個(gè)標(biāo)準(zhǔn)擴(kuò)展,提供了一組接口、類和關(guān)于命名空間的概念。如同其它很多Java技術(shù)一樣,JDNI是provider-based的技術(shù),暴露了一個(gè) API和一個(gè)服務(wù)供應(yīng)接口(SPI)。這意味著任何基于名字的技術(shù)都能通過JNDI而提供服務(wù),只要JNDI支持這項(xiàng)技術(shù)。JNDI目前所支持的技術(shù)包括 LDAP、CORBA Common Object Service(COS)名字服務(wù)、RMI、NDS、DNS、Windows注冊表等等。很多J2EE技術(shù),包括EJB都依靠JNDI來組織和定位實(shí)體。
??? ?? ?? 哦~JNDI的概念好長~呵呵,朋友們可以把它理解為一種將對象和名字捆綁的技術(shù),對象工廠負(fù)責(zé)生產(chǎn)出對象,這些對象都和唯一的名字綁在一起,外部資源可以通過名字獲得某對象的引用。
??? ?? ?? 在javax.naming的包包中提供Context接口,提供了兩個(gè)很好用的方法:
<1> void bind( String name , Object object )
??? ??? 將名稱綁定到對象。所有中間上下文和目標(biāo)上下文(由該名稱最終原子組件以外的其他所有組件指定)都必須已經(jīng)存在。PS:名字不能為空~
<2>Object lookup( String name )
??? ?? 檢索指定的對象。如果 name為空,則返回此上下文的一個(gè)新實(shí)例(該實(shí)例表示與此上下文相同的命名上下文,但其環(huán)境可以獨(dú)立地進(jìn)行修改,而且可以并發(fā)訪問)。
??? ?? 外部資源訪問對象工廠中的工程圖:
在Tomcat 5.5\conf\Catalina\localhost\xxxxx.xml(xxxxx.xml為你自己的web的配置xml文件)?中添加resource
??????? <Resource name="MYSQL"
??????? type="javax.sql.DataSource"
??????? driverClassName="com.mysql.jdbc.Driver"
??????? password="********"
??????? maxIdle="2"
??????? maxWait="5000"
??????? username="root"
??????? url="jdbc:mysql://localhost:3306/jnestore"
??????? maxActive="10"/>
以上是tomcat 5.5版本的配置,5.5版本只有這樣陪才有效果,以前的版本可以按照paramter的方法添加;
Resource 一定要包含在<Context ......> </Context> 之間
在你的web的路近下,WEB-INF中找到web.xml,添加資源映射??????
????? ?<resource-ref>
?????????? <description>connection</description>
?????????? <res-ref-name>MYSQL</res-ref-name>
?????????? <res-type>javax.sql.DataSource</res-type>
?????????? <res-auth>Container</res-auth>
??????? </resource-ref>
把mysql的jdbc驅(qū)動(dòng).jar包放到tomcat的common/lib下去,也可以放到WEB-INF/lib下,
重新啟動(dòng)tomcat.
就可以用Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:comp/env/MYSQL");
Connection con = ds.getConnection(); 來連接數(shù)據(jù)庫連接池
一.在tomcat_home\common\lib下放入jdbc的驅(qū)動(dòng)程序,額外說一下,如果是使用sql server的話,有至少兩個(gè)驅(qū)動(dòng)可以選擇,一個(gè)是微軟提供的,另一個(gè)是 jtds,比微軟的要好很多,推薦使用 二.配置文件,tomcat 不同的版本配置文件略有不同,下面以tomcat5..5.*為例。 三.如果配置不正確會(huì)出現(xiàn)javax.naming.NameNotFoundException: Name is not bound in this Context 錯(cuò)誤方式一、全局?jǐn)?shù)據(jù)庫連接池 1、通過管理界面配置連接池,或者直接在tomcat\conf\server.xml的GlobalNamingResources中增加 <resource name="jdbc/mydb" type="javax.sql.DataSource" password="mypwd" driverclassname="com.microsoft.jdbc.sqlserver.SQLServerDriver" maxidle="2" maxwait="5000" validationquery="select 1" username="sa" url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb" maxactive="4">2、在tomcat\webapps\myapp\META-INF\context.xml的Context中增加: <resourcelink global="jdbc/mydb" name="jdbc/mydb" type="javax.sql.DataSource">這樣就可以了。方式二、全局?jǐn)?shù)據(jù)庫連接池 1、同上 2、在tomcat\conf\context.xml的Context中增加: <resourcelink global="jdbc/mydb" name="jdbc/mydb" type="javax.sql.DataSource">方式三、局部數(shù)據(jù)庫連接池只需在tomcat\webapps\myapps\META-INF\context.xml的Context中增加: <resource name="jdbc/mydb" type="javax.sql.DataSource" password="mypwd" driverclassname="com.microsoft.jdbc.sqlserver.SQLServerDriver" maxidle="2" maxwait="5000" validationquery="select 1" username="sa" url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb" maxactive="4">參數(shù)說明: driveClassName:JDBC驅(qū)動(dòng)類的完整的名稱; maxActive:同時(shí)能夠從連接池中被分配的可用實(shí)例的最大數(shù); maxIdle:可以同時(shí)閑置在連接池中的連接的最大數(shù); maxWait:最大超時(shí)時(shí)間,以毫秒計(jì); password:用戶密碼; url:到JDBC的URL連接; user:用戶名稱; validationQuery:用來查詢池中空閑的連接。以上三種方式在tomcat 5.5.4下都可以。另外,sql server的jdbc driver是從微軟網(wǎng)站上下載的sql server jdbc (sp3)。 下面 分別舉tomcat5.0 和tomcat 5.5 配置文件 的例子(將此配置文件置于Tomcat \conf\Catalina\localhost 下) tomcat5.0 <resource auth="Container" name="jdbc/test" type="javax.sql.DataSource"><resourceparams name="jdbc/test"> <parameter><name>factory</name> <value>org.apache.commons.dbcp.BasicDataSourceFactory</value> </parameter> <parameter><name>maxActive</name> <value>100</value> </parameter> <parameter><name>maxIdle</name> <value>30</value> </parameter> <parameter><name>maxWait</name> <value>10000</value> </parameter> <parameter><name>username</name> <value>sa</value> </parameter> <parameter><name>password</name> <value>test</value> </parameter> <parameter><name>driverClassName</name> <value>net.sourceforge.jtds.jdbc.Driver</value> </parameter> <parameter><name>defaultAutoCommit</name> <value>true</value> </parameter> <parameter><name>url</name> <value>jdbc:jtds:sqlserver://url/filedb;charset=gb2312;autoReconnect=true</value> </parameter> <parameter><name>removeAbandoned</name> <value>true</value> </parameter> <parameter><name>removeAbandonedTimeout</name> <value>60</value> </parameter> <parameter><name>logAbandoned</name> <value>true</value> </parameter> </resourceparams>tomcat 5.5 <resource defaultautocommit="true" removeabandoned="true" removeabandonedtimeout="60" logabandoned="true" auth="Container" name="jdbc/test" type="javax.sql.DataSource" password="test" driverclassname="oracle.jdbc.driver.OracleDriver" maxidle="30" maxwait="10000" username="test" url="jdbc:oracle:thin:@url:1521:dcdb" maxactive="100">可以看到 5.0 中原來是元素的項(xiàng)在5.5中變成了屬性</resource></resource></resource></resourcelink></resourcelink></resource>
|
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
