[Seasar-user:9889] Re: [DbFlute]entity にidentityの値が設定されない

Yu Tagaya [E-MAIL ADDRESS DELETED]
2007年 8月 14日 (火) 13:01:54 JST


多加谷@アークシステムです。

 <property name="allowLocalTx">false</property>にすると、

Throwable:org.seasar.framework.exception.SIllegalStateException:
[ESSR0311]トランザクションが開始されていません

というエラーが出ます。設定がおかしいのでしょうか?
あと、複数のDB接続を扱う設定になっているのですが、それがおかしいと
いうことはありますか?

以下、diconです。

[dbflute.dicon]

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
 "http://www.seasar.org/dtd/components21.dtd">

<components namespace="dbflute">

    <include path="dbflute-pubs.dicon"/>
    <include path="dbflute-rktest.dicon"/>
    <include path="dbflute-rk.dicon"/>

</components>

[dbflute-rk.dicon]

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
 "http://www.seasar.org/dtd/components21.dtd">

<components namespace="dbflute">

    <include path="j2ee-rk.dicon"/>


    <!-- S2Dao component. -->
    <component class="org.seasar.dao.impl.FieldAnnotationReaderFactory"/>
    <component class="org.seasar.dao.impl.ValueTypeFactoryImpl"/>
    <component
class="jp.recruit.kaigi.rkdao.dbflute.rk.allcommon.s2dao.RkS2DaoMetaDataFactoryImpl"/>
    <component name="interceptor"
class="jp.recruit.kaigi.rkdao.dbflute.rk.allcommon.s2dao.RkS2DaoInterceptor"/>

    <component
class="jp.recruit.kaigi.rkdao.dbflute.rk.allcommon.s2dao.RkS2BeanMetaDataFactoryImpl"/>
    <component class="org.seasar.dao.impl.DaoNamingConventionImpl"/>
    <component class="org.seasar.dao.impl.BeanEnhancerImpl"/>

    <!-- Common column setup interceptor. -->
    <component name="commonColumnSetupBeforeInsertInterceptor"
class="jp.recruit.kaigi.rkdao.dbflute.rk.allcommon.interceptor.RkCommonColumnSetupBeforeInsertInterceptor"/>
    <component name="commonColumnSetupBeforeUpdateInterceptor"
class="jp.recruit.kaigi.rkdao.dbflute.rk.allcommon.interceptor.RkCommonColumnSetupBeforeUpdateInterceptor"/>
    <component name="commonColumnSetupBeforeDeleteInterceptor"
class="jp.recruit.kaigi.rkdao.dbflute.rk.allcommon.interceptor.RkCommonColumnSetupBeforeDeleteInterceptor"/>

    <!-- Dao selector. -->
    <component name="daoSelector"
class="jp.recruit.kaigi.rkdao.dbflute.rk.allcommon.RkCacheDaoSelector">
        <destroyMethod name="destroy"/>
    </component>


    <!-- Original dao component. -->


    <!-- Original behavior aspect. -->


    <!-- AppliRole -->

    <component name="rkAppliRoleDao"
class="jp.recruit.kaigi.rkdao.dbflute.rk.exdao.RkAppliRoleDao">
        <aspect>dbflute.interceptor</aspect>
    </component>

    <component name="rkAppliRoleBhv"
class="jp.recruit.kaigi.rkdao.dbflute.rk.exbhv.RkAppliRoleBhv">
        <aspect pointcut=".*NewTx">requiresNewTx</aspect>
        <aspect pointcut=".*Tx">requiredTx</aspect>
        <aspect pointcut="delegateInsert.*, delegateCreate.*, delegateAdd.*,
callInsert.*, callCreate.*,
callAdd.*">dbflute.commonColumnSetupBeforeInsertInterceptor</aspect>
        <aspect pointcut="delegateUpdate.*, delegateModify.*,
delegateStore.*, callUpdate.*, callModify.*,
callStore.*">dbflute.commonColumnSetupBeforeUpdateInterceptor</aspect>
        <aspect pointcut="delegateDelete.*, delegateRemove.*, callDeletee.*,
