アプリケーションでDB プール ( DB プール) を使用しています。私のDAOコードは次のようなものです:
static {
try {
PropertyUtil propertyUtil = new PropertyUtil();
propertyUtil.getBundle(Constants.DB_PROPERTIES);
String dburl = propertyUtil.getProperty("dburl");
String dbuserName = propertyUtil.getProperty("dbuserName");
String dbpassword = propertyUtil.getProperty("dbpassword");
String dbclass = propertyUtil.getProperty("dbclass");
String dbpoolName = propertyUtil.getProperty("dbpoolName");
int dbminPool = Integer.parseInt(propertyUtil
.getProperty("dbminPool"));
int dbmaxPool = Integer.parseInt(propertyUtil
.getProperty("dbmaxPool"));
int dbmaxSize = Integer.parseInt(propertyUtil
.getProperty("dbmaxSize"));
Class.forName(dbclass).newInstance();
moPool = new ConnectionPool(dbpoolName, dbminPool, dbmaxPool,
dbmaxSize, dburl, dbuserName, dbpassword);
moLogWrapper.info("Connection pool size: -"+Integer.valueOf(moPool.getSize()));
} catch (ApplicationException aoAppEx) {
moLogWrapper
.error(aoAppEx.getMessage(), aoAppEx.fillInStackTrace());
new ApplicationException(aoAppEx.getMessage(),
aoAppEx.fillInStackTrace());
} catch (IllegalAccessException aoIllEx) {
moLogWrapper
.error(aoIllEx.getMessage(), aoIllEx.fillInStackTrace());
new ApplicationException(aoIllEx.getMessage(),
aoIllEx.fillInStackTrace());
} catch (ClassNotFoundException aoCnfEx) {
moLogWrapper
.error(aoCnfEx.getMessage(), aoCnfEx.fillInStackTrace());
new ApplicationException(aoCnfEx.getMessage(),
aoCnfEx.fillInStackTrace());
} catch (InstantiationException aoIEx) {
moLogWrapper.error(aoIEx.getMessage(), aoIEx.fillInStackTrace());
new ApplicationException(aoIEx.getMessage(),
aoIEx.fillInStackTrace());
}
}
私のopenConnection()メソッドは次のとおりです。
public void openConnection() throws ApplicationException {
moLogWrapper.info("inside openConnection method");
try {
loCon = moPool.getConnection();
// moLogWrapper.info(moPool.getSize());
} catch (SQLException aoSqlEx) {
moLogWrapper
.error(aoSqlEx.getMessage(), aoSqlEx.fillInStackTrace());
if (null != loCon) {
loCon = null;
}
throw new ApplicationException(1002, aoSqlEx);
} catch (Exception aoEx) {
moLogWrapper.error(aoEx.fillInStackTrace());
throw new ApplicationException(aoEx.getMessage(),
aoEx.fillInStackTrace());
}
moLogWrapper.info("exiting openConnection method");
}
問題は、接続プール クラスから .openConnection メソッドで null を取得していることです。ログにも DEBUG ログが出力されており、次の行が出力されます。
[snaq.db.ConnectionPool.sp] sp: Checkout - 10/10 (HitRate=40.186916%) - null returned
null が返される理由と、実際の問題をデバッグする方法を理解できません。
編集:
私のアプリケーションは正常に動作しますが、スローが突然このエラーをスローし始めます。
データベースとして postgres を使用しています。