<html><body><div style="color:; background-color:; font-family:MS PGothic, sans-serif;font-size:10pt"><div><span>小林様</span></div><div><br></div><div>対策方法を教えていただきありがとうございました。半蔵です。</div><div>下記の方法で、例外[ESSR0308]が発生しなくなりました。</div><span><div><br></div></span><div>&gt;3. 例外をスローしないようにする</div><div>実際に例外が発生しなくても、throws NamingExceptionを宣言するだけで</div><div>例外[ESSR0308]が発生する事に気付きませんでした。</div><div><br></div><div>以下のページも参考になりました。</div><div><a href="http://www.ibm.com/developerworks/jp/java/library/j_j-seasar03/">http://www.ibm.com/developerworks/jp/java/library/j_j-seasar03/</a></div><div><br></div><div>ありがとうございました。</div><div>(返信が遅れ失礼しました。)</div><div><br></div><blockquote
 style="padding-left: 5px; margin-top: 5px; margin-left: 5px; border-left-color: rgb(16, 16, 255); border-left-width: 2px; border-left-style: solid;">    <div style="font-family: MS PGothic, sans-serif; font-size: 10pt;">        <div style="font-family: MS PGothic, sans-serif; font-size: 12pt;">            <div dir="ltr">            <font face="Arial" size="2">                ----- Original Message -----<br>                <b><span style="font-weight: bold;">From:</span></b> Koichi Kobayashi &lt;koichik@improvement.jp&gt;<br>                <b><span style="font-weight: bold;">To:</span></b> hanzosuperdog@yahoo.co.jp; seasar-user@ml.seasar.org                <br><b><span style="font-weight: bold;">Cc:</span></b> "seasar-user@ml.seasar.org" &lt;seasar-user@ml.seasar.org&gt;<br>                <b><span style="font-weight: bold;">Date:</span></b> 2014/12/20, Sat 22:30<br>                <b><span style="font-weight: bold;">Subject:</span></b> Re:
 [Seasar-user:22014] ESSR0308の対応<br>            </font>            </div>            <br>小林 (koichik) です。<br><br>直前のスレッドと類似してますが、<br><br><a href="http://s2container.seasar.org/2.4/ja/tx.html" target="_blank">http://s2container.seasar.org/2.4/ja/tx.html</a><br><br>「トランザクションを開始した場合でも引き継いだ場合でも、<br>このインターセプタが適用されたメソッドが例外をスローした場合は、<br>例外の種類に応じてトランザクションがロールバックされるように<br>マークします。」<br><br>つまり、<br><br>public void foo() {<br>&nbsp; try {<br>&nbsp; &nbsp; bar();<br>&nbsp; } catch (...) {<br>&nbsp; &nbsp; ...<br>&nbsp; }<br>&nbsp; //(1)<br>}<br><br>public void bar() {<br>&nbsp; throw ...;<br>}<br><br>foo()とbar()の両方に宣言的トランザクション<br>(どちらもRequired)
 が適用されている場合、<br>foo()でトランザクションが開始されてbar()は<br>そのトランザクションの中で呼び出されますが、<br>bar()が例外をスローする (bar()に適用された<br>Requiredインターセプタを例外が通り抜ける)<br>ことにより、foo()で開始したトランザクションは<br>「ロールバックとしてマーク」されます。<br><br>そのため、上記(1)の位置で新たにJDBCコネクションを<br>取得しようとすると、コネクションを (ロールバックとして<br>マーク済みの) トランザクションに関連づけることが<br>できないために、例外[ESSR0308]が発生します。<br><br>宣言的トランザクションが適用されたメソッドは、<br>それ自身がトランザクションを開始した場合でなくても、<br>異常終了 (例外をスロー)
 するとトランザクションを<br>ロールバックする、というのが基本的な動作です。<br><br>対策としては、上記bar()に相当する (例外をスローする)<br>メソッドには:<br><br>1. 宣言的トランザクションを適用しない<br>2. RequiresNewにして外側のトランザクションとは独立にする<br>3. 例外をスローしないようにする<br><br>などがあります。<br><br><br>On Thu, 18 Dec 2014 18:29:17 +0900 (JST), <a href="mailto:hanzosuperdog@yahoo.co.jp" target="_self" ymailto="mailto:hanzosuperdog@yahoo.co.jp">hanzosuperdog@yahoo.co.jp</a> wrote:<br><br>&gt; はじめまして、半蔵です。<br>&gt; 下記の例外が、発生して対策が必要です。<br>&gt; 処理概要<br>&gt; newRegist(){<br>&gt; service1.addUser(entity);//&lt;-LDAPのサービス<br>&gt; ...<br>&gt; service2..findById(userid););//&lt;-DBのサービスで例外発生<br>&gt; }<br>&gt;
 難しい処理は、していないのですが、なぜか例外が発生します。<br>&gt; バージョンは、2.4.47を使っています。<br>&gt; 調べてみましたが、原因、対策が分からないため、質問します。<br>&gt; <br>&gt; 以上、よろしくお願いします。<br>&gt; HTTPステータス 500 - org.seasar.framework.exception.SIllegalStateException: <br>&gt; [ESSR0308]既にロールバックとしてマークされています<br>&gt; ________________________________<br>&gt; <br>&gt; type 例外レポート<br>&gt; メッセージ org.seasar.framework.exception.SIllegalStateException: <br>&gt; [ESSR0308]既にロールバックとしてマークされています<br>&gt; 説明 The server encountered an internal error that prevented it from <br>&gt; fulfilling this request.<br>&gt; 例外 <br>&gt; 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)<br>&gt;&nbsp;
 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) <br>&gt; 原因 <br>&gt; 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)<br>&gt;&nbsp; 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)<br>&gt;&nbsp; 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)<br>&gt;&nbsp; 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)<br>&gt;&nbsp; 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)<br>&gt;&nbsp; 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) <br>&gt; 注意 原因のすべてのスタックトレースは、Apache Tomcat/6.0.36のログに記録されています<br><br><br>-- <br>{<br>&nbsp; name: "Koichi Kobayashi",<br>&nbsp; mail: "<a href="mailto:koichik@improvement.jp" target="_self" ymailto="mailto:koichik@improvement.jp">koichik@improvement.jp</a>",<br>&nbsp; blog: "<a href="http://d.hatena.ne.jp/koichik/" target="_blank">http://d.hatena.ne.jp/koichik/</a>",<br>&nbsp; twitter: "@koichik"<br>}<br><br><br><br>        </div>    </div>    </blockquote>   
 </div></body></html>