StandardXAPoolDataSource

StandardXAPoolDataSource

我使用Tomcat 6.0,mybatis和Oracle XAPool开发应用程序。
当我运行应用程序时,将生成以下stacktrace。

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
奇怪的行为是stacktrace show 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;

}


谢谢。

最佳答案

同一个阶级不能自尽吗?


这通常是由两个不同的类加载器加载相同类的两个副本引起的。最常见的根本原因是应用程序服务器有一个副本,而您的应用程序有另一个副本。

检查由Tomcat自己的lib目录和应用程序的lib目录保存的JAR。您应该只有一份。

10-05 18:35