DataSourceFactory.java

00001 
00027 package org.objectweb.jonas.dbm;
00028 
00029 import java.util.Hashtable;
00030 
00031 import javax.naming.Context;
00032 import javax.naming.Name;
00033 import javax.naming.Reference;
00034 import javax.naming.spi.ObjectFactory;
00035 
00036 import org.objectweb.jonas.common.Log;
00037 import org.objectweb.util.monolog.api.BasicLevel;
00038 import org.objectweb.util.monolog.api.Logger;
00039 
00046 public class DataSourceFactory implements ObjectFactory {
00047 
00048     static private Logger logger = null;
00049 
00050     public Object getObjectInstance(Object refObj, Name name, Context nameCtx, Hashtable env) throws Exception {
00051 
00052         Reference ref = (Reference) refObj;
00053         String clname = ref.getClassName();
00054         if (logger == null) {
00055             logger = Log.getLogger(Log.JONAS_DBM_PREFIX);
00056         }
00057         logger.log(BasicLevel.DEBUG, "");
00058 
00059         // Old fashioned Connection Manager
00060         if (clname.equals("org.objectweb.jonas.dbm.ConnectionManager")) {
00061             String dsname = (String)ref.get("datasource.name").getContent();
00062             ConnectionManager ds = ConnectionManager.getConnectionManager(dsname);
00063             if (ds == null) {
00064                 // The DataSource was not in this JOnAS Server: Create it.
00065                 logger.log(BasicLevel.DEBUG, "Creating a new Connection Manager for "+dsname);
00066                 try {
00067                     String jBase = System.getProperty("jonas.base");
00068                     if (jBase == null) {
00069                         //TODO : must be removed. A client can lookup a datasource without modifications
00070                         // pure client case
00071                         ds = new ConnectionManager(true);
00072                         ds.setDSName(dsname);
00073                         ds.setUrl((String)ref.get("datasource.url").getContent());
00074                         ds.setClassName((String)ref.get("datasource.classname").getContent());
00075                         ds.setUserName((String)ref.get("datasource.username").getContent());
00076                         ds.setPassword((String)ref.get("datasource.password").getContent());
00077                         return ds;
00078                     }
00079                     //build a new datasource for another server
00080                     ds = new ConnectionManager();
00081                     ds.setDSName(dsname);
00082                     ds.setUrl((String)ref.get("datasource.url").getContent());
00083                     ds.setClassName((String)ref.get("datasource.classname").getContent());
00084                     ds.setUserName((String)ref.get("datasource.username").getContent());
00085                     ds.setPassword((String)ref.get("datasource.password").getContent());
00086                     ds.setTransactionIsolation((String)ref.get("datasource.isolationlevel").getContent());
00087                     ds.setMapperName((String)ref.get("datasource.mapper").getContent());
00088                     ds.poolConfigure((String)ref.get("connchecklevel").getContent(),
00089                                      (String)ref.get("connmaxage").getContent(),
00090                                      (String)ref.get("maxopentime").getContent(),
00091                                      (String)ref.get("connteststmt").getContent(),
00092                                      (String)ref.get("minconpool").getContent(),
00093                                      (String)ref.get("maxconpool").getContent(),
00094                                      (String)ref.get("maxwaittime").getContent(),
00095                                      (String)ref.get("maxwaiters").getContent(),
00096                                      (String)ref.get("samplingperiod").getContent());
00097                 } catch (Exception e) {
00098                     logger.log(BasicLevel.ERROR, "DataSourceFactory error: "+e);
00099                 }
00100             } else {
00101                 // The DataSource is already in this JOnAS Server: Just return it.
00102             }
00103             return ds;
00104         }
00105 
00106         logger.log(BasicLevel.ERROR, "no object found for "+clname);
00107         return null;
00108     }
00109 }

Generated on Tue Feb 15 15:05:15 2005 for JOnAS by  doxygen 1.3.9.1