其实这个问题可以归跟到只是一个JNDI查找时名字的问题。但是作用却不一样,一般来说,如果想跨VM的话,需要修改为<use-java-context>false</use-java-context>。具体的原因可以看:
http://tomrose.iteye.com/blog/197368 这个帖子。
比如有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>从配置文件里去掉了。感觉这到清爽。
分享到:
相关推荐
<use-java-context>false</use-java-context> <connection-url>jdbc:oracle:thin:@localhost:1521:orcl</connection-url> <driver-class>oracle.jdbc.driver.OracleDriver</driver-class> <user-name>root</user...
在JBoss中配置MySQL数据源是开发Java EE应用程序时的重要步骤,这允许应用与数据库进行交互。下面将详细介绍如何在JBoss 7.1.1中配置MySQL数据源。 首先,我们需要准备MySQL数据库的相关信息,包括数据库URL、...
<datasource jndi-name="java:/MySqlDS" pool-name="MySqlDS" enabled="true" use-java-context="true"> <connection-url>jdbc:mysql://localhost:3306/gg</connection-url> <driver>mysql</driver> <pool> ...
<datasource jndi-name="java:jboss/datasources/OracleDS" pool-name="OracleDS" enabled="true" use-java-context="true"> <connection-url>jdbc:oracle:thin:@your-oracle-host:port/service_name</connection-...
<datasource jndi-name="java:jboss/datasources/OracleDS" pool-name="OracleDS" enabled="true" use-java-context="true"> <connection-url>jdbc:oracle:thin:@//your-oracle-host:port/service-name</...
<datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true"> <connection-url>jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</...
<datasource jndi-name="java:jboss/datasources/MySQLDS" pool-name="MySQLDS" enabled="true" use-java-context="true"> <connection-url>jdbc:mysql://localhost:3306/mydatabase?useSSL=false&serverTime...
在Java代码中使用JBoss的数据源与Tomcat类似: ```java import javax.naming.Context; import javax.naming.InitialContext; import javax.sql.DataSource; import java.sql.Connection; public class ...
<datasource jndi-name="java:jboss/datasources/OracleDS" pool-name="OracleDS" enabled="true" use-java-context="true"> <connection-url>jdbc:oracle:thin:@localhost:1521:ORCL</connection-url> <driver-...
<datasource jndi-name="java:jboss/datasources/MySqlDS" pool-name="MySqlDS" enabled="true" use-java-context="true"> <connection-url>jdbc:mysql://localhost:3306/mydb</connection-url> <driver-class>...
<data-source jndi-name="java:jboss/datasources/TeradataDS" pool-name="TeradataDS" enabled="true" use-java-context="true"> <connection-url>jdbc:teradata://your_db_server/DATABASE=your_database</...
<use-java-context>false</use-java-context> <connection-url>jdbc:mysql://localhost:3306/lab7</connection-url> <driver-class>com.mysql.jdbc.Driver</driver-class> <user-name>root</user-name> ...
<datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true"> <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</...
-- 数据源的配置 //--> 3. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 4. destroy-method="close"> 5. <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver...