2011-08-03 21 views
0

WebアプリケーションがTomcat 5.5コンテナにデプロイされています。私はSessionEventListenerのBeanを使用して、データベースにいくつかのアクティビティを記録します。以下れるに失敗したStandardXAConnectionHandle:EJBServerの外でprepareStatementを使用しないでください

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) 

コード::私のSpring Beanの設定は次のようになります

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); 
    } 

<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> 

私は本当にこれを理解していない時々私は、このエラーメッセージが表示されます問題、何が間違っているのか、どうやって修正するのか説明できますか?

+0

今日同じ問題が再び発生しました。誰かが私を助けることができるかどうかを見るために賞金を今始める。 – jabal

+0

デバッグログレベルを有効にして、StandardXAConnectionHandleにどれだけ進んでいるか確認できますか? JDBCを使用するときは、トランザクションを自分で分担したり、どこかの接続を扱ったりしていますか?これは、トランザクションと接続がJTAとどのように管理されるのかを妨げる可能性があります.JTAでは、それをまったく処理すべきではありません。コネクションがクローズされているか、txがコミットされているのか、何がわかっていないのか、時間依存のバグが発生する可能性があります。 – ewernli

答えて

1

this pageによれば、NullPointerExceptionが原因で発生しているようです。また興味深いことに、PreparedStatementsを使用する場合は、2行をコメントアウトし、2行のコメントを外す必要がある場合は、そのコードのすぐ下にコメントがあります。探してみる価値があるかもしれません。

+0

ありがとう、私もこのコメントを見ましたが、ソースを変更し、XAPoolを再コンパイルすることは私の選択肢ではありません。私は普通のJDBCコードに戻すことでこの問題を解決しましたが、私は何が間違っていたかについて素敵な説明をしたいので、賞金はまだあります。 – jabal

+0

ああ、どちらかの方法で回答を投稿する必要があります。賞金の期限が切れた後、または賞金が与えられた後に、おそらくそれをしますか? –

+0

あなたは正しいですが、私が何をしたのか(JDBCへの切り替え)は解決策でもなく、私の質問に対する答えでもありません。 – jabal

関連する問題