以下のコードスニペットを使用して、複数のユーザーが使用するWebアプリケーションのConnectionオブジェクトのシングルトンインスタンスを作成しています。
static {
try {
String driver = PropertyReader.getPropertyReader("driverClassName");
Class.forName(driver).newInstance();
} catch (Exception ex) {
ex.printStackTrace();
}
}
private static Connection conn = null;
private static synchronized Connection getDBConnection()
{
try{
if(conn == null || conn.isClosed()){
conn = null;
String URL = PropertyReader.getPropertyReader("url");
String userName = PropertyReader.getPropertyReader("username");
String password = PropertyReader.getPropertyReader("password");
conn = DriverManager.getConnection(URL,userName,password);
logger.info("Preparing Connection...");
}
else{
logger.info("Returning already prepared connection..");
}
}
catch(Exception e)
{
e.printStackTrace();
}
return conn;
}
このクラスは、接続が閉じられるかnullになるまで、同じ接続インスタンスを返します。静的な接続であるため、同じ接続が異なるマシン上のすべてのユーザーによって共有されると思います。
1人のユーザーが自動コミットをオフに設定していくつかのステートメントをトランザクションとしてコミットする場合、接続を制限して自動コミットも無効にするか、1人のユーザーがcon.commit( )?