Tomcat 6.0、mybatis、および Oracle XAPool を使用してアプリケーションを開発しています。アプリケーションを実行すると、次のスタックトレースが生成されます。
2012-05-10 16:19:16,328 ERROR [jatis.avantrade.foundation.model.dao.DAOHelper] [t] - datasource jndi : org.enhydra.jdbc.pool.StandardXAPoolDataSource
2012-05-10 16:19:16,328 ERROR [jatis.avantrade.foundation.model.dao.DAOHelper] [t] - org.enhydra.jdbc.pool.StandardXAPoolDataSource cannot be cast to org.enhydra.jdbc.pool.StandardXAPoolDataSource
java.lang.ClassCastException: org.enhydra.jdbc.pool.StandardXAPoolDataSource cannot be cast to org.enhydra.jdbc.pool.StandardXAPoolDataSource
at jatis.avantrade.foundation.model.dao.DAOHelper.getSession(DAOHelper.java:73)
以下は、データベース セッションを取得するときの DAOHelper コードです。データソースを印刷すると、タイプが表示されますStandardXAPoolDataSource
。奇妙な動作は、スタック トレース ショーorg.enhydra.jdbc.pool.StandardXAPoolDataSource
を にキャストできないことorg.enhydra.jdbc.pool.StandardXAPoolDataSource
です。
同じクラスはそれ自体にキャストできませんか?
protected SqlSession getSession() {SqlSession session = sessionLocal.get();
if (session == null) {
ConfigurationManager configurationManager = ConfigurationManagerSupport .getConfigurationManager(5000);
RootContextConfiguration contextConfiguration = (RootContextConfiguration) configurationManager
.getContextConfiguration(RootContextConfiguration.CONTEXT);
session = contextConfiguration.getMyBatisSession(MYBATIS_ID);
log.error("data source : "
+ session.getConfiguration().getEnvironment()
.getDataSource());
log.error("connection : " + session.getConnection());
sessionLocal.set(session);
log.error("factory : "
+ session.getConfiguration().getEnvironment()
.getTransactionFactory());
String DATASOURCE_CONTEXT = "java:comp/env/jdbc/avantrade";
Connection result = null;
try {
Context initialContext = new InitialContext();
DataSource datasource = (DataSource) initialContext
.lookup(DATASOURCE_CONTEXT);
log.error("datasource jndi : " + datasource);
log.error("datasource jndi : " + datasource.getClass().getName());
log.error("datasource jndi name : " + ((StandardXAPoolDataSource) datasource).getDataSourceName());
log.error("datasource jndi connection : " + ((StandardXAPoolDataSource) datasource).getConnection());
{
result = datasource.getConnection();
log.error("connection jndi : " + result);
log.error("connection jndi : " + result.getClass().getName());
}
} catch (NamingException ex) {
log.error(ex.getMessage(), ex);
} catch (SQLException ex) {
log.error(ex.getMessage(), ex);
} catch (Exception ex) {
log.error(ex.getMessage(), ex);
}
}
return session;
}
ありがとう。