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
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
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
00070
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
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
00102 }
00103 return ds;
00104 }
00105
00106 logger.log(BasicLevel.ERROR, "no object found for "+clname);
00107 return null;
00108 }
00109 }