获得jboss数据源 <use-java-context>false</use-java-context>的问题
2013-03-11 11:26
477 查看
原文地址: 关于JBOSS数据源配置
<use-java-context>false</use-java-context>的问题
数据源定义文件**-ds.xml中,有个use-java-context属性,把它设为false的话,JNDIView里生成的数据源就会位于全局命名空间,没有java前缀了。
获得数据源的代码
获得数据源的代码
新建一个类 TestDS.java 运行,此时,它们不在一个JVM中
代码如下:运行,报异常
javax.naming.NoInitialContextException: Cannot instantiate class: org.jnp.interfaces.NamingContextFactory
添加 jboss-4.2.3.GA\client\jbossall-client.jar后即可运行。
<use-java-context>false</use-java-context>的问题
数据源定义文件**-ds.xml中,有个use-java-context属性,把它设为false的话,JNDIView里生成的数据源就会位于全局命名空间,没有java前缀了。
一、没有添加<use-java-context>false</use-java-context>
<local-tx-datasource> <jndi-name>platform</jndi-name> <connection-url>jdbc:oracle:thin:@59.65.233.199:1521:GIS</connection-url> <driver-class>oracle.jdbc.driver.OracleDriver</driver-class> <user-name>PLATFORM</user-name> <password>PLATFORM</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>
获得数据源的代码
public Connection getConnection() { Connection connection = null; try { Context ctx = new InitialContext();// 得到初始化上下文 DataSource ds = (DataSource) ctx.lookup("java:platform");// 这样查找数据源,不要lookup("platform"); connection = ds.getConnection(); } catch (SQLException e) { e.printStackTrace(); } catch (NamingException e) { e.printStackTrace(); } return connection; }
二、添加<use-java-context>false</use-java-context>
<jndi-name>flow</jndi-name> <use-java-context>false</use-java-context> <connection-url>jdbc:oracle:thin:@59.65.233.199:1521:GIS</connection-url> <driver-class>oracle.jdbc.driver.OracleDriver</driver-class> <user-name>FLOW</user-name> <password>FLOW</password> <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
获得数据源的代码
public Connection getConnection1() { Connection connection = null; try { Context ctx = new InitialContext(); DataSource ds = (DataSource) ctx.lookup("flow"); connection = ds.getConnection(); } catch (SQLException e) { e.printStackTrace(); } catch (NamingException e) { e.printStackTrace(); } return connection; }
三、如果持久层使用了EJB,对应的persistence.xml配置文件为:
<persistence> <persistence-unit name="test"> <jta-data-source>java:/platform</jta-data-source> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle9Dialect" /> <property name="com.arjuna.ats.jta.allowMultipleLastResources" value="true" /> <property name="hibernate.hbm2ddl.auto" value="update" /> </properties> </persistence-unit> <persistence-unit name="test1"> <jta-data-source>flow</jta-data-source> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle9Dialect" /> <property name="com.arjuna.ats.jta.allowMultipleLastResources" value="true" /> <property name="hibernate.hbm2ddl.auto" value="update" /> </properties> </persistence-unit> </persistence>
四、如果想跨JVM的话,需要有<use-java-context>false</use-java-context>,
这样做的好处就是解决了不在同一VM里导致的javax.naming.NameNotFoundException: *** not bound 异常。新建一个类 TestDS.java 运行,此时,它们不在一个JVM中
import java.sql.Connection; import java.sql.SQLException; import java.util.Properties; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.sql.DataSource; public class TestDS { public static void main(String[] args) { Properties prop = new Properties(); prop.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); prop.setProperty(Context.PROVIDER_URL, "localhost:1099"); InitialContext context = null; DataSource dataSource = null; try { context = new InitialContext(prop); //有<use-java-context>false</use-java-context> 在不同JVM可以访问,以下两种方式都可以 dataSource = (DataSource) context.lookup("flow"); dataSource = (DataSource) context.lookup("java:flow"); System.out.println(dataSource);// //没有<use-java-context>false</use-java-context> //报异常 javax.naming.NameNotFoundException: platform not bound dataSource = (DataSource) context.lookup("platform");//java:platform 也一样 System.out.println(dataSource); } catch (NamingException e) { e.printStackTrace(); } } }
代码如下:运行,报异常
javax.naming.NoInitialContextException: Cannot instantiate class: org.jnp.interfaces.NamingContextFactory
添加 jboss-4.2.3.GA\client\jbossall-client.jar后即可运行。
相关文章推荐
- 获得jboss数据源 <use-java-context>false</use-java-context>的问题
- Tomcat端口被占用解决方法: java.net.BindException: Address already in use: JVM_Bind <null>:8082
- 数字问题之二进制1数问题<Java实现>
- java日期格式化问题 <html:checkbox>
- 黑马程序员<java基础<多线程同步异步问题>>
- struts2的<s:iterator>标签 遇到的问题:java.lang.ClassCastException:cannot be cast to java.lang.String
- Address already in use: JVM_Bind <null>:8080 关于端口被占用的问题及解决方案
- java.net.BindException: Address already in use: JVM_Bind <null>:8080
- 【Java】ArrayList<String>转化为String数组问题
- 路径问题 解决 ${pageContext.request.contextPath} <%=request.getContextPath()%>
- <java>程序当前路径问题
- 数组问题之数组最值问题<Java实现>
- Caused by: java.lang.NoSuchMethodException: <init> [class android.content.Context, interface android
- java 基础类型对应的Object在+-><运算符中的问题
- 如何使用 BindingSource 绑定 ListBox,同时解决绑定 List<T> 后修改数据源不能同时刷新界面显示的问题
- jsp使用javabean<jsp:useBean>
- Java hashCode() 和 equals()的若干问题解答<转载自skywang12345>
- Caused by: java.lang.NoSuchMethodException: <init> [class android.content.Context, interface androi
- 关于&lt;context:property-placeholder&gt;多处使用的问题
- java实现<爬梯子>问题