[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 メーリングリストの案内