KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jfox > jdbc > datasource > DataSourceObjectFactory


1 /* JFox, the OpenSource J2EE Application Server
2  *
3  * Distributable under GNU LGPL license by gun.org
4  * more details please visit http://www.huihoo.org/jfox
5  */

6
7 package org.jfox.jdbc.datasource;
8
9 import java.util.Hashtable JavaDoc;
10 import java.util.Map JavaDoc;
11 import java.util.WeakHashMap JavaDoc;
12 import javax.naming.Context JavaDoc;
13 import javax.naming.Name JavaDoc;
14 import javax.naming.Reference JavaDoc;
15 import javax.naming.spi.ObjectFactory JavaDoc;
16
17 /**
18  * @author <a HREF="mailto:young_yy@hotmail.com">Young Yang</a>
19  */

20
21 public class DataSourceObjectFactory implements ObjectFactory JavaDoc {
22
23     /**
24      * remember datasources have looked up
25      * if lookup twice, just return the origin
26      * use WeakHashMap, if the datasource have destroyed, will automatic remove from the Map by GC
27      */

28     private static Map JavaDoc dataSources = new WeakHashMap JavaDoc();
29
30     /**
31      * Method that inherited from ObjectFactory.
32      *
33      * @param obj
34      * @param name
35      * @param nameCtx
36      * @param environment
37      * @return
38      * @throws Exception
39      */

40     //TODO: use dsName to identity datasource
41

42     public synchronized Object JavaDoc getObjectInstance(Object JavaDoc obj, Name JavaDoc name, Context JavaDoc nameCtx, Hashtable JavaDoc environment) throws Exception JavaDoc {
43         Object JavaDoc result = null;
44         Reference JavaDoc ref = (Reference JavaDoc) obj;
45         if(ref.getClassName().equals(PoolDataSource.class.getName())) {
46             String JavaDoc _dsName = (String JavaDoc) ref.get("dsName").getContent();
47             String JavaDoc _dbDriver = (String JavaDoc) ref.get("dbDriver").getContent();
48             String JavaDoc _dbURL = (String JavaDoc) ref.get("dbURL").getContent();
49             String JavaDoc _user = (String JavaDoc) ref.get("user").getContent();
50             String JavaDoc _password = (String JavaDoc) ref.get("password").getContent();
51
52             if(dataSources.containsKey(_dsName)) {
53                 return dataSources.get(_dsName);
54             }
55             else {
56                 int initNum = Integer.parseInt((String JavaDoc) ref.get("initNum").getContent());
57                 int maxRest = Integer.parseInt((String JavaDoc) ref.get("maxRest").getContent());
58                 PoolDataSource pds = new PoolDataSource(_dsName, _dbDriver, _dbURL, _user, _password);
59                 pds.setInitNum(initNum);
60                 pds.setMaxRest(maxRest);
61                 pds.init();
62                 dataSources.put(_dsName, pds);
63                 result = pds;
64             }
65         }
66         return result;
67     }
68
69     static void removeDataSource(String JavaDoc dsName) {
70         dataSources.remove(dsName);
71     }
72
73     public static void main(String JavaDoc[] args) {
74
75     }
76 }
Popular Tags