Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java StandardXConnectionHandle:prepareStatement不应在EJBServer外部使用_Java_Database_Tomcat_Jdbc_Transactions - Fatal编程技术网

Java StandardXConnectionHandle:prepareStatement不应在EJBServer外部使用

Java StandardXConnectionHandle:prepareStatement不应在EJBServer外部使用,java,database,tomcat,jdbc,transactions,Java,Database,Tomcat,Jdbc,Transactions,我在Tomcat5.5容器中部署了一个web应用程序。我使用一个SessionEventListenerbean来记录数据库中的一些活动。有时我会收到以下错误消息: java.sql.SQLException: StandardXAConnectionHandle:prepareStatement should not be used outside an EJBServer at org.enhydra.jdbc.standard.StandardXAConnectionHandle.

我在Tomcat5.5容器中部署了一个web应用程序。我使用一个
SessionEventListener
bean来记录数据库中的一些活动。有时我会收到以下错误消息:

java.sql.SQLException: StandardXAConnectionHandle:prepareStatement should not be used outside an EJBServer
    at org.enhydra.jdbc.standard.StandardXAConnectionHandle.prepareStatement(StandardXAConnectionHandle.java:310)
    at org.enhydra.jdbc.standard.StandardXAConnectionHandle.prepareStatement(StandardXAConnectionHandle.java:255)
    at org.springframework.jdbc.core.PreparedStatementCreatorFactory$PreparedStatementCreatorImpl.createPreparedStatement(PreparedStatementCreatorFactory.java:233)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:532)
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:739)
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:762)
    at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.update(NamedParameterJdbcTemplate.java:213)
    at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.update(NamedParameterJdbcTemplate.java:217)
    at hu.rate.session.RateDBSessionRegistry$4.doInTransactionWithoutResult(RateDBSessionRegistry.java:124)
    at org.springframework.transaction.support.TransactionCallbackWithoutResult.doInTransaction(TransactionCallbackWithoutResult.java:33)
    at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:127)
    at hu.rate.session.RateDBSessionRegistry.refreshLastRequest(RateDBSessionRegistry.java:120)
失败的代码如下所示:

txTemplate.execute(new TransactionCallbackWithoutResult() {
            @Override
            public void doInTransactionWithoutResult(
                    TransactionStatus paramTransactionStatus) {
                if(template.update(us, paramMap) == 0) {
                    logger.warn("No session in registry to be refreshed, sessionId = " + sessionId);
                }
            }
        });

public void setTxManager(PlatformTransactionManager txManager) {
         txTemplate = new TransactionTemplate(txManager);
    }
我的SpringBean配置如下所示:

<bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBean" />
    <bean id="txManager"
        class="org.springframework.transaction.jta.JtaTransactionManager">
        <property name="userTransaction">
            <ref local="jotm" />
        </property>
    </bean>


我真的不明白这个问题,你能解释一下什么地方出了问题以及如何解决吗?

根据我发现的,它看起来像是由潜在的NullPointerException引起的。同样有趣的是,在代码的正下方有一条注释,如果您想使用PreparedStatements,您需要注释掉两行并取消注释另外两行。可能值得研究。

今天,同样的问题再次出现。现在开始悬赏,看看是否有人能帮我。你能启用调试日志级别,看看它在StandardXAConnectionHandle中能走多远吗?当您使用JDBC时,您是自己处理事务还是处理某个地方的连接?这可能会干扰使用JTA管理事务和连接的方式——本质上,使用JTA您根本不应该处理这个问题。可能是连接已关闭,tx已提交,或者我不知道是什么,这可能会产生与时间相关的bug。谢谢,我也看到了此评论,但更改源代码并重新编译XAPool不是我的选择。我通过恢复到普通的旧JDBC代码解决了这个问题,但是悬赏仍然存在,因为我想得到一个很好的解释,我错在哪里了。啊,你应该发布你的答案,让其他人知道如何解决。也许在赏金到期或被授予后再做?你是对的,但是我所做的(切换回JDBC)既不是解决方案,也不是对我问题的回答。