[Seasar-user:15021] Re: JdbcManagerのIterationCallbackについて

Satoru Ogura [E-MAIL ADDRESS DELETED]
2008年 7月 14日 (月) 11:23:56 JST


お世話になっております。
小椋と申します。

小林さん、回答ありがとうございます。

開発環境のWindowsでは例外が発生するのですが、
実行環境のLinuxでは例外が発生しないのです。(発生してもcatchできてない??)
小林さんのサンプルのように「throw new RuntimeException();」
のみ記述すればWindowsでもLinuxでも例外は発生します。

発生条件は、
iterator処理中に「DB停止」です。
コードも極限まで削除して iterator 内はtry catchのみでテストしました。

Windowsではコールバックメソッドの中で明示的にthrowしなくても
例外をcatchできました。
[ESSR0072]SQLで例外(SQL=[], Message=[I/O Error: Connection reset : [Connection reset], ErrorCode=0, SQLState=08S01)が発生しました

2008-07-14 09:57:37,468 [http-8080-Processor25] ERROR
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/buhin].[buhinBatch] - サーブレット buhinBatch のServlet.service()が
例外を投げました
java.net.SocketException: Connection reset
	at java.net.SocketInputStream.read(SocketInputStream.java:168)
	at java.io.DataInputStream.readFully(DataInputStream.java:176)
	at java.io.DataInputStream.readFully(DataInputStream.java:152)
	at net.sourceforge.jtds.jdbc.SharedSocket.readPacket(SharedSocket.java:841)
	at net.sourceforge.jtds.jdbc.SharedSocket.getNetPacket(SharedSocket.java:722)
	at net.sourceforge.jtds.jdbc.ResponseStream.getPacket(ResponseStream.java:466)
	at net.sourceforge.jtds.jdbc.ResponseStream.read(ResponseStream.java:135)
	at net.sourceforge.jtds.jdbc.ResponseStream.readString(ResponseStream.java:290)
	at net.sourceforge.jtds.jdbc.ResponseStream.readNonUnicodeString(ResponseStream.java:274)
	at net.sourceforge.jtds.jdbc.TdsData.readData(TdsData.java:936)
	at net.sourceforge.jtds.jdbc.TdsCore.tdsRowToken(TdsCore.java:3003)
	at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2266)
	at net.sourceforge.jtds.jdbc.TdsCore.getNextRow(TdsCore.java:764)
	at net.sourceforge.jtds.jdbc.JtdsResultSet.next(JtdsResultSet.java:593)
	at org.seasar.extension.jdbc.handler.BeanIterationAutoResultSetHandler.handle(BeanIterationAutoResultSetHandler.java:71)
	at org.seasar.extension.jdbc.query.AbstractQuery.handleResultSet(AbstractQuery.java:441)
	at org.seasar.extension.jdbc.query.AbstractSelect.iterateInternal(AbstractSelect.java:261)
	at org.seasar.extension.jdbc.query.AbstractSelect.iterate(AbstractSelect.java:182)
	at xxxxxx.service.impl.BuhinBatchServiceImpl.startBatch(BuhinBatchServiceImpl.java:45)
	at
xxxxxx.service.impl.BuhinBatchServiceImpl$$EnhancedByS2AOP$$b125bd.$$startBatch$$invokeSuperMethod$$(BuhinBatchServiceImpl$$Enhanced
ByS2AOP$$b125bd.java)
	at
xxxxxx.service.impl.BuhinBatchServiceImpl$$EnhancedByS2AOP$$b125bd$$MethodInvocation$$startBatch0.proceed(MethodInvocationClassGener
ator.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
xxxxxx.service.impl.BuhinBatchServiceImpl$$EnhancedByS2AOP$$b125bd$$MethodInvocation$$startBatch0.proceed(MethodInvocationClassGener
ator.java)
	at org.seasar.framework.aop.interceptors.TraceInterceptor.invoke(TraceInterceptor.java:56)
	at
xxxxxx.service.impl.BuhinBatchServiceImpl$$EnhancedByS2AOP$$b125bd$$MethodInvocation$$startBatch0.proceed(MethodInvocationClassGener
ator.java)
	at
xxxxxx.service.impl.BuhinBatchServiceImpl$$EnhancedByS2AOP$$b125bd.startBatch(BuhinBatchServiceImpl$$EnhancedByS2AOP$$b125bd.java)
	at xxxxxx.servlet.BuhinBatchServlet.doGet(BuhinBatchServlet.java:33)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
	at org.seasar.extension.filter.EncodingFilter.doFilter(EncodingFilter.java:69)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
	at org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:70)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
	at org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:77)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
	at java.lang.Thread.run(Thread.java:595)

Linuxでは例外が発生しないのでcatchできません。

ちなみにJDK等のバージョンも全て同一です。
とりあえず件数チェックで凌いでおりますが、Windowsでは正常なのにLinuxでは動作しないのはありえるのでしょうか?
seasarの問題ではなく環境依存のような気がしてきました。

--------------------------------
環境
seasar 2.4.25
os:Red Hat Enterprise Linux AS Version4
tomcat:5.5.25
jdk:1.5.0.13
jdbcDriver jtds 1.2.2
外部接続サーバーSQL Server 2000


> -----Original Message-----
> From: [E-MAIL ADDRESS DELETED]
> [mailto:[E-MAIL ADDRESS DELETED]]On Behalf Of Koichi Kobayashi
> Sent: Sunday, July 13, 2008 12:00 AM
> To: [E-MAIL ADDRESS DELETED]
> Subject: [Seasar-user:15018] Re: JdbcManagerのIterationCallbackについて
>
>
> 小林 (koichik) です.
>
> Date:    Sat, 12 Jul 2008 12:58:30 +0900
> From:    "Satoru Ogura" <[E-MAIL ADDRESS DELETED]>
> To:      <[E-MAIL ADDRESS DELETED]>
> Subject: [Seasar-user:15015] JdbcManagerのIterationCallbackについて
>
> > callback関数の例外を外に通知するにはどのようにすればいいでしょうか?
>
> S2JDBC 側では例外を処理していないので,そのまま外にスロー
> されます.
> ただし,S2JDBC が JDBC API を呼び出し中に SQLException が
> 発生した場合は,SQLRuntimeException にラップされます.
>
> コールバックメソッドの中で例外をスローしてみれば,
> それがそのまま外にスローされてくることを確認できます.
>
> @Test(expected = RuntimeException.class)
> public void testThrowsException() throws Exception {
>     jdbcManager.from(Employee.class).iterate(
>         new IterationCallback<Employee, Void>() {
>             public Void iterate(Employee entity, IterationContext context) {
>                 throw new RuntimeException();
>             }
>         });
> }
>
> > その結果、callback関数は途中で処理が中断されましたが、
>
> この「中断された」は具体的に何が起きたのでしょうか?
>
>
> --
> <component name="koichik">
>     <property name="fullName">"Koichi Kobayashi"</property>
>     <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
>     <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
> </component>
>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>




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