在Tomcat5.0.28 和5.5.15 配置JNDI数据源
本文摘自chnic同志的博客文章:http://chnic.iteye.com/blog/148127,特此声明。
关键字: tomcat jndi datasource 数据源
无意中搜了下网上的相关文章,发现天下文章一大抄,有不少文章都是错的。自己整理一下关于这方面的心得,希望能给有需要的人一点帮助吧。
Tomcat 5.0.28
不用多说第一步肯定是装好Tomcat了,5.5以下的版本不需要1.5以上的JDK支持。把驱动包拷到%Tomcat%\common\lib 目录下, 搞定之后进入http://localhost:8080/admin/ 这时左边会有一个树形菜单。我们假设你现在的工程名字叫Test,按照 Tomcat Server -> Service -> Host(localhost) -> Context(/Text) -> Resource -> Data Source 的顺序进入数据源设置菜单。在右上角的下拉框选择 Create new Data Source,这时会出现一个菜单。按照菜单的要求填完Save保存,之后点击Commit Changes提交。这时会在 %Tomcat%\conf\Catalina\localhost 下 你会发现Test.xml Context节点下多了如下的内容
- <Resource name="jdbc/mysql" type="javax.sql.DataSource"/>
- <ResourceParams name="jdbc/mysql">
- <parameter>
- <name>maxWait</name>
- <value>5000</value>
- </parameter>
- <parameter>
- <name>maxActive</name>
- <value>4</value>
- </parameter>
- <parameter>
- <name>password</name>
- <value>root</value>
- </parameter>
- <parameter>
- <name>url</name>
- <value>jdbc:mysql://localhost:3306/test</value>
- </parameter>
- <parameter>
- <name>driverClassName</name>
- <value>com.mysql.jdbc.Driver</value>
- </parameter>
- <parameter>
- <name>maxIdle</name>
- <value>2</value>
- </parameter>
- <parameter>
- <name>username</name>
- <value>root</value>
- </parameter>
- </ResourceParams>
<Resource name="jdbc/mysql" type="javax.sql.DataSource"/> <ResourceParams name="jdbc/mysql"> <parameter> <name>maxWait</name> <value>5000</value> </parameter> <parameter> <name>maxActive</name> <value>4</value> </parameter> <parameter> <name>password</name> <value>root</value> </parameter> <parameter> <name>url</name> <value>jdbc:mysql://localhost:3306/test</value> </parameter> <parameter> <name>driverClassName</name> <value>com.mysql.jdbc.Driver</value> </parameter> <parameter> <name>maxIdle</name> <value>2</value> </parameter> <parameter> <name>username</name> <value>root</value> </parameter> </ResourceParams>
就此配置完成,若是觉得进入admin页面配置麻烦也可以把上面的那段XML直接粘贴到 %Tomcat%\conf\Catalina\localhost 目录下相对应的工程xml里。接下来我们用程序测试。
- Context context = new InitialContext();
- DataSource ds = (DataSource)context.lookup("java:comp/env/jdbc/mysql");
- Connection conn = ds.getConnection();
- System.out.println(conn);
Context context = new InitialContext();
DataSource ds = (DataSource)context.lookup("java:comp/env/jdbc/mysql");
Connection conn = ds.getConnection();
System.out.println(conn);
控制台会显示一个Mysql的连接,说明配置成功。关于JNDI的路径 java:comp/env/jdbc/mysql 不明白的人可以去参阅相关的资料,在此就不多说,不过还是要啰唆一句:其实把JNDI想像成为一个xml文件即可,JNDI就相当XPath。
Tomcat 5.5.15
Tomcat 5.5需要JDK 1.5支持。安装完毕之后把Admin的管理插件也安装上。可以在Apache的网站上下到Admin的插件,文件名apache-tomcat-5.5.25-admin.zip。一切做完之后第一步还是把驱动文件拷到%Tomcat%\common\lib下。之后进入admin页面。这次我们配置全局的JNDI数据源也就是这个数据源可以被所有工程共享。选择Resources-> Data Sources 节点,创建一个JNDI Data Source。填入相应的数据,保存提交。这个时候在%Tomcat%\conf下的server.xml中会多出如下内容。
- <Resource
- name="jdbc/mysql"
- type="javax.sql.DataSource"
- password="root"
- driverClassName="com.mysql.jdbc.Driver"
- maxIdle="2"
- maxWait="5000"
- username="root"
- url="jdbc:mysql://localhost:3306/test"
- maxActive="4"/>
<Resource name="jdbc/mysql" type="javax.sql.DataSource" password="root" driverClassName="com.mysql.jdbc.Driver" maxIdle="2" maxWait="5000" username="root" url="jdbc:mysql://localhost:3306/test" maxActive="4"/>
观察后能发现5.5和5.0生成的配置文件并不一样。拷贝这段xml代码然后将其保存至同目录的context.xml文件的Context节点下。重新启动Tomcat并用测试代码测试,发现也可以得到连接。
这个时候我们发现我们的测试代码并没有改一行一句,数据库的改变对上层程序完全是透明的。JNDI使得上层的程序不必关注一些顶层的配置,使得配置和程序彻底解耦。这就是JNDI的一大益处。
看来解耦合在J2EE中无处不在