结合最近两天在网上看的各种帖子,昨天自己实际试了下,下面以问题的方式,对自己之前的困惑做个回答。

首先说一下,要用到的几个文件。

1)Jboss数据源配置文件,这儿是oracle数据源,数据源后缀名必须以-ds.xml结束,放到部署目录下。

<?xml version="1.0" encoding="UTF-8"?>

<datasources>
<local-tx-datasource>
<jndi-name>jdbc/asap002</jndi-name>
<connection-url>jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(LOAD_BALANCE=off)(ADDRESS=(PROTOCOL=TCP)(HOST=xx.xx.xx.xx)(PORT=1523))(ADDRESS=(PROTOCOL=TCP)(HOST=xx.xx.xx.xx)(PORT=1523))) (CONNECT_DATA=(SERVICE_NAME=asap002)))</connection-url>
<use-java-context>true</use-java-context>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<min-pool-size>5</min-pool-size>
<max-pool-size>20</max-pool-size>
<user-name>asap002</user-name>
<password>xxx</password>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
<metadata>
<type-mapping>Oracle9i</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>

本文关注重点<jndi-name>jdbc/asap002</jndi-name>和<use-java-context>true</use-java-context>两个节点。为后续叙述方便,jndi-name的值(这里是jdbc/asap002),我们称为ds-jndi-name。use-java-context的值(这里是true),我们称为use-java-context。

2)第二文件是jboss-web.xml文件,同web.xml一同放在web工程的WEB-INF目录下。

<!DOCTYPE jboss-web PUBLIC
"-//JBoss//DTD Web Application 5.0//EN"
"http://www.jboss.org/j2ee/dtd/jboss-web_5_0.dtd"> <jboss-web>
<class-loading java2ClassLoadingCompliance='false'>
<loader-repository>
com.example:loader=react
<loader-repository-config>
java2ParentDelegaton=false
</loader-repository-config>
</loader-repository>
</class-loading> <resource-ref>
<res-ref-name>jdbc/asap002</res-ref-name>
<jndi-name>java:jdbc/asap002</jndi-name>
</resource-ref>
</jboss-web>

这儿重点关注 <resource-ref>    <res-ref-name>jdbc/asap002</res-ref-name>   <jndi-name>java:jdbc/asap002</jndi-name>  </resource-ref>节点。<resource-ref>节点我们称为jboss-resource-ref;res-ref-name的值(jdbc/asap002)我们称为jboss-res-ref-name;jndi-name的值(java:jdbc/asap002)我们称为jboss-jndi-name。

3)第三文件是web.xml文件。

<?xml version="1.0"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>TumsQRevceive</display-name> <servlet>
<servlet-name>TumsQRevceive</servlet-name>
<servlet-class>com.travelsky.react.servlet.TumsReceiveServlet</servlet-class>
<load-on-startup>99</load-on-startup>
</servlet> <servlet>
<servlet-name>ForRequestReceive</servlet-name>
<servlet-class>com.travelsky.react.servlet.ForRequestReceive</servlet-class>
</servlet> <servlet>
<servlet-name>First</servlet-name>
<servlet-class>test.servlet.First</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>ForRequestReceive</servlet-name>
<url-pattern>/ForRequestReceive</url-pattern>
</servlet-mapping> <servlet-mapping>
<servlet-name>First</servlet-name>
<url-pattern>/First</url-pattern>
</servlet-mapping> <welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list> <resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/asap002</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>

这个文件重点关注<resource-ref>节点及其子节点<res-ref-name>jdbc/asap002</res-ref-name>。<resource-ref>节点我们称为web-resource-ref;res-ref-name的值(jdbc/asap002)我们称为web-res-ref-name。

4)因为使用Hibernate连接数据库,第四个文件是Hibernate主配置文件Hibernate.cfg.xml。

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration>
<session-factory>
<property name="hibernate.connection.datasource">
java:comp/env/jdbc/asap002
</property>
<property name="dialect">
org.hibernate.dialect.Oracle9Dialect
</property>
<property name="hibernate.show_sql">true</property>
<mapping resource="tables/EspBaseServiceauth.hbm.xml" />
<mapping resource="tables/EspBaseUser.hbm.xml" />
<mapping resource="tables/EspBaseConfig.hbm.xml" />
<mapping resource="tables/EspSeatFare.hbm.xml" />
<mapping resource="tables/EspBaseAirportcity.hbm.xml" />
<mapping resource="tables/EspBaseOptionalsubcodes.hbm.xml" />
<mapping resource="tables/EspBaseIbeconfig.hbm.xml" />
<mapping resource="tables/EspGdsbsprevaOffice.hbm.xml" />
<mapping resource="tables/EspBaseAirline.hbm.xml" />
</session-factory>
</hibernate-configuration>

这个文件重点关注<property name="hibernate.connection.datasource">java:comp/env/jdbc/asap002</property>这个节点。我们称属性值java:comp/env/jdbc/asap002为hibernate.connection.datasource。

下面列出我之前的疑问并解答,相信有些也是其他人的困惑。

1)ds-jndi-name和jboss-jndi-name有什么关系?

这取决于use-java-context,如果use-java-context=false,也就是不使用java上下文,两者应该配成相同值;如果use-java-context=true,jboss-jndi-name应该在ds-jndi-name前面加‘java:’,即jboss-jndi-name=java:ds-jndi-name.对于数据源,建议将use-java-context配成true。

2)jboss-resource-ref和web-resource-ref有什么关系?

必须一样。而且当web-resource-ref存在时,jboss-resource-ref必须存在;

当jboss-resource-ref存在时,web-resource-ref可以省略。

3)web-resource-ref和hibernate.connection.datasource有什么关系?

