[Seasar-user:21877] Re: トランザクション制御について
植木 貴紀
[E-MAIL ADDRESS DELETED]
2014年 4月 22日 (火) 05:54:01 JST
小林さま
ご返事ありがとうございます。
>> ロールバックした後の「トランザクション
>> 制御のあるアクセス」というのは、新しい
>> トランザクションを開始して、その中で
>> 接続を取得しているのでしょうか?
その通りです。
別のクラスで、新しいトランザクションを開始してアクセスしております。
>> ざっくりとでいいので関連するコードの
>> 抜粋 (概要) を見せてもらった方が話が
>> 早いかもしれません。
userTransaction.rollback();をコールする前に、
ログを出力するクラスの処理があったのですが、
そこでさらにExceptionが発生しており、
userTransaction.rollbackがコールされておりませんでした。
コネクションのステータスが、STATUS_MARKED_ROLLBACKであることも確認できま
した。
しっかりと確認できていない中、投稿してしまい申し訳ありませんでした。
ですが、まだ下記2点についての疑問が残っておりますので、ご教授いただけた
ら幸いです。
1.ロールバックがマークされているコネクションに対し、
トランザクション制御のあるDBアクセスをしているのに、エラーの発生がまちま
ちだということ。
2.今回は事象が再現しやすいように、コネクションプールのMaxSizeを1にして
おりますが、最初はデフォルト値である10を設定しておりました。
プールしてあるコネクションの割り当ての仕様をご存知でしたらご教授願いたい
です。
また、下記が例外のスタックトレースになります。
■例外のスタックトレース(前)
(手動でのトランザクション管理で、SQL発行)
java.lang.NullPointerException
at
jp.co.test.hoge.action.MailCertificationAction.index(MailCertificationAction.java:286)
at
jp.co.test.hoge.action.MailCertificationAction$$EnhancedByS2AOP$$465a0ba6.$$index$$invokeSuperMethod$$(MailCertificationAction$$EnhancedByS2AOP$$465a0ba6.java)
at
jp.co.test.hoge.action.MailCertificationAction$$EnhancedByS2AOP$$465a0ba6$$MethodInvocation$$index0.proceed(MethodInvocationClassGenerator.java)
at
org.seasar.extension.tx.DefaultTransactionCallback.execute(DefaultTransactionCallback.java:58)
at
org.seasar.extension.tx.adapter.JTATransactionManagerAdapter.never(JTATransactionManagerAdapter.java:114)
at
org.seasar.extension.tx.NeverInterceptor.invoke(NeverInterceptor.java:38)
at
jp.co.test.hoge.action.MailCertificationAction$$EnhancedByS2AOP$$465a0ba6$$MethodInvocation$$index0.proceed(MethodInvocationClassGenerator.java)
at
org.seasar.framework.aop.interceptors.TraceInterceptor.invoke(TraceInterceptor.java:73)
at
jp.co.test.hoge.action.MailCertificationAction$$EnhancedByS2AOP$$465a0ba6$$MethodInvocation$$index0.proceed(MethodInvocationClassGenerator.java)
at
org.seasar.framework.aop.interceptors.ThrowsInterceptor.invoke(ThrowsInterceptor.java:79)
at
jp.co.test.hoge.action.MailCertificationAction$$EnhancedByS2AOP$$465a0ba6$$MethodInvocation$$index0.proceed(MethodInvocationClassGenerator.java)
at
jp.co.test.hoge.interceptor.ExceptionInterceptor.invoke(ExceptionInterceptor.java:60)
at
jp.co.test.hoge.interceptor.ExceptionInterceptor$$EnhancedByS2AOP$$5247834f.$$invoke$$invokeSuperMethod$$(ExceptionInterceptor$$EnhancedByS2AOP$$5247834f.java)
at
jp.co.test.hoge.interceptor.ExceptionInterceptor$$EnhancedByS2AOP$$5247834f$$MethodInvocation$$invoke0.proceed(MethodInvocationClassGenerator.java)
at
jp.co.test.hoge.interceptor.LoggingInterceptor.invoke(LoggingInterceptor.java:28)
at
jp.co.test.hoge.interceptor.ExceptionInterceptor$$EnhancedByS2AOP$$5247834f$$MethodInvocation$$invoke0.proceed(MethodInvocationClassGenerator.java)
at
jp.co.test.hoge.interceptor.ExceptionInterceptor$$EnhancedByS2AOP$$5247834f.invoke(ExceptionInterceptor$$EnhancedByS2AOP$$5247834f.java)
at
jp.co.test.hoge.action.MailCertificationAction$$EnhancedByS2AOP$$465a0ba6$$MethodInvocation$$index0.proceed(MethodInvocationClassGenerator.java)
at
jp.co.test.hoge.interceptor.LoggingInterceptor.invoke(LoggingInterceptor.java:28)
at
jp.co.test.hoge.action.MailCertificationAction$$EnhancedByS2AOP$$465a0ba6$$MethodInvocation$$index0.proceed(MethodInvocationClassGenerator.java)
at
jp.co.test.hoge.action.MailCertificationAction$$EnhancedByS2AOP$$465a0ba6.index(MailCertificationAction$$EnhancedByS2AOP$$465a0ba6.java)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.seasar.framework.util.MethodUtil.invoke(MethodUtil.java:96)
at org.seasar.struts.action.ActionWrapper.execute(ActionWrapper.java:139)
at org.seasar.struts.action.ActionWrapper.execute(ActionWrapper.java:87)
at
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at
org.seasar.struts.action.S2RequestProcessor.process(S2RequestProcessor.java:132)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at
org.seasar.extension.filter.RequestDumpFilter.doFilter(RequestDumpFilter.java:127)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at
org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:79)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at
org.seasar.framework.container.hotdeploy.HotdeployFilter.doHotdeployFilter(HotdeployFilter.java:86)
at
org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:67)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:749)
at
org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:487)
at
org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:412)
at
org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:339)
at org.seasar.struts.filter.RoutingFilter.forward(RoutingFilter.java:219)
at org.seasar.struts.filter.RoutingFilter.doFilter(RoutingFilter.java:99)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at
org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:79)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at
org.seasar.framework.container.hotdeploy.HotdeployFilter.doHotdeployFilter(HotdeployFilter.java:99)
at
org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:67)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at
jp.co.test.hoge.filter.RaclosEncodingFilter.doFilter(RaclosEncodingFilter.java:49)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
at
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
■例外のスタックトレース(後)
(自動でのトランザクション制御でストアドコール)
org.seasar.framework.exception.SIllegalStateException: [ESSR0308]既に
ロールバックとしてマークされています
at
org.seasar.extension.jta.TransactionImpl.throwIllegalStateException(TransactionImpl.java:138)
at
org.seasar.extension.jta.TransactionImpl.assertActive(TransactionImpl.java:123)
at
org.seasar.extension.jta.TransactionImpl.enlistResource(TransactionImpl.java:452)
at
org.seasar.framework.util.TransactionUtil.enlistResource(TransactionUtil.java:64)
at
org.seasar.extension.dbcp.impl.ConnectionPoolImpl.checkOut(ConnectionPoolImpl.java:355)
at
org.seasar.extension.dbcp.impl.DataSourceImpl.getConnection(DataSourceImpl.java:59)
at
org.seasar.extension.jdbc.util.DataSourceUtil.getConnection(DataSourceUtil.java:51)
at
org.seasar.extension.jdbc.manager.JdbcManagerImpl.getJdbcContext(JdbcManagerImpl.java:381)
at
org.seasar.extension.jdbc.query.AbstractProcedureCall.execute(AbstractProcedureCall.java:48)
at jp.co.test.hoge.common.RaclosUtil.checkOnline(RaclosUtil.java:1202)
at jp.co.test.hoge.action.AgreementAction.index(AgreementAction.java:71)
at
jp.co.test.hoge.action.AgreementAction$$EnhancedByS2AOP$$405d30db.$$index$$invokeSuperMethod$$(AgreementAction$$EnhancedByS2AOP$$405d30db.java)
at
jp.co.test.hoge.action.AgreementAction$$EnhancedByS2AOP$$405d30db$$MethodInvocation$$index0.proceed(MethodInvocationClassGenerator.java)
at
org.seasar.framework.aop.interceptors.InvalidateSessionInterceptor.invoke(InvalidateSessionInterceptor.java:52)
at
jp.co.test.hoge.action.AgreementAction$$EnhancedByS2AOP$$405d30db$$MethodInvocation$$index0.proceed(MethodInvocationClassGenerator.java)
at
org.seasar.extension.tx.DefaultTransactionCallback.execute(DefaultTransactionCallback.java:58)
at
org.seasar.extension.tx.adapter.JTATransactionManagerAdapter.required(JTATransactionManagerAdapter.java:65)
at
org.seasar.extension.tx.RequiredInterceptor.invoke(RequiredInterceptor.java:50)
at
jp.co.test.hoge.action.AgreementAction$$EnhancedByS2AOP$$405d30db$$MethodInvocation$$index0.proceed(MethodInvocationClassGenerator.java)
at
org.seasar.framework.aop.interceptors.TraceInterceptor.invoke(TraceInterceptor.java:73)
at
jp.co.test.hoge.action.AgreementAction$$EnhancedByS2AOP$$405d30db$$MethodInvocation$$index0.proceed(MethodInvocationClassGenerator.java)
at
org.seasar.framework.aop.interceptors.ThrowsInterceptor.invoke(ThrowsInterceptor.java:79)
at
jp.co.test.hoge.action.AgreementAction$$EnhancedByS2AOP$$405d30db$$MethodInvocation$$index0.proceed(MethodInvocationClassGenerator.java)
at
jp.co.test.hoge.interceptor.ExceptionInterceptor.invoke(ExceptionInterceptor.java:60)
at
jp.co.test.hoge.interceptor.ExceptionInterceptor$$EnhancedByS2AOP$$39667a85.$$invoke$$invokeSuperMethod$$(ExceptionInterceptor$$EnhancedByS2AOP$$39667a85.java)
at
jp.co.test.hoge.interceptor.ExceptionInterceptor$$EnhancedByS2AOP$$39667a85$$MethodInvocation$$invoke0.proceed(MethodInvocationClassGenerator.java)
at
jp.co.test.hoge.interceptor.LoggingInterceptor.invoke(LoggingInterceptor.java:28)
at
jp.co.test.hoge.interceptor.ExceptionInterceptor$$EnhancedByS2AOP$$39667a85$$MethodInvocation$$invoke0.proceed(MethodInvocationClassGenerator.java)
at
jp.co.test.hoge.interceptor.ExceptionInterceptor$$EnhancedByS2AOP$$39667a85.invoke(ExceptionInterceptor$$EnhancedByS2AOP$$39667a85.java)
at
jp.co.test.hoge.action.AgreementAction$$EnhancedByS2AOP$$405d30db$$MethodInvocation$$index0.proceed(MethodInvocationClassGenerator.java)
at
jp.co.test.hoge.interceptor.LoggingInterceptor.invoke(LoggingInterceptor.java:28)
at
jp.co.test.hoge.action.AgreementAction$$EnhancedByS2AOP$$405d30db$$MethodInvocation$$index0.proceed(MethodInvocationClassGenerator.java)
at
jp.co.test.hoge.action.AgreementAction$$EnhancedByS2AOP$$405d30db.index(AgreementAction$$EnhancedByS2AOP$$405d30db.java)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.seasar.framework.util.MethodUtil.invoke(MethodUtil.java:96)
at org.seasar.struts.action.ActionWrapper.execute(ActionWrapper.java:139)
at org.seasar.struts.action.ActionWrapper.execute(ActionWrapper.java:87)
at
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at
org.seasar.struts.action.S2RequestProcessor.process(S2RequestProcessor.java:132)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at
org.seasar.extension.filter.RequestDumpFilter.doFilter(RequestDumpFilter.java:127)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at
org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:79)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at
org.seasar.framework.container.hotdeploy.HotdeployFilter.doHotdeployFilter(HotdeployFilter.java:86)
at
org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:67)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:749)
at
org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:487)
at
org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:412)
at
org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:339)
at org.seasar.struts.filter.RoutingFilter.forward(RoutingFilter.java:219)
at org.seasar.struts.filter.RoutingFilter.doFilter(RoutingFilter.java:90)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at
org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:79)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at
org.seasar.framework.container.hotdeploy.HotdeployFilter.doHotdeployFilter(HotdeployFilter.java:99)
at
org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:67)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at
jp.co.test.hoge.filter.RaclosEncodingFilter.doFilter(RaclosEncodingFilter.java:49)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
at
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
(2014/04/22 4:20), Koichi Kobayashi wrote:
> 小林 (koichik) です。
>
> ロールバックした後の「トランザクション
> 制御のあるアクセス」というのは、新しい
> トランザクションを開始して、その中で
> 接続を取得しているのでしょうか?
>
> ざっくりとでいいので関連するコードの
> 抜粋 (概要) を見せてもらった方が話が
> 早いかもしれません。
> また、二つの例外のスタックトレースも
> みせてください。
>
>
>
>> 初めて投稿させていただきます。
>> うえっきと申します。お世話になります。
>>
>>
>> トランザクションの制御を手動で行っているメソッド内で
>> (@TransactionAttribute(TransactionAttributeType.NEVER))、
>> NullPointerException発生後、ロールバック(userTransaction.rollback)を行っ
>> たトランザクションに対して、
>> 再度トランザクション制御のあるアクセスしようとすると(※1)下記エラーが
>> 発生します。
>>
>> org.seasar.framework.exception.SIllegalStateException:
>> [ESSR0308]既にロールバックとしてマークされています
>>
>> (※1)コネクションプールのMaxSizeを1に設定し、同じコネクションを使用す
>> るようにしております。
>>
>>
>> エラーは毎回発生するのではなく、発生したりしなかったりと、原因がいまいち
>> わかりません。
>>
>> userTransaction.rollback();でロールバックしており、トランザクションがク
>> ローズしていないということはないと思っています。
>>
>> 推測される原因、原因の調査方法等、ご教授いただけたら幸いです。
>> よろしくお願いいたします。
>> _______________________________________________
>> Seasar-user mailing list
>> Seasar-user @ ml.seasar.org
>> https://ml.seasar.org/mailman/listinfo/seasar-user
>
>
Seasar-user メーリングリストの案内