您的位置:首页 > 运维架构 > Tomcat

如何在Tomcat中使用jndi

2008-06-04 16:19 176 查看
配置环境:jdk-6u1-windows-i586-p.exe+jakarta-tomcat-5.0.28.exe+SqlServer2000sp3

方式一

一:启动Tomcat,打开IE在地址栏内输入http://localhost:8080/admin  进入Tomcat的管理界面;

        点击右边的Data Sources 在右上角的下拉菜单中选择Create New Data Source 在下边的输入框中输入需要的配置信息。

        输入后单击保存按钮,再点击commit change提交。

        所填内容的说明如下

                JNDI Name:jdbc/mydb(mydb为自己所命的名字)

                Data Source URL:jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=databasebname(连接的数据名)

                JDBC Driver Class: com.microsoft.jdbc.sqlserver.SQLServerDriver

                User Name:连接数据库的用户名 Password: 数据库密码

                Max. Active Connections: 最大连接数

                Max. Idle Connections: 是最大的空闲连接数

                Max. Wait for Connection: 最大等待连接数

                validationQuery:用来查询池中空闲的连接。

提交后会发现conf/server.xml的内容发生了改变,经过对比发现以上的操作实际上修改了<GlobalNamingResources>标签中的<Resource>标签,即添加了资源描述,同时还把原有的注释全部删除。

二.创建新的WEB应用程序,我们假设应用程序存放的物理路径为d:/jndi,同时建立其子目录d:/jndi/WEB-INF 在%TOMCAT_HOME%/conf/Catalina/localhost中建立虚拟目录描述文件jndi.xml ,内容如下:

<Context displayName="jndi" docBase="D:/jndi" path="/jndi" workDir="work/Catalina/localhost/jndi">   

    <ResourceLink global="jdbc/mydb" name="jdbc/mydb" type="javax.sql.DataSource"/>

</Context>

此步操作的目的是建立虚拟站点/jnd并使得jndi应用程序能够引用所配置的JNDI数据源,如果不加会出现错误Cannot create JDBC driver of class '''' for connect URL ''null'' ="楷体_GB2312" size="3">

三、在d:/jndi/WEB-INF中建立web.xml文件,为应用程序指定JNDI数据源,内容如下:

<?xml version="1.0" encoding="ISO-8859-1"?>

    <web-app xmlns="http://java.sun.com/xml/ns/j2ee"      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"      xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"      version="2.4">   

        <resource-ref> 

            <description>DB Connection</description>   

            <res-ref-name>jdbc/mydb</res-ref-name>   

            <res-type>javax.sql.DataSource</res-type>   

            <res-auth>Container</res-auth>   

         </resource-ref>

    </web-app>

四.测试,先在数据库中建一个有2列元素,名称为jndi的表,之后采用如下JSP页面测试命名为test.jsp,浏览器中输入网址http://127.0.0.1:8080/jndi/test.jsp

<%@ page import="java.io.*,java.util.*,java.sql.*,javax.sql.*,javax.naming.*"%>

<%@ page contentType="text/html;charset=GB2312"%>

<html>

    <head><title>DataSourse Connection Test</title></head>

    <body>

        <%try{ 

            java.sql.Connection con;& nbsp;   Statement stmt;    ResultSet rs;     

            Context ctx = new InitialContext();    DataSource ds=(DataSource)ctx.lookup("java:/comp/env/jdbc/mydb");    

            con=ds.getConnection();        stmt=con.createStatement();    rs=stmt.executeQuery("select * from jndi");

            while(rs.next()){    out.print(rs.getString(1));     out.print(rs.getString(2));}    rs.close();    stmt.close();    con.close();  }catch(Exception e){    out.print(e.getMessage());} %>

    </body>

</html>

方式二

一   把方式一步骤1里产生的代码放入tomcat安装目录下/conf/catalina/localhost/项目名.xml中(依前面的约定此名为jndi.xml) 产生代码如下: <Resource auth="Container" description="User database that can be updated and saved" name="UserDatabase" type="org.apache.catalina.UserDatabase"/> <Resource name="jdbc/mysql" type="javax.sql.DataSource"/> <ResourceParams name="UserDatabase"> <parameter> <name>factory</name> <value>org.apache.catalina.users.MemoryUserDatabaseFactory</value> </parameter> <parameter> <name>pathname</name> <value>conf/tomcat-users.xml</value> </parameter> </ResourceParams> <ResourceParams name="jdbc/mysql"> <parameter> <name>url</name> <value>jdbc:mysql://localhost/test</value> </parameter> <parameter> <nam e>password</name> <value></value> </parameter> <parameter> <name>maxActive</name> <value>4</value> </parameter> <parameter> <name>maxWait</name> <value>5000</value> </parameter> <parameter> <name>driverClassName</name> <value>org.gjt.mm.mysql.Driver</value> </parameter> <parameter> <name>username</name> <value>root</value> </parameter> <parameter> <name>maxIdle</name> <value>2</value> </parameter> </ResourceParams>

二   同方式一的第三步两者的区别是作用域不同 具体说来方式一建立了一个全局的数据源,以供WEB应用程序使用。方式一的第一步声明了全局数据源,第二步则说明jndi应和程序要引用一个名为jdbc/mydb的数据源。在方式二中,由一步完成了上述两步,但方式二所建的这个数据源也就仅能供当前所在的应用程序来使用。

三 测试   同方式一第四步 注意: 1.org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory ([Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.)此是一个小问题,因为我的SQLSERVER2K的服务改成手动的,所以每次启动后就要手动的启动SQLSERVER2K,由于一下子不记的启动了,所以报些错误,所以如果你经常要用到SQLSERVER2K的话,最好不要将其改为手动启动 2.sqlserver2k sp3以下版本1433端号是没有打开的,必须进行升级,否则会出现Cannot create PoolableConnectionFactory ([Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.)
        
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息