??? ??? JNDI( Java Naming and Directory Interface ) ,是Java平臺 的一個標準擴展,提供了一組接口、類和關于命名空間的概念。如同其它很多Java技術一樣,JDNI是provider-based的技術,暴露了一個 API和一個服務供應接口(SPI)。這意味著任何基于名字的技術都能通過JNDI而提供服務,只要JNDI支持這項技術。JNDI目前所支持的技術包括 LDAP、CORBA Common Object Service(COS)名字服務、RMI、NDS、DNS、Windows注冊表等等。很多J2EE技術,包括EJB都依靠JNDI來組織和定位實體。
??? ?? ?? 哦~JNDI的概念好長~呵呵,朋友們可以把它理解為一種將對象和名字捆綁的技術,對象工廠負責生產出對象,這些對象都和唯一的名字綁在一起,外部資源可以通過名字獲得某對象的引用。
??? ?? ?? 在javax.naming的包包中提供Context接口,提供了兩個很好用的方法:
<1> void bind( String name , Object object )
??? ??? 將名稱綁定到對象。所有中間上下文和目標上下文(由該名稱最終原子組件以外的其他所有組件指定)都必須已經存在。PS:名字不能為空~
<2>Object lookup( String name )
??? ?? 檢索指定的對象。如果 name為空,則返回此上下文的一個新實例(該實例表示與此上下文相同的命名上下文,但其環境可以獨立地進行修改,而且可以并發訪問)。
??? ?? 外部資源訪問對象工廠中的工程圖:
在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驅動.jar包放到tomcat的common/lib下去,也可以放到WEB-INF/lib下,
重新啟動tomcat.
就可以用Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:comp/env/MYSQL");
Connection con = ds.getConnection(); 來連接數據庫連接池
一.在tomcat_home\common\lib下放入jdbc的驅動程序,額外說一下,如果是使用sql server的話,有至少兩個驅動可以選擇,一個是微軟提供的,另一個是 jtds,比微軟的要好很多,推薦使用 二.配置文件,tomcat 不同的版本配置文件略有不同,下面以tomcat5..5.*為例。 三.如果配置不正確會出現javax.naming.NameNotFoundException: Name is not bound in this Context 錯誤方式一、全局數據庫連接池 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">這樣就可以了。方式二、全局數據庫連接池 1、同上 2、在tomcat\conf\context.xml的Context中增加: <resourcelink global="jdbc/mydb" name="jdbc/mydb" type="javax.sql.DataSource">方式三、局部數據庫連接池只需在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">參數說明: driveClassName:JDBC驅動類的完整的名稱; maxActive:同時能夠從連接池中被分配的可用實例的最大數; maxIdle:可以同時閑置在連接池中的連接的最大數; maxWait:最大超時時間,以毫秒計; password:用戶密碼; url:到JDBC的URL連接; user:用戶名稱; validationQuery:用來查詢池中空閑的連接。以上三種方式在tomcat 5.5.4下都可以。另外,sql server的jdbc driver是從微軟網站上下載的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 中原來是元素的項在5.5中變成了屬性</resource></resource></resource></resourcelink></resourcelink></resource>
|
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

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