[Seasar-user:22018] Re: ESSR0308の対応

[E-MAIL ADDRESS DELETED] [E-MAIL ADDRESS DELETED]
2014年 12月 24日 (水) 13:57:13 JST


小林様

対策方法を教えていただきありがとうございました。半蔵です。
下記の方法で、例外[ESSR0308]が発生しなくなりました。

>3. 例外をスローしないようにする
実際に例外が発生しなくても、throws NamingExceptionを宣言するだけで
例外[ESSR0308]が発生する事に気付きませんでした。

以下のページも参考になりました。
http://www.ibm.com/developerworks/jp/java/library/j_j-seasar03/

ありがとうございました。
(返信が遅れ失礼しました。)

----- Original Message -----
>From: Koichi Kobayashi <koichik @ improvement.jp>
>To: hanzosuperdog @ yahoo.co.jp; seasar-user @ ml.seasar.org 
>Cc: "seasar-user @ ml.seasar.org" <seasar-user @ ml.seasar.org>
>Date: 2014/12/20, Sat 22:30
>Subject: Re: [Seasar-user:22014] ESSR0308の対応
>  
>小林 (koichik) です。
>
>直前のスレッドと類似してますが、
>
>http://s2container.seasar.org/2.4/ja/tx.html
>
>「トランザクションを開始した場合でも引き継いだ場合でも、
>このインターセプタが適用されたメソッドが例外をスローした場合は、
>例外の種類に応じてトランザクションがロールバックされるように
>マークします。」
>
>つまり、
>
>public void foo() {
>  try {
>    bar();
>  } catch (...) {
>    ...
>  }
>  //(1)
>}
>
>public void bar() {
>  throw ...;
>}
>
>foo()とbar()の両方に宣言的トランザクション
>(どちらもRequired) が適用されている場合、
>foo()でトランザクションが開始されてbar()は
>そのトランザクションの中で呼び出されますが、
>bar()が例外をスローする (bar()に適用された
>Requiredインターセプタを例外が通り抜ける)
>ことにより、foo()で開始したトランザクションは
>「ロールバックとしてマーク」されます。
>
>そのため、上記(1)の位置で新たにJDBCコネクションを
>取得しようとすると、コネクションを (ロールバックとして
>マーク済みの) トランザクションに関連づけることが
>できないために、例外[ESSR0308]が発生します。
>
>宣言的トランザクションが適用されたメソッドは、
>それ自身がトランザクションを開始した場合でなくても、
>異常終了 (例外をスロー) するとトランザクションを
>ロールバックする、というのが基本的な動作です。
>
>対策としては、上記bar()に相当する (例外をスローする)
>メソッドには:
>
>1. 宣言的トランザクションを適用しない
>2. RequiresNewにして外側のトランザクションとは独立にする
>3. 例外をスローしないようにする
>
>などがあります。
>
>
>On Thu, 18 Dec 2014 18:29:17 +0900 (JST), hanzosuperdog @ yahoo.co.jp wrote:
>
>> はじめまして、半蔵です。
>> 下記の例外が、発生して対策が必要です。
>> 処理概要
>> newRegist(){
>> service1.addUser(entity);//<-LDAPのサービス
>> ...
>> service2..findById(userid););//<-DBのサービスで例外発生
>> }
>> 難しい処理は、していないのですが、なぜか例外が発生します。
>> バージョンは、2.4.47を使っています。
>> 調べてみましたが、原因、対策が分からないため、質問します。
>> 
>> 以上、よろしくお願いします。
>> HTTPステータス 500 - org.seasar.framework.exception.SIllegalStateException: 
>> [ESSR0308]既にロールバックとしてマークされています
>> ________________________________
>> 
>> type 例外レポート
>> メッセージ org.seasar.framework.exception.SIllegalStateException: 
>> [ESSR0308]既にロールバックとしてマークされています
>> 説明 The server encountered an internal error that prevented it from 
>> fulfilling this request.
>> 例外 
>> javax.servlet.ServletException: org.seasar.framework.exception.SIllegalStateException: [ESSR0308]既にロールバックとしてマークされています org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:535) org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:433) org.seasar.struts.action.S2RequestProcessor.process(S2RequestProcessor.java:132) org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196) org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) javax.servlet.http.HttpServlet.service(HttpServlet.java:637) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.seasar.extension.filter.RequestDumpFilter.doFilter(RequestDumpFilter.java:127) org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:79) org.seasar.framework.container.hotdeploy.HotdeployFilter.doHotdeployFilter(HotdeployFilter.java:86)
>>  org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:67) org.seasar.struts.filter.RoutingFilter.forward(RoutingFilter.java:219) org.seasar.struts.filter.RoutingFilter.doFilter(RoutingFilter.java:99) org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:79) org.seasar.framework.container.hotdeploy.HotdeployFilter.doHotdeployFilter(HotdeployFilter.java:99) org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:67) org.seasar.extension.filter.EncodingFilter.doFilter(EncodingFilter.java:69) 
>> 原因 
>> org.seasar.framework.exception.SIllegalStateException: [ESSR0308]既にロールバックとしてマークされています org.seasar.extension.jta.TransactionImpl.throwIllegalStateException(TransactionImpl.java:138) org.seasar.extension.jta.TransactionImpl.assertActive(TransactionImpl.java:123) org.seasar.extension.jta.TransactionImpl.enlistResource(TransactionImpl.java:452) org.seasar.framework.util.TransactionUtil.enlistResource(TransactionUtil.java:64) org.seasar.extension.dbcp.impl.ConnectionPoolImpl.checkOut(ConnectionPoolImpl.java:371) org.seasar.extension.dbcp.impl.DataSourceImpl.getConnection(DataSourceImpl.java:59) org.seasar.extension.jdbc.util.DataSourceUtil.getConnection(DataSourceUtil.java:51) org.seasar.extension.jdbc.manager.JdbcManagerImpl.getJdbcContext(JdbcManagerImpl.java:381) org.seasar.extension.jdbc.query.AbstractAutoUpdate.executeInternal(AbstractAutoUpdate.java:121)
>>  org.seasar.extension.jdbc.query.AbstractAutoUpdate.execute(AbstractAutoUpdate.java:90) org.seasar.extension.jdbc.service.S2AbstractService.insert(S2AbstractService.java:138) carebase.service.UserMstService$$EnhancedByS2AOP$$22140b31.$$insert$$invokeSuperMethod$$(UserMstService$$EnhancedByS2AOP$$22140b31.java) carebase.service.UserMstService$$EnhancedByS2AOP$$22140b31$$MethodInvocation$$insert3.proceed(MethodInvocationClassGenerator.java) org.seasar.extension.tx.DefaultTransactionCallback.execute(DefaultTransactionCallback.java:58) org.seasar.extension.tx.adapter.JTATransactionManagerAdapter.required(JTATransactionManagerAdapter.java:65) org.seasar.extension.tx.RequiredInterceptor.invoke(RequiredInterceptor.java:50) carebase.service.UserMstService$$EnhancedByS2AOP$$22140b31$$MethodInvocation$$insert3.proceed(MethodInvocationClassGenerator.java) org.seasar.framework.aop.interceptors.TraceInterceptor.invoke(TraceInterceptor.java:56)
>>  carebase.service.UserMstService$$EnhancedByS2AOP$$22140b31$$MethodInvocation$$insert3.proceed(MethodInvocationClassGenerator.java) carebase.service.UserMstService$$EnhancedByS2AOP$$22140b31.insert(UserMstService$$EnhancedByS2AOP$$22140b31.java) carebase.action.administration.UserAccountCtlAction.newRegist(UserAccountCtlAction.java:222) carebase.action.administration.UserAccountCtlAction$$EnhancedByS2AOP$$66a0ba6c.$$newRegist$$invokeSuperMethod$$(UserAccountCtlAction$$EnhancedByS2AOP$$66a0ba6c.java) carebase.action.administration.UserAccountCtlAction$$EnhancedByS2AOP$$66a0ba6c$$MethodInvocation$$newRegist5.proceed(MethodInvocationClassGenerator.java) org.seasar.extension.tx.DefaultTransactionCallback.execute(DefaultTransactionCallback.java:58) org.seasar.extension.tx.adapter.JTATransactionManagerAdapter.required(JTATransactionManagerAdapter.java:65) org.seasar.extension.tx.RequiredInterceptor.invoke(RequiredInterceptor.java:50)
>>  carebase.action.administration.UserAccountCtlAction$$EnhancedByS2AOP$$66a0ba6c$$MethodInvocation$$newRegist5.proceed(MethodInvocationClassGenerator.java) org.seasar.framework.aop.interceptors.TraceInterceptor.invoke(TraceInterceptor.java:56) carebase.action.administration.UserAccountCtlAction$$EnhancedByS2AOP$$66a0ba6c$$MethodInvocation$$newRegist5.proceed(MethodInvocationClassGenerator.java) org.seasar.framework.aop.interceptors.ThrowsInterceptor.invoke(ThrowsInterceptor.java:79) carebase.action.administration.UserAccountCtlAction$$EnhancedByS2AOP$$66a0ba6c$$MethodInvocation$$newRegist5.proceed(MethodInvocationClassGenerator.java) carebase.action.administration.UserAccountCtlAction$$EnhancedByS2AOP$$66a0ba6c.newRegist(UserAccountCtlAction$$EnhancedByS2AOP$$66a0ba6c.java) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>>  sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:597) org.seasar.framework.util.MethodUtil.invoke(MethodUtil.java:96) org.seasar.struts.action.ActionWrapper.execute(ActionWrapper.java:139) org.seasar.struts.action.ActionWrapper.execute(ActionWrapper.java:87) org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431) org.seasar.struts.action.S2RequestProcessor.process(S2RequestProcessor.java:132) org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196) org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) javax.servlet.http.HttpServlet.service(HttpServlet.java:637) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.seasar.extension.filter.RequestDumpFilter.doFilter(RequestDumpFilter.java:127) org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:79)
>>  org.seasar.framework.container.hotdeploy.HotdeployFilter.doHotdeployFilter(HotdeployFilter.java:86) org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:67) org.seasar.struts.filter.RoutingFilter.forward(RoutingFilter.java:219) org.seasar.struts.filter.RoutingFilter.doFilter(RoutingFilter.java:99) org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:79) org.seasar.framework.container.hotdeploy.HotdeployFilter.doHotdeployFilter(HotdeployFilter.java:99) org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:67) org.seasar.extension.filter.EncodingFilter.doFilter(EncodingFilter.java:69) 
>> 注意 原因のすべてのスタックトレースは、Apache Tomcat/6.0.36のログに記録されています
>
>
>-- 
>{
>  name: "Koichi Kobayashi",
>  mail: "koichik @ improvement.jp",
>  blog: "http://d.hatena.ne.jp/koichik/",
>  twitter: "@koichik"
>}
>
>
>
>   
-------------- next part --------------
HTML$B$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...
URL: <http://ml.seasar.org/archives/seasar-user/attachments/20141224/e6076b9d/attachment.html>


Seasar-user メーリングリストの案内