首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XA池中的ClassCastException

XA池中的ClassCastException
EN

Stack Overflow用户
提问于 2012-05-10 17:36:04
回答 1查看 257关注 0票数 1

我使用Tomcat6.0、mybatis和Oracle XAPool开发应用程序。当我运行应用程序时,生成了以下堆栈跟踪。

代码语言:javascript
复制
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)

下面是get database session时的DAOHelper代码。当我打印数据源时,它会显示类型,它是StandardXAPoolDataSource。奇怪的行为是堆栈跟踪显示org.enhydra.jdbc.pool.StandardXAPoolDataSource不能转换为org.enhydra.jdbc.pool.StandardXAPoolDataSource

同一个类不能强制转换为自己吗?

代码语言:javascript
复制
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;

}

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-10 19:02:10

同一个类不能强制转换为自身的

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

检查Tomcat自己的lib目录和应用程序的lib目录中包含的JAR。您应该只有一份副本。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10531250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档