zoukankan      html  css  js  c++  java
  • tomcat JNDI Resource 配置

    最近公司的项目慢慢开始向Maven项目迁移, 部分配置文件公共组也帮我们做了些改动,其中在spring的applicationContext.xml中看到了数据连接bean存在两个,一个是jndi 一个是datasource.对jndi的数据连接不上很熟悉, 所以就搜索了相关的资料,在此做一下笔记。

    在spring的applicationContext.xml文件中

    jndi的写法如下:

    <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
            <property name="jndiName">
                <value>java:comp/env/jdbc/b2b</value>
            </property>
        </bean>

    datasource的写法如下:

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
            destroy-method="close">
            <property name="driverClassName" value="com.sybase.jdbc3.jdbc.SybDriver" />
            <property name="url" value="jdbc:sybase:Tds:192.168.102.12:5000/test" />
            <property name="username" value="developtest" />
            <property name="password" value="1234567890" />
            <property name="maxIdle" value="1" />
            <property name="maxActive" value="3" />
            <property name="maxWait" value="10000" />
            <property name="logAbandoned" value="true" />
            <property name="removeAbandoned" value="true" />
            <property name="removeAbandonedTimeout" value="120" />
    </bean>

    上面使用datasource的写法,就直接配置好了数据源。而jndi的写法除此之外还需要在web项目中的web.xml中添加一个节点来申明资源的引用,web.xml如下:

    <web-app>
    ...
    <resource-ref>
        <description>b2bjoy Datasource</description>
        <res-ref-name>jdbc/b2b</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>
    ...
    </web-app>
    最后在tomcat的conf目录下的context.xml增加一个reource节点来开放这些资源给WEB应用程序。
    <Context>
      ...
      <Resource name="jdbc/b2b" auth="Container"
                type="javax.sql.DataSource"
                factory="org.apache.commons.dbcp.BasicDataSourceFactory"
                username="developtest" password="1234567890"
                driverClassName="net.sourceforge.jtds.jdbc.Driver"
                url="jdbc:jtds:sqlserver://testServer:1433/DB"
                maxActive="8" maxIdle="4"/>
      ...
    </Context>
    至此,将数据源切换成jndi模式,启动web项目,就能正常连接到数据源了,那么jndi配置是怎么回事,下面就来讲述一下.
    Tomcat 5.5 JNDI Resource 配置

    一、简介

    在Tomcat 5 中,每个WEB应用程序的初使化环境(InitialContext)可以配置于$CATALINA_HOME/conf/server.xml的<Context>节点中,也可以配置每个WEB应用程序环境(Context)于单独的XML文件中,如将每个WEB应用的配置放于$CATALINA_HOME/conf/Catalina/localhost目录下,名称可以为任意。

    Tomcat 5为整个服务维护一个独立的全局资源命名空间,它们被配置于$CATALINA_HOME/conf/server.xml的<GlobalNameingResources>节点,你可以通过使用<ResourceLink>节点开放这些资源给WEB应用程序。

    这些定义的资源,可以被定义于你当前的WEB应用的WEB应用布署描述(/WEB-INF/web.xml)文件中的以下节点使用:

    1. <env-entry> :环境实体(Environment entry),一个单值参数(a single-value parameter)可以用于配置应用程序如何操作。
    2. <resource-ref>:资源引用(Resource reference),典型的应用为JDBC DataSource、JavaMail Session,或者配置于Tomcat5中的自定义对象工厂。
    3. <resource-env-ref>:资源环境引用(Resource environment reference),增加于Servlet 2.4中的resource-ref校验,这种可以简化资源配置,不需要授权信息。

    InitialContext在WEB应用程序初使化的时候就被配置了,并且可以被WEB应用程序访问(只读的方式),所有配置的实体及资源,都放于JNDI命名空间的"java:comp/env"区。因此一个典型的资源访问,这里指对JDBC DataSource的访问。

    二、配置JNDI资源

    每个可访问的JNDI资源配置于<Context>节点的如下节点:

    • <Environment> - 为scalar environment实体配置名称及值,这些实体通过JNDI InitialContext开发给WEB应用程序(与在WEB应用布署描述文件(/WEB-INF/web.xml)中增加<env-entry>节点配置相同)。
    • <Resource> - 配置应用于WEB应用程序的资源名称及数据类型(与在WEB应用布署描述文件(/WEB-INF/web.xml)中增加<resource-ref>节点配置相同)。
    • <ResourceLink> - 为定义于全局JNDI环境中的资源增加链接,这些资源链访问定义于<Server>节点下的<GlobalNamingResources>的资源。
    • <Transaction> - 为在java:comp/UserTransaction中有效的初使化UserTransaction对象实例增加资源工厂。

    三、TOMCAT标准资源工厂

    Tomcat 5 包括一系列的标准资源工厂,它们可以为你的WEB应用程序提供服务,并且配置灵活(配置于$CATALINA_HOME/conf/server.xml),不需要修改WEB应用程序及布署描述。

    注意:在标准资源工厂中,只有"JDBC Data Source"及"User Transaction"工厂可以移植到其它非TOMCAT平台,其它的标准资源工厂,包括你编写的自定义资源工厂,都只可以在TOMCAT下运行,不可以移植到其它的平台。

    JDBC数据源

    1、安装JDBC驱动

    将JDBC驱动放于目录$CATALINA_HOME/common/lib

    2、/WEB-INF/web.xml增加配置

    <resource-ref>
      <description>JDBC数据源配置实例</description> 
      <res-ref-name>jdbc/TestDB</res-ref-name> 
      <res-type>javax.sql.DataSource </res-type> 
      <res-auth>Container</res-auth> 
    </resource-ref>

     3、配置TOMCAT资源工厂

    <Context ...> 
    ... 
    <Resource name="jdbc/TestDB" auth="Container" 
    type="javax.sql.DataSource" 
    factory="org.apache.commons.dbcp.BasicDataSourceFactory" 
    username="dbusername" password="dbpassword" 
    driverClassName="net.sourceforge.jtds.jdbc.Driver" 
    url="jdbc:jtds:sqlserver://testServer:1433/DB" 
    maxActive="8" maxIdle="4"/> 
    ... 
    </Context> 

     相关属性说明:

    1. name:JDBC数据源的名称。
    2. auth:
    3. type:当前配置资源的类别。
    4. factory:数据源工厂,默认为"org.apache.commons.dbcp.BasicDataSourceFactory"。
    5. driverClassName - 驱动的全路径类名。
    6. maxActive - 当前数据源支持的最大并发数。
    7. maxIdle - 连接池中保留最大数目的闲置连接数。
    8. maxWait - 当连接池中无连接时的最大等待毫秒数,在等当前设置时间过后还无连接则抛出异常。
    9. username - 访问数据库的用户名
    10. password - 访问数据库的密码
    11. url - JDBC驱动的连接字符串
    12. validationQuery - 在返回应用之前,用于校验当前连接是否有效的SQL语句,如果指定了,当前查询语句至少要返回一条记录。

    4、实例JAVA程序

    Context initCtx = new InitialContext(); 
    Context envCtx = (Context) initCtx.lookup("java:comp/env"); 
    DataSource ds = (DataSource) 
    envCtx.lookup("jdbc/TestDB"); 
    Connection conn = ds.getConnection(); 
    ... use this connection to access the database ... 
    conn.close(); 

     JavaMail Session

    Tomcat 5 包括一个标准的、用于创建javax.mail.Session session实例的资源工厂,该工厂将会自动连接配置于server.xml中的SMTP服务器。在这种情况下,具体的应用完全不用去管email服务的配置环境,只需要在需要的时候,做简单的请求、获取预配置的session。

    1、安装JAR包

    点击这里下载JavaMail的JAR包,JavaMail依赖于Java Activation Framework,因而也需要下载

    2、在web.xml配置

    <resource-ref>
    <description>JavaMail配置</description>
    <res-ref-name>mail/Session</res-ref-name>
    <res-type>javax.mail.Session</res-type>
    <res-auth>Container</res-auth>
    </resource-ref>

     3、配置$CATALINA_HOME/conf/server.xml

    <Context ...>
    ...
    <Resource name="mail/Session" auth="Container"
    type="javax.mail.Session"
    mail.smtp.host="localhost"/>
    ...
    </Context>

     注:默认的邮件服务端口为25,如果不是,则需要修改mail.smtp.host属性为指定的主机,如mail.smtp.host="localhost:26"。

    4、JAVA示例程序

    ......
    Context initCtx = new InitialContext();
    Context envCtx = (Context) initCtx.lookup("java:comp/env");
    Session session = (Session) envCtx.lookup("mail/Session");
    Message message = new MimeMessage(session);
    message.setFrom(new InternetAddress(request.getParameter("from"));
    InternetAddress to[] = new InternetAddress[1];
    to[0] = new InternetAddress(request.getParameter("to"));
    message.setRecipients(Message.RecipientType.TO, to);
    message.setSubject(request.getParameter("subject"));
    message.setContent(request.getParameter("content"), "text/plain");
    Transport.send(message);
    ......

     以上简述转自:http://blog.csdn.net/fenglibing/article/details/4528512

  • 相关阅读:
    BlogEngine.Net
    加速Web开发的9款知名HTML5框架
    个人论坛博客的代码
    Android客户端调用Asp.net的WebService
    前端总结数据结构与算法基础
    node知识点及第三方模块
    消息轮播
    el-date-picker 组件时间格式化方式
    Vue+Element前端导入导出Excel
    vue单元测试
  • 原文地址:https://www.cnblogs.com/_popc/p/3957605.html
Copyright © 2011-2022 走看看