`

轻量级JNDI数据源创建

    博客分类:
  • Java
阅读更多

      程序中手工创建JNDI数据源的代码如下:

java 代码
  1. //创建JNDI DataSource,原文见 http://dev2dev.bea.com.cn/bbsdoc/20060831320.html   
  2. private static void setDataSource() throws NamingException{   
  3.     if(ic==null){   
  4.         //Create initial context   
  5.         System.setProperty(Context.INITIAL_CONTEXT_FACTORY,"org.apache.naming.java.javaURLContextFactory");   
  6.         System.setProperty(Context.URL_PKG_PREFIXES,"org.apache.naming");   
  7.            
  8.         ic = new InitialContext();   
  9.   
  10.         // Construct BasicDataSource reference   
  11.         Reference ref = new Reference("javax.sql.DataSource","org.apache.commons.dbcp.BasicDataSourceFactory"null);   
  12.         ref.add(new StringRefAddr("driverClassName",SysParas.getPara("driverClassName")));   
  13.         ref.add(new StringRefAddr("url",SysParas.getPara("url")));   
  14.         ref.add(new StringRefAddr("username", SysParas.getPara("username")));   
  15.         ref.add(new StringRefAddr("password", SysParas.getPara("password")));   
  16.         ic.rebind(SysParas.getPara("jndiDs"), ref);   
  17.     }   
  18.   
  19. }   
  20.   
  21. //创建Connection   
  22. public static Connection testConnection() throws NamingException {   
  23.     setDataSource();   
  24.     Connection con = null;   
  25.     try {   
  26.         Context initCtx = new InitialContext();   
  27.         DataSource ds = (DataSource) initCtx.lookup(SysParas.getPara("jndiDs"));   
  28.         con = ds.getConnection();      
  29.     } catch (Exception e) {   
  30.         e.printStackTrace();   
  31.     }   
  32.     return con;   
  33. }  
xml 代码
  1. <?xml version="1.0" encoding="GBK"?>  
  2. <sys_para>  
  3.   <!-- 系统参数配置文件 -->  
  4.   <para>       
  5.     <item code="driverClassName"     value="com.microsoft.jdbc.sqlserver.SQLServerDriver"  description=""/>  
  6.     <item code="url"     value="jdbc:microsoft:sqlserver://192.168.2.18;databasename=ewebsafety;SelectMethod=cursor"  description=""/>  
  7.     <item code="username"    value="sa"  description=""/>  
  8.     <item code="password"    value="eweb"  description=""/>  
  9.     <item code="jndiDs"  value="safe"  description="数据源名称"/>  
  10.   </para>  
  11. </sys_para>  
java 代码
  1. /**  
  2.  * @author HuangYong  
  3.  * To change the template for this generated type comment go to  
  4.  * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments  
  5.  */  
  6. public class SysParas {   
  7.   
  8.        
  9.     private static HashMap prop;   
  10.     private static long lastLoadTime;   
  11.     private static long interval = 1000 * 100;   
  12.        
  13.        
  14.     /**  
  15.      * 读取配置文件参数  
  16.      * @param paras  
  17.      * @return  
  18.      * @throws Exception  
  19.      */  
  20.     public static synchronized String getPara( String paras )  throws IllegalArgumentException {   
  21.         if( paras == null || paras.trim().length()==0 ){   
  22.             thrownew IllegalArgumentException ( "Parameter's value invalid." ) );   
  23.         }   
  24.            
  25.         long currentTime = System.currentTimeMillis();   
  26.         if( (prop == null) || (currentTime-lastLoadTime)>interval ){   
  27.             reloadDom();   
  28.         }   
  29.            
  30.         Object obj = prop.get( paras );   
  31.         if( obj != null ){   
  32.             //System.out.println(paras + " = "+(String)obj);   
  33.             return( (String)obj );   
  34.         }    
  35.         returnnull );   
  36.            
  37.     }   
  38.        
  39.     private static synchronized void reloadDom() {   
  40.            
  41.         if( prop == null ){   
  42.             prop = new HashMap();   
  43.         }   
  44.                        
  45.         SAXBuilder builder = new SAXBuilder();   
  46.         Document read_doc = null;   
  47.         try {   
  48.             ClassLoader classLoader = Thread.currentThread().getContextClassLoader();   
  49.             InputStream in = classLoader.getResourceAsStream("sysConfig.xml");   
  50.             read_doc = builder.build(in);   
  51.         } catch (FileNotFoundException e) {   
  52.             e.printStackTrace();   
  53.         } catch (JDOMException e) {   
  54.             e.printStackTrace();   
  55.         } catch (IOException e) {   
  56.             e.printStackTrace();   
  57.         }   
  58.            
  59.         Element rootElement = read_doc.getRootElement();   
  60.         List list = rootElement.getChildren("para");   
  61.         for (Iterator i = list.iterator(); i.hasNext();) {   
  62.             Element current = (Element) i.next();   
  63.             List item = current.getChildren("item");   
  64.             for (Iterator j = item.iterator(); j.hasNext();) {   
  65.                 Element init = (Element) j.next();   
  66.                 Attribute code = init.getAttribute("code");                    
  67.                 Attribute value = init.getAttribute("value");   
  68.                 prop.put(code.getValue(),value.getValue());   
  69.             }              
  70.         }   
  71.         System.out.println("reading sysConfig.xml successfully...");   
  72.         lastLoadTime = System.currentTimeMillis();   
  73.            
  74.     }   
  75.        
  76.     public static void main(String [] args){   
  77.         System.out.println(SysParas.getPara("uploadSerialNo"));   
  78.     }   
  79.        
  80. }  
分享到:
评论

相关推荐

    JAVA上百实例源码以及开源项目源代码

    Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个...

    java源码包---java 源码 大量 实例

    6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

     本书是《轻量级java ee企业应用实战》的姊妹篇,《轻量级java ee企业应用实战》主要介绍以spring+hibernate为基础的java ee应用;本书则主要介绍以ejb 3+jpa为基础的java ee应用。ejb 3、jpa规范都属于sun公司所...

    Spring面试题

    4. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。 2. Hibernate是如何延迟加载? 1. Hibernate2延迟加载实现:a)实体对象 b)集合...

    JAVA上百实例源码以及开源项目

    6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...

    java源码包2

    6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...

    java源码包3

    6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...

    java源码包4

    6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个...

    EJB3.0实例教程

    6.2 JBOSS数据源的配置.................................................................................................................................................36 6.2.1 MySql数据源的配置...........

Global site tag (gtag.js) - Google Analytics