callRemove">dbflute.commonColumnSetupBeforeDeleteInterceptor</aspect>

    </component>

 (省略)

</components>

[j2ee.dicon]

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
 "http://www.seasar.org/dtd/components21.dtd">
<components namespace="j2ee">
 <component name="transactionManager"
  class="org.seasar.extension.jta.TransactionManagerImpl"/>
 <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="jp.recruit.kaigi.rkdao.dbflute.rk.allcommon.s2dao.RkFetchNarrowingResultSetFactory"/>
   <component
class="jp.recruit.kaigi.rkdao.dbflute.rk.allcommon.s2dao.RkS2DaoStatementFactory"/>
  <!--
 <component class="org.seasar.extension.jdbc.impl.OracleResultSetFactory"/>
 <component
class="org.seasar.extension.jdbc.impl.BooleanToIntStatementFactory"/>
 -->


  <component name="xaDataSource"
  class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
  <property name="driverClassName">
   "com.microsoft.sqlserver.jdbc.SQLServerDriver"
        </property>
        <property name="URL">
            "jdbc:sqlserver://localhost:1433"
        </property>
        <property name="user">"***"</property>
        <property name="password">"***"</property>
    </component>

 <component name="connectionPool"
  class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl">
  <property name="timeout">600</property>
  <property name="maxPoolSize">10</property>
  <!-- JTAトランザクションが開始されていない場合にコネクションを
       取得できないようにするには次のプロパティをfalseにしてください.-->
  <!--
  <property name="allowLocalTx">false</property>
  -->
  <!--
  -->
  <property name="allowLocalTx">true</property>

  <!--explicitly set isolation level-->
  <property
name="transactionIsolationLevel">@[E-MAIL ADDRESS DELETED]</property>

  <destroyMethod name="close"/>
 </component>
 <component name="dataSource"
  class="org.seasar.extension.dbcp.impl.DataSourceImpl"/>

</components>

[rkbiz.dicon]

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
 "http://www.seasar.org/dtd/components21.dtd">
<components>

    <include path="j2ee-rk.dicon"/>

 <component name="myRI" class="org.seasar.extension.tx.RequiredInterceptor">
 </component>

 <component 
class="jp.recruit.kaigi.rkbiz.facade.M020.M020FacadeImpl"><aspect>myRI</aspect></component>

(省略)

</components>


> 小林 (koichik) です.
>
> Date:    Tue, 14 Aug 2007 02:09:17 +0900
> From:    kubo <[E-MAIL ADDRESS DELETED]>
> To:      [E-MAIL ADDRESS DELETED]
> Subject: [Seasar-user:9881] Re: [DbFlute]entity にidentityの値が設定されない 
> 
>
>
>> SQLServerがどうだったかわかりませんが、例えばMySQLなどでは、
>> 「トランザクションが発行されていないとInsertしたIdentityの値を取得できない」 
>> 
>>
>> というようなことがあります。
>> ですが、ログを見るとしっかり「トランザクションをコミットしました 」と
>> ありますね。。。
>
> あまり可能性は高くないと思いますが,
> トランザクションを開始/コミットしている
> トランザクションマネージャと,コネクション
> プールに DI されているトランザクション
> マネージャが異なっているとか.
>
> j2ee.dicon または jdbc.dicon の ConnectionPool の
> 設定で,
>
> <component name="connectionPool"
>  class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl">
>  <property name="timeout">600</property>
>  <property name="maxPoolSize">10</property>
>  <property name="allowLocalTx">false</property><!-- ここ -->
>  <destroyMethod name="close"/>
> </component>
>
> allowLocalTx を false にすると,コネクション
> プールに DI されているトランザクションマネージャが
> トランザクションを開始していないと例外がスロー
> されるので,確認してみてはいかがでしょうか>多加谷さん
>
>
> -- 
> <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 メーリングリストの案内