`

Jndi Tomcat 配置

    博客分类:
  • Jndi
阅读更多

Tomcat 5.5(以上版本)配置JNDI数据源

配置数据源,总的来说有两种思路,思路一是直接在<Context>中配置局部数据源,思路二是先配置全局数据源,然后再在<Context>应用中链接到全局数据源,又因为Tomcat中<Context>位置多样,具体我分为如下几种方法:

方法1、直接在<Context>中配置局部数据源,tomcat中%tomcat_home%\conf\ context.xml中的<Context>中添加数据源。即将第2步中的数据直接添加到<Context>节点下。已通过验证。

方法2、第2步 + 第6步,测试通过。

方法3、方法4、先配置全局数据源,然后再在<Context>应用中链接到全局数据源,在server.xml中的<GlobalNamingResources>元素中配置数据源(数据源配置见上文)成全局数据源,然后在<Context>元素链接到该资源。另外,<Context>位置可有多个,那么在<Context>元素链接到全局数据源的位置时,<Context>的位置可有两个如下:
实现方式有:方法3-------第2步 + 第3步,联合实现,测试通过
    方法4---------第2步 + 第7步,联合实现,测试通过

方法5:(直接配置的类型,这种方式最简单)
就是第8步的操作即可,验证通过

1、(必不可少)先将JDBC驱动加入到tomcat6/lib目录下
如果直接用JDBC访问数据库,可以把JDBC驱动程序拷贝到Web应用的WEB-INF/lib目录或者Tomcat安装目录下的common/lib目录下。
  
  如果通过数据源访问数据库,由于数据源由Servlet容器创建并维护,所以必须把JDBC驱动程序拷贝到Tomcat安装目录下的common/lib目录下,确保Servlet容器能够访问驱动程序。


2、在tomcat的conf/server.xml中的<GlobalNamingResources>元素中添加如下内容:
<!—连接sqlserver -->
<Resource
    name="jdbc/sqlservertest"
    auth="Container"
    type="javax.sql.DataSource"
    maxActive="100"
    maxIdle="45"
    username="sa"
    maxWait="180"
    driverClassName="net.sourceforge.jtds.jdbc.Driver"
    password="123456"
    url="jdbc:jtds:sqlserver://localhost:1433/test" 
    removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true"
    testOnReturn="true" testWhileIdle="true"/>

<!—连接mysql -->
<Resource name="jdbc/mysql"   
           auth="Container"
           type="javax.sql.DataSource"   
           driverClassName="com.mysql.jdbc.Driver"   
           url="jdbc:mysql://localhost:3306/wxl" 
           username="root"   
           password="root"   
           maxActive="100"   
           maxIdle="30"   
           maxWait="10000" />
以上配置了两个全局数据源,一个叫jdbc/sqlservertest,是SQLServer2000的,一个叫:jdbc/mysql,是连接mysql的

参数说明:
driveClassName:JDBC驱动类的完整的名称; 
maxActive:同时能够从连接池中被分配的可用实例的最大数; 
maxIdle:可以同时闲置在连接池中的连接的最大数; 
maxWait:最大超时时间,以毫秒计; 
password:用户密码; 
url:到JDBC的URL连接; 
user:用户名称; 
validationQuery:用来查询池中空闲的连接。

3、在tomcat的conf/ context.xml中的<Context>元素中添加如下内容:
<ResourceLink global="jdbc/mysql" name="jdbc/mysql" type="javax.sql.DataSource" />

4、补充一步(可有可无)
在应用发布目录下\web-inf\web.xml文件中配置该数据源的引用<resource-ref>元素(注意位置,一般放在<web-app>根元素中最后面,详细参考dtd文件)。我在如上所示环境实际测试时发现,此文件可有可无。(确实是这样的)有的文章说配置了可能会更稳定,未及考证。如下:
<resource-ref>
   <description>DB Connection</description>
   <res-ref-name>jdbc/mysql</res-ref-name>
   <res-type>javax.sql.DataSource</res-type>
   <res-auth>Container</res-auth>
</resource-ref>
这一步的目的就是告诉tomcat如何连接数据库


5、获得连接
<%@ page language="java" import="java.util.*,java.sql.Connection,javax.sql.DataSource, javax.naming.InitialContext" pageEncoding="utf-8"%>

<html>
<head>
<%
   InitialContext ctx = new InitialContext();
   String strLookup = "java:comp/env/jdbc/mysql";
   DataSource ds =(DataSource) ctx.lookup(strLookup);
   Connection con = ds.getConnection();
   if (con != null){
     System.out.print("success");
   }else{
      System.out.print("failure");
   }
%>

<body>
    搞得我好辛苦啊 <br>
</body>
</html>
补充一个常见错误:
上述代码在J2EE服务器环境下工作得很好,但是在main()中就会报错:javax.naming.NoInitialContextException:

之所以有NoInitialContextException是因为无法从System.properties中获得必要的JNDI参数,在服务器环境下,服务器启动时就把这些参数放到System.properties中。
所以可以通过以下方法解决:
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
env.put(Context.PROVIDER_URL,"t3://localhost:7001");
InitialContext ctx = new InitialContext(env);


System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
System.setProperty(Context.PROVIDER_URL, "rmi://localhost:3306/wxl");
System.setProperty(Context.SECURITY_PRINCIPAL, "root");
System.setProperty(Context.SECURITY_CREDENTIALS, "root");

以上代码建议改为在配置文件中配置
java.naming.factory.initial=weblogic.jndi.WLInitialContextFactory
java.naming.provider.url=rmi://localhost:3306/test
java.naming.security.principal=root #用户名
java.naming.security.credentials=root #密码
这里要正常运行,肯定要导入weblogic.jndi.WLInitialContextFactory相关的包了。

然后将做个web工程发布到tomcat下;我用了两种方式发布:一种是war包的方式,一种是在server.xml中添加一个Context;
下面分别说说两种发布方式的区别:
6、war包方式:
如果要用war包方式发布web应用程序,又要使用JNDI数据源的话,要在你的web工程的META-INF文件夹下新建context.xml文件,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<Context>
    <ResourceLink global="jdbc/mysql" name="jdbc/mysql" type="javax.sql.DataSource"/>
</Context>
global:就是tomcat的server.xml中配置的全局数据源名称。
name:就是你的web项目中要用的那个那个数据源的名称:也就是jsp中写的那个mysqltest2名称;


7、在server.xml中添加context的方式:
直接在server.xml中的<Host></Host>中添加如下内容:

<Context path="/Pool" docBase="E:/apache-tomcat-6.0.16/webapps/Pool" reloadable="true">
          <ResourceLink global="jdbc/mysql" name="jdbc/mysql" type="javax.sql.DataSource" />
     </Context>
其中:path为应用名
     docBase 为应用路径

8、只需在tomcat_home\webapps\myapps\META-INF\context.xml中增加:
<?xml version='1.0' encoding='utf-8'?>
<Context>
<Resource name="jdbc/mysql"   
           auth="Container"
           type="javax.sql.DataSource"   
           driverClassName="com.mysql.jdbc.Driver"   
           url="jdbc:mysql://localhost:3306/wxl" 
           username="root"   
           password="root"   
           maxActive="100"   
           maxIdle="30"   
           maxWait="10000" />
</Context>

说明:这种配置需要告诉tomcat resource的内容,resource应用于什么地方


//========================================================
常见错误:
1,Name jdbc is not bound in this Context
2,Cannot create JDBC driver of class ” for connect URL ‘null’ conf localhost
原因:
大多数是因为配置了全局的resource,但没有link造成的。
解决:
加入link就行了。
分析:
看到上边这么多方法,是否感觉眼花缭乱,其实不要死记配置,按照原理分析一下就好了。
你需要的是告诉tomcat哪个应用如何连接数据库。
类型一的方式对应一个应用单独使用这个配置的情况
就是直接告诉tomcat”应用名” “连接数据库需要的参数”

类型二的方式对应多个应用共享一个配置的情况
这样先配置server.xml告诉tomcat全局范围的”连接数据库需要的参数”
然后映射,映射的时候
1,如果不知道”app name(应用名)”就只需要通过文件名来传递这个信息
2,如果”app name”都知道就只需要加入映射的内容
3,如果要配置成全局公用的,就不需要”app name”,本身放在tomcat的context.xml中
最后再次提醒一下:所有的配置必须放在<context></context>之间

 

<!--EndFragment-->

分享到:
评论

相关推荐

    jndi tomcat配置

    jndi在tomcat下conf文件加下的content.xml中的配置信息

    JNDI数据源配置(tomcat)

    "JNDI 数据源配置(tomcat)" JNDI(Java Naming and Directory Interface)是一种Java API,用于访问命名和目录服务。JNDI 数据源配置是 Java Web 应用程序中常用的数据库连接方式。Tomcat 是一个流行的 Java Web ...

    SpringMVC+JNDI+Tomcat配置数据源

    ### SpringMVC+JNDI+Tomcat配置数据源 #### 一、简介 在Java Web开发中,数据源(DataSource)是管理数据库连接的重要组件。SpringMVC框架结合Java Naming and Directory Interface (JNDI) 和Apache Tomcat服务器...

    tomcat配置jndi数据源

    Tomcat 配置 JNDI 数据源 Tomcat 是一个流行的 Java Web 服务器,JNDI(Java Naming and Directory Interface)是 Java 中的一种命名和目录接口规范。Tomcat 中的 JNDI 数据源是指将数据库连接信息注册到 JNDI ...

    intellij idea使用tomcat开发时自动部署jndi数据源

    在这个场景中,“intellij idea使用tomcat开发时自动部署jndi数据源”是一个重要的知识点,它涉及到如何在IDE中配置和管理数据库连接,以便于在应用运行时动态地查找和使用数据源。 JNDI(Java Naming and ...

    JNDI tomcat

    1. **配置Tomcat的JNDI**:在Tomcat的`server.xml`配置文件中,可以通过`GlobalNamingResources`元素定义全局资源,如数据源。这些资源可以在Web应用中通过JNDI查找获取。 2. **应用配置**:在Web应用的`web.xml`中...

    tomcat配置JNDI数据源

    【标题】:“Tomcat配置JNDI数据源” 【描述】:“在Tomcat服务器上配置JNDI数据源,特别是通过DBCP连接池的方式” 【标签】:“tomcat,配置,JNDI数据源” 【内容】:配置JNDI数据源在Java Web应用程序中是一个...

    Tomcat配置JNDI数据源的N种方法

    Tomcat配置JNDI数据源的N种方法

    eclipse+mysql+tomcat配置JNDI

    在Tomcat中,JNDI常用于配置数据库连接池,使得多个Web应用可以共享同一个数据库连接。 配置JNDI的步骤如下: 1. **安装与配置MySQL**: 首先确保你已经安装了MySQL数据库,并创建了所需的数据库和用户。你需要...

    tomcat6.0 配置jndi

    【标题】:“Tomcat6.0配置JNDI” 在Java Web开发中,Tomcat作为常用的Servlet容器,经常被用于部署和运行Java EE应用程序。JNDI(Java Naming and Directory Interface)是Java平台的一项服务,它允许应用程序通过...

    tomcat jndi 数据库配置方法

    tomcat jndi 数据库配置方法

    Tomcat6+spring+jndi配置数据源说明.docx

    Tomcat6+Spring+JNDI配置数据源说明 本文档主要介绍了Tomcat6+Spring+JNDI配置数据源的详细步骤和原理。数据源是一个池子,里面有若干个数据连接对象,当需要时就从里面拿一个使用,使用完毕就放回去,如果超过最大...

    在Tomcat配置JNDI数据源的三种方式

    在Tomcat配置JNDI数据源的三种方式

    Tomcat中JNDI原理

    在部署该应用时,管理员可以在Tomcat的配置文件中设置相应的JNDI条目: ```xml type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/mydb" username=...

    Tomcat JNDI配置

    Tomcat JNDI 配置 Tomcat JNDI 配置是 Java Web 应用程序中的一种常见配置,用于将数据库连接信息以 JNDI(Java Naming and Directory Interface)的形式存储在 Tomcat 服务器中,以便于应用程序可以通过 JNDI 来...

    tomcat配置jndi有全局配置和局部配置

    JNDI(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API。命名服务将名称和对象联系起来,使得我们可以用名称...本文档主要是tomcat配置jndi有全局配置和局部配置:

    JNDI写法tomcat配置

    ### JNDI与Tomcat配置详解 #### 一、引言 Java Naming and Directory Interface (JNDI) 是一种广泛使用的 Java 技术,用于访问和管理命名和目录服务。在 Web 应用开发中,JNDI 常被用来配置数据源,即数据库连接池...

    tomcat-jndi

    总结来说,Tomcat的JNDI功能提供了强大的资源管理和配置灵活性,通过解耦配置和代码,提高了系统的可扩展性和可维护性。理解并熟练运用Tomcat的JNDI机制,对于开发高质量、高可用性的Java Web应用至关重要。而`...

    Tomcat6配置JNDI出错

    在本文中,我们将深入探讨“Tomcat6配置JNDI出错”这一主题,这是一个常见的问题,很多开发者在搭建和配置Java企业级应用时可能会遇到。 JNDI,全称Java Naming and Directory Interface,是Java平台的一个标准接口...

    tomcat配置jndi

    **Tomcat配置JNDI详解** Java Naming and Directory Interface (JNDI) 是Java平台提供的一种标准服务,用于管理和查找应用程序中的资源,如数据源、邮件服务器等。在Tomcat应用服务器中,JNDI被用来注册和查找数据...

Global site tag (gtag.js) - Google Analytics