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