zoukankan      html  css  js  c++  java
  • 获得jboss数据源 <usejavacontext>false</usejavacontext>的问题 小强斋

    原文地址: 关于JBOSS数据源配置 <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后即可运行。
     

     

  • 相关阅读:
    【翻译】让你的网站飞起来
    理解ASP.NET MVC中的模型绑定
    【转载】创建定制ASP.NET MVC视图引擎
    修改STM32主频
    Cortex系列ARM核心及体系结构介绍
    递归
    NFD模拟兴趣包的转发
    NX 笔记
    MicroPython 8266 配置
    Python JSON操作
  • 原文地址:https://www.cnblogs.com/xiaoqiangzhaitai/p/5637405.html
Copyright © 2011-2022 走看看