这取决于hibernate采用JNDI(Java Naming and Directory Interface)还是ENC(Enterprise Naming Context)查找数据源。

如果直接采用JNDI,hibernate.connection.datasource应该等于数据源JNDI名称,即jboss-jndi-name,此时jboss-web.xml中的jboss-resource-ref节点和web.xml中的web-resource-ref节点可以同时省略;

如果采用ENC,hibernate.connection.datasource应该等于java:comp/env/web-resource-ref.此时,jboss-web.xml中的jboss-resource-ref节点必须存在,而web-resource-ref节点可以省略。

上面两种方式都可以成功使用数据源,建议采用ENC,因为这样应用不会直接依赖JNDI名字,移植性更好,比如将应用移植到其他服务器时,如果数据源JNDI名字有改变,仅需要在jboss-web.xml中更改,而不需要修改hibernate配置文件或代码。另外,像Tomcat不支持JNDI的中间件,只能采用ENC方式查找。

Jboss JNDI ENC 数据源的更多相关文章

  1. tomcat配置JNDI获取数据源

    各个web工程可以通过工程内的xml文件配置访问数据库的数据源,这样的配置是各个工程私有的.基于JNDI为tomcat配置数据源,则可以做成全局的,各工程只需要通过便签引用数据源即可. 1.需要将数据 ...

  2. JNDI数据源(在Tomcat下配置JNDI多数据源实例)

    一,添加数据库驱动包加入classpath. 这里我用到了oracle和mysql.所以由两个jar包:ojdbc14.jar和mysql-connector-java-5.1.13-bin.jar. ...

  3. jboss jndi配置部分参数详解

    使用的是jboss7.1.1, jndi的配置在$JBOSS_HOME/standalone/configuration/standalone.xml中进行配置.配置jndi时有很多参数,解释下用到的 ...

  4. [JBoss] JNDI与JBossNS

    JNDI的作用 JNDI是 Java 命名与目录接口(Java Naming and Directory Interface). 随着分布式应用的发展,远程访问对象访问成为常用的方法.虽然说通过Soc ...

  5. Jboss配置之数据源密码配置密文--EncryptingDataSourcePasswords

    local-tx-datasource:最常用的数据源配置,该连接池的连接管理器是LocalTxConnectionManager,只支持本地事务,不适合做分布式事务.以mssql为例如下:如果密码按 ...

  6. Tomcat8.0配置JNDI多数据源

    jndi配置 :此种配置需要在Tomcat的server.xml中和context.xml中配置数据源,在项目中引用. 需要在tomcat下加入数据库连接的jar包,相关包(ojdbc14;c3p0数 ...

  7. jndi配置数据源

    jndi(java Naming and DirectoryInterface,java命名和目录接口)是一组在Java应用中访问命名和目录服务的API. 命名服务将名称和对象联系起来,使得我们可以用 ...

  8. 在tomcat中用jndi配置数据源启动java web程序

    1.在web.xml中添加: <resource-ref>    <res-ref-name>jdbc/MTSDB</res-ref-name>    <re ...

  9. JNDI 配置:JBoss + MySQL

    一.JNDI 名词解释 JNDI 是Java 命名和目录接口(Java Naming and Directory Interface,JNDI)的简称.从一开始就一直是 Java 2 平台企业版(JE ...

随机推荐

  1. CentOS7 添加新用户并授权 root 权限

    参考文章:CentOS 7中添加一个新用户并授权 # root 用户操作 $ 普通用户操作 创建用户 # adduser USERNAME # passwd USERNAME (输入密码) 授权 ro ...

  2. qt03 QString和QByteArray相互转换

    QString str("hello");   QByteArray bytes = str.toUtf8(); // QString转QByteArray方法1       QS ...

  3. php内置函数分析之array_fill_keys()

    PHP_FUNCTION(array_fill_keys) { zval *keys, *val, *entry; if (zend_parse_parameters(ZEND_NUM_ARGS(), ...

  4. [CF1208D] Restore Permutation

    传送门 题意:有一个长为\(n\)的排列\(p\),设\(S_i=\sum_{j=1}^{i-1}p_j\cdot[p_j<p_i]\),给出\(S\),要求还原出\(p\).保证有解,\(n\ ...

  5. 谷歌浏览器遇到js报错自动进行断点调试,如何关闭

    转载于csdn 附地址 http://blog.csdn.net/microcosmv/article/details/60793882 留备用.

  6. Quartz常规操作

    原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11899532.html Project Directory Maven Dependency < ...

  7. iOS Core Image-----十行代码实现微信朋友圈模糊效果

    昨天下午微信的朋友圈着实火了一把,在这之后好多程序员都通过抓包工具看到了原图,但是我却在想,网上说是在移动前端做到的那是怎么做到的呢,经过一些学习,终于掌握了一些Core Image的知识,做出了相应 ...

  8. 开发工具Intellij IDEA:常用快捷键

    重命名:shift + F6 查看Javadoc/详情:ctrl + Q 查找接口的实现类:ctrl + alt + B format代码:ctrl + alt + L 全局查询:ctrl + shi ...

  9. #1122 JSP动作元素

    JSP动作元素 与JSP指令元素不同的是,JSP动作元素在请求处理阶段起作用.JSP动作元素是用XML语法写成的. 利用JSP动作可以动态地插入文件.重用JavaBean组件.把用户重定向到另外的页面 ...

  10. [CSP-S模拟测试]:集合论(模拟)

    题目传送门(内部题73) 输入格式 输入文件$jihe.in$ 第一行一个整数$m$,表示操作的次数. 接下来$m$行,每行描述一个操作. 每行的开始都是一个数字,$1,2,3,4$依次代表$unio ...