Hi,
I am coding a java multithread application.
In my application I have the following object which needs to load the
configuration files from a path not specified in the classpath end build
an SqlMapClient.
The Hashtable is used for:
* cache the clients and avoid the building of a new SqlMapClient
every time;
* speed up the application avoiding to load and parse the
different config files every time
public class SqlMapClientConfig {
private static Hashtable clients;
static{
clients = new Hashtable();
}
private SqlMapClientConfig(){
}
public Object clone() throws CloneNotSupportedException {
throw new CloneNotSupportedException();
}
public static SqlMapClient getClient(String db, String usecase,) {
String key = db + "." + usecase;
String path = "/dat/" + db + "/" + usecase;
if(clients.containsKey(key))
return (SqlMapClient) clients.get(key);
else{
Loader loader = new Loader(path);
Resources.setDefaultClassLoader(loader);
Reader reader = null;
try {
reader = Resources.getResourceAsReader (loader,
"sql-map-config.xml");
} catch (IOException e) {
e.printStackTrace();
}
SqlMapClient sqlMap = null;
sqlMap = (SqlMapClient)
SqlMapClientBuilder.buildSqlMapClient(reader);
clients.put(key,sqlMap);
return sqlMap;
}
}
}
If the application is multithread and each thread uses the same client
will I have some problem?
Is the iBatis engine handling the concurrency or should I care?
Is there any best practice?