[Seasar-user:6900] Re: S2Dao,S2Pager 実際のデータ件数より大きいオフセット値を指定するとSqlExceptionになる
寺尾 浩平
[E-MAIL ADDRESS DELETED]
2007年 3月 27日 (火) 19:04:07 JST
本間様
お世話になります。寺尾です。
諸事情で、返信が大変遅くなり申し訳ありませんでした。
S2Dao,S2Pager 実際のデータ件数より大きいオフセット値を指定するとSqlExceptionになる件で
diconの情報を送ります。
> j2ee.diconでorg.seasar.dao.pager.PagerResultSetFactoryWrapper
> が登録されているかご確認いただけますか?
j2ee.dicon にはorg.seasar.dao.pager.PagerResultSetFactoryWrapperは登録していませんでした。
【j2ee.dicon】
<components namespace="j2ee">
<component name="requiredTx"
class="org.seasar.extension.tx.RequiredInterceptor"/>
<component name="requiresNewTx"
class="org.seasar.extension.tx.RequiresNewInterceptor"/>
<component name="mandatoryTx"
class="org.seasar.extension.tx.MandatoryInterceptor"/>
<component name="notSupportedTx"
class="org.seasar.extension.tx.NotSupportedInterceptor"/>
<component class="org.seasar.extension.jdbc.impl.BasicResultSetFactory"/>
<component class="org.seasar.extension.jdbc.impl.BasicStatementFactory"/>
<!-- 開発環境では以下を使用 -->
<component name="transactionManager"
class="org.seasar.extension.jta.TransactionManagerImpl"/>
<!-- env.properties対応 -->
<component name="ENV"
class="jp.co.intec.solves4.framework.web.PropertiesManager">
<initMethod name="load"><arg>"env.properties"</arg></initMethod>
</component>
<component name="xaDataSource"
class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
<property name="driverClassName">"com.ibm.db2.jcc.DB2Driver"</property>
<property name="URL">ENV.getProperty("URL",
"jdbc:db2://10.65.112.211:60010/BSDB")</property>
<property name="user">ENV.getProperty("user", "s4dbadm")</property>
<property name="password">ENV.getProperty("password",
"s4dbadm")</property>
</component>
<component name="connectionPool"
class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl">
<property name="timeout">600</property>
<property name="maxPoolSize">10</property>
<property name="allowLocalTx">true</property>
<destroyMethod name="close"/>
</component>
<component name="dataSource"
class="org.seasar.extension.dbcp.impl.DataSourceImpl"/>
</components>
dao.dicon にはorg.seasar.dao.pager.PagerResultSetFactoryWrapperが登録されています。
以前スクロール可能なカーソルを利用していると CLOB型のデータ取得ができなかったので
設定を変更しています。
【dao.dicon】
<components namespace="dao">
<include path="j2ee.dicon"/>
<component
name="annotationReaderFactory"
class="org.seasar.dao.impl.FieldAnnotationReaderFactory"/>
<component
class="org.seasar.dao.impl.ValueTypeFactoryImpl"/>
<!--
<component
name="stringClobType"
class="org.seasar.extension.jdbc.types.StringClobType"/>
-->
<component name="resultSetFactory"
class="org.seasar.dao.pager.PagerResultSetFactoryWrapper">
<arg>
<component class="org.seasar.extension.jdbc.impl.BasicResultSetFactory"/>
</arg>
<property name="useScrollCursor">false</property>
</component>
<!--
<component
name="resultSetFactory"
class="org.seasar.dao.pager.PagerResultSetFactoryLimitOffsetWrapper">
<arg>
<component class="org.seasar.extension.jdbc.impl.BasicResultSetFactory"/>
</arg>
<arg>j2ee.dataSource</arg>
</component>
-->
<component
class="org.seasar.dao.impl.DaoMetaDataFactoryImpl">
<arg>j2ee.dataSource</arg>
<!--
<arg>
<component class="org.seasar.dao.pager.PagerStatementFactory"/>
</arg>
-->
<arg>
<component class="org.seasar.extension.jdbc.impl.BasicStatementFactory"/>
</arg>
<arg>resultSetFactory</arg>
<arg>annotationReaderFactory</arg>
</component>
<component name="interceptor"
class="org.seasar.dao.pager.PagerS2DaoInterceptorWrapper">
<arg>
<component name="s2dao"
class="org.seasar.dao.interceptors.S2DaoInterceptor">
</component>
</arg>
</component>
<!--
<component
class="org.seasar.dao.impl.DaoMetaDataFactoryImpl"/>
<component name="interceptor"
class="org.seasar.dao.interceptors.S2DaoInterceptor"/>
-->
<component class="org.seasar.dao.impl.BeanMetaDataFactoryImpl"/>
<component class="org.seasar.dao.impl.DaoNamingConventionImpl"/>
<component class="org.seasar.dao.impl.BeanEnhancerImpl"/>
</components>
> 本間です。
>
> on Tue, 20 Mar 2007 19:21:05 +0900
> in [Seasar-user:6787] S2Dao,S2Pager 実際のデータ件数より大きいオフセット値を指定するとSqlExceptionになる
> 寺尾 浩平 <[E-MAIL ADDRESS DELETED]> wrote:
>
>> S2DaoとS2Pagerを利用してデータをSELECTする際に
>> 実際のデータ件数より大きいオフセット値を指定すると
>> SqlExceptionがスローされてしまいます。
>> このケースは正常系にするのが普通なので
>> S2Daoでnullを返すように
>> していただけないでしょうか?
>
> 手元にDB2環境が無いため手探りなのですが...
>
>> *********************************************
>> Exception Type: com.ibm.db2.jcc.a.SqlException
>> Message: [ibm][db2][jcc][10120][10898] 操作が無効です: result set はクローズされています。
>>
>> StackTrace:
>> *********************************************
>> at com.ibm.db2.jcc.a.cg.mb(cg.java:3224)
>> at com.ibm.db2.jcc.a.cg.q(cg.java:1261)
>> at com.ibm.db2.jcc.a.cg.getMetaData(cg.java:1253)
>> at
>> org.seasar.extension.jdbc.impl.ResultSetWrapper.getMetaData(ResultSetWrapper.java:728)
>> at
>> org.seasar.dao.impl.BeanListMetaDataResultSetHandler.handle(BeanListMetaDataResultSetHandler.java:45)
>> at
>> org.seasar.extension.jdbc.impl.BasicSelectHandler.execute(BasicSelectHandler.java:163)
>> at
>> org.seasar.extension.jdbc.impl.BasicSelectHandler.execute(BasicSelectHandler.java:135)
>> at
>> org.seasar.extension.jdbc.impl.BasicSelectHandler.execute(BasicSelectHandler.java:120)
>> at
>> org.seasar.dao.impl.SelectDynamicCommand.execute(SelectDynamicCommand.java:60)
>
> スタックトレースにPagerResultSetWrapperが含まれていないのが
> 気になりました。
> (Pagerが効いている場合はResultSetWrapperのあたり登場すると思
> います)
>
> j2ee.diconでorg.seasar.dao.pager.PagerResultSetFactoryWrapper
> が登録されているかご確認いただけますか?
>
> (もしくはお送りくださってもかまいません。dao.diconをカスタマ
> イズされている場合は、こちらも頂けましたらと思います。)
>
> よろしくお願いいたします。
>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
Seasar-user メーリングリストの案内