关于JBOSS数据源配置 <use-java-context>false</use-java-context>的问题

其实这个问题可以归跟到只是一个JNDI查找时名字的问题。但是作用却不一样,一般来说,如果想跨VM的话,需要修改为<use-java-context>false</use-java-context>。具体的原因可以看:[url]http://tomrose.iteye.com/blog/197368[/url] 这个帖子。

比如有XML配置:

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


<datasources>
<local-tx-datasource>
<jndi-name>MySqlDS</jndi-name>
<connection-url>jdbc:mysql://localhost:3306/openstarbbs</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>root</user-name>
<password>sa</password>
<use-java-context>false</use-java-context>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
<metadata>
<type-mapping>mySQL</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>


很明显,我们添加了<use-java-context>false</use-java-context>。关于<use-java-context>false</use-java-context>的文档说明,自己GOOGLE一下就OK。

只要配置了<use-java-context>false</use-java-context>。我们使用JNDI查找就要这样去寻
找配置在JBOSS里的JNDI数据源:

Context ctx = new InitialContext(); //得到初始化上下文   
Object obj = ctx.lookup("MySqlDS");//这样查找数据源,不要 lookup("java:MySqlDS");


这样做的好处就是解决了不在同一VM里导致的javax.naming.NameNotFoundException: MySqlDS not bound 异常。

当然,包括所有依赖于JBOSS里JNDI数据源的所有BEAN都要改成lookup("MySqlDS")。如果DAO层使用了@PersistenceContext注解进行注入,那么需求该改该EJB组件的persistence.xml配置文件,改成:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">

<persistence-unit name="OpenStarBBS" transaction-type="JTA">
<jta-data-source>MySqlDS</jta-data-source>
<properties>
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
<property name="showSql" value="true"/>
</properties>

</persistence-unit>

</persistence>


主要就是修改:<jta-data-source>MySqlDS</jta-data-source>。


如果不配置<use-java-context>false</use-java-context>,我们需要:

Context ctx = new InitialContext(); //得到初始化上下文   
Object obj = ctx.lookup("java:MySqlDS");


而该EJB组件的persistence.xml配置文件为:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">

<persistence-unit name="OpenStarBBS" transaction-type="JTA">
<jta-data-source>java:MySqlDS</jta-data-source>
<properties>
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
<property name="showSql" value="true"/>
</properties>

</persistence-unit>

</persistence>


这样做之后只能在同一VM里lookup到MySqlDS数据源JNDI。

我一直在想,需要把数据源暴露开么?一般EJB应用是会话BEAN发布一个远程BEAN,之后展现层在通过这个BEAN取到数据,需要在展现层里写访问数据源的代码吗?所以,最后我又把<use-java-context>false</use-java-context>从配置文件里去掉了。感觉这到清爽。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值