關於JBOSS數據源配置 false的問題

其實這個問題可以歸跟到只是一個JNDI查找時名字的問題。但是作用卻不一樣,一般來說,如果想跨VM的話,需要修改爲false。具體的原因可以看:[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>從配置文件裏去掉了。感覺這到清爽。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章