外部访问JNDI容器内的JDBC数据源

Jboss的数据源配置如下:

view plaincopy to clipboardprint?
<?xml version="1.0" encoding="UTF-8"?> 
<datasources> 
<local-tx-datasource> 
<jndi-name>oracleDS</jndi-name> 
<use-java-context>false</use-java-context> 
<connection-url>jdbc:oracle:thin:@xxx.xxxx.xxx.xxx:1521:xxxx</connection-url> 
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class> 
<user-name>dpd</user-name> 
<password>dpd</password> 
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name> 
<metadata> 
<type-mapping>Oracle10g</type-mapping> 
</metadata> 
</local-tx-datasource> 
</datasources> 
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>oracleDS</jndi-name>
<use-java-context>false</use-java-context>
<connection-url>jdbc:oracle:thin:@xxx.xxxx.xxx.xxx:1521:xxxx</connection-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<user-name>dpd</user-name>
<password>dpd</password>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
<metadata>
<type-mapping>Oracle10g</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>

关键处在于添加use-java-context元素,其它的与普通的连接池配置没有区别; 但是要注意, 加了这个选项后,在jboss内部就不能使用这个jndi对象了

测试代码:

view plaincopy to clipboardprint?
import java.sql.Connection;  
import java.sql.ResultSet;  
import java.sql.ResultSetMetaData;  
import java.sql.SQLException;  
import java.sql.Statement;  
import java.util.Hashtable;  
import javax.naming.Context;  
import javax.naming.InitialContext;  
import javax.naming.NamingException;  
public class TestJNDI {  
        private Context getInitialContext() throws NamingException {  
                Hashtable<String, String> environment = new Hashtable<String, String>();  
                environment.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");  
                //environment.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");  
                environment.put(Context.URL_PKG_PREFIXES, "org.jboss.naming.client ");  
                environment.put(Context.PROVIDER_URL, "jnp://127.0.0.1:1099");  
                return new InitialContext(environment);  
        }  
          
        public Connection getConnection(String dataSourceName) {  
                try {  
                        Context ctx = getInitialContext();  
                        javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup(dataSourceName);  
                        if(ds == null){  
                                return null;  
                        }  
                        return ds.getConnection();  
                } catch (Exception ex) {  
                        ex.printStackTrace();  
                }  
                return null;  
        }  
          
        /** 
        * @param args 
        */ 
        public static void main(String[] args) {  
                // TODO Auto-generated method stub  
                TestJNDI test = new TestJNDI();  
                Connection conn = test.getConnection("java:oracleDS");  
                if(conn != null){  
                        System.out.println("success");  
                        try {  
                                Statement stmt = conn.createStatement();  
                                ResultSet rs = stmt.executeQuery("select * from dtc_insurance_order where biz_order_id=1693");  
                                String result;  
                                ResultSetMetaData rsmd = rs.getMetaData();  
                                while(rs.next()){  
                                        for(int i = 1; i <= rsmd.getColumnCount(); i++)  
                                        System.out.println("column " + i + "=" + rs.getObject(i));  
                                }  
                        } catch (SQLException e) {  
                                // TODO Auto-generated catch block  
                                e.printStackTrace();  
                        }  
                        System.out.println("closed");  
                }else{  
                        System.out.println("failed");  
                }  
        }  
          

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class TestJNDI {
        private Context getInitialContext() throws NamingException {
                Hashtable<String, String> environment = new Hashtable<String, String>();
                environment.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
                //environment.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
                environment.put(Context.URL_PKG_PREFIXES, "org.jboss.naming.client ");
                environment.put(Context.PROVIDER_URL, "jnp://127.0.0.1:1099");
                return new InitialContext(environment);
        }
       
        public Connection getConnection(String dataSourceName) {
                try {
                        Context ctx = getInitialContext();
                        javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup(dataSourceName);
                        if(ds == null){
                                return null;
                        }
                        return ds.getConnection();
                } catch (Exception ex) {
                        ex.printStackTrace();
                }
                return null;
        }
       
        /**
        * @param args
        */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                TestJNDI test = new TestJNDI();
                Connection conn = test.getConnection("java:oracleDS");
                if(conn != null){
                        System.out.println("success");
                        try {
                                Statement stmt = conn.createStatement();
                                ResultSet rs = stmt.executeQuery("select * from dtc_insurance_order where biz_order_id=1693");
                                String result;
                                ResultSetMetaData rsmd = rs.getMetaData();
                                while(rs.next()){
                                        for(int i = 1; i <= rsmd.getColumnCount(); i++)
                                        System.out.println("column " + i + "=" + rs.getObject(i));
                                }
                        } catch (SQLException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }
                        System.out.println("closed");
                }else{
                        System.out.println("failed");
                }
        }
       
}

上面的代码需要加上jboss的客户端库,我也不知道具体是哪些,就把%JBOSS_HOME%/lib目录和%JBOSS_HOME%/server/default/lib目录下所有的包都加到工程里了, 如果这个代码跑在jboss里面当然就更加方便了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值