[seasar-dotnet:1030] Re: QuillTestCaseのトランザクションについて
kubo
[E-MAIL ADDRESS DELETED]
2008年 10月 21日 (火) 18:29:45 JST
久保(jflute)です。
森脇さん、こんばんは
詳しい人が多分夏休みでしばらくいないので
取り急ぎ回答します。
> 動きで気になる点としては以下のような感じです。
> a.Insertを初回に実行するとロールバックされる
> b.SelectEntityを実行後にInsertが実行されるとロールバックしない
確認ですが「SelectEntityを実行後にInsertが実行されると」
というのは、
1.「SelectEntityのテストを実行後、Insertのテストを実行すると」
でしょうか?それとも、
2.「同じテストメソッド内で、SelectEntity()してInsert()すると」
でしょうか?
ソースコードから前者だと思われますが。。。
ちなみに、dbflute-noracle-exampleというのも存在していて、
そちらで上記の「1」と「2」を両方ともやってみましたが、
再現しませんでした。(別のツールでDBを検索して確認しました)
設定の違いは、ぱっと見た限りはDataProviderが
MS提供のものかOracle純正のものかだけのように思えます。
試しにOracle純正のDataProviderを利用してみるのもいいかも
しれません。
(OracleClientのインストールとかちょっと環境整えるの
面倒かもしれませんが。。。)
2008/10/21 k. moriwaki <[E-MAIL ADDRESS DELETED]>:
> 森脇と申します。
>
> DBFluteのサンプルソース(dbflute-nbasic-example)と同じような
> Bhvのテストケースを作成し、MbUnitで実行したのですがトランザクションが
> ロールバックされない現象が起きました。
>
> MbUnitのGUIに表示されているログは「ロールバックされました」と表示されているのですが、
> 実際にはDBにInsertされており、二回目以降でPK重複エラーになってしまいます。
> 動きで気になる点としては以下のような感じです。
> a.Insertを初回に実行するとロールバックされる
> b.SelectEntityを実行後にInsertが実行されるとロールバックしない
> dbflute-nbasic-exampleに同梱されていたMbUnitを使用しており、
> そちらのテストケースはすべて成功します。
>
> 以下に挙げる設定で何か不足している点などありますでしょうか?
>
>
>
> 環境
> OS:Windows XP SP3
> 言語:VB(.NET Framework2.0)
> 開発環境:VisualStudio 2005
> DB:Oracle 10.1.0.2.0
> S2Container.NET,S2Dao.NET:1.3.12
> DBFlute 0.8.1
>
>
> ----- MbUnitのログ -----
> INFO (Logger#Info():0) - [IQLL0003]Quill設定ファイル(ある=true,なし=false):True
> DEBUG (Logger#Log():0) - 論理的なコネクションを取得しました
> DEBUG (Logger#Log():0) - トランザクションを開始しました
> DEBUG (S2DaoMetaDataFactoryImpl#GetDaoMetaData():68) - ...Creating
> daoMetaData for 'CodeMstDao'.
> DEBUG (S2DaoMetaDataExtension#GetSqlCommand():76) -
> ...Initializing sqlCommand for Insert().
> DEBUG (XLog#Log():21) -
> /========================================================================
> DEBUG (XLog#Log():21) -
> CodeMstBhv.Insert()
> DEBUG (XLog#Log():21) -
> ==================/
> DEBUG (QLog#Log():22) - INSERT INTO CODE_MST (NAME, CODE,
> VERSION_NO) VALUES ('テスト', '999', 0)
> DEBUG (XLog#Log():21) - ===========/ [00m00s016ms - Result: 1]
> DEBUG (XLog#Log():21) -
> DEBUG (Logger#Log():0) - トランザクションをロールバックしました
> DEBUG (Logger#Log():0) - 論理的なコネクションを閉じました
>
>
> ----- App.config -----
> <?xml version="1.0" encoding="utf-8" ?>
> <configuration>
>
> <configSections>
> <section name="log4net"
> type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
> <section name="quill"
> type="Seasar.Quill.Xml.QuillSectionHandler, Seasar.Quill"/>
> </configSections>
>
> <quill>
> <dataSources>
> <dataSource name="KankyoDB">
> <provider>Oracle</provider>
> <connectionString>"Data Source=hogedb;User
> Id=hoge;Password=hoge;"</connectionString>
> <class>Seasar.Extension.Tx.Impl.TxDataSource</class>
> </dataSource>
> </dataSources>
> <assemblys>
> <assembly>System.Data.OracleClient, version=2.0.0.0,
> Culture=neutral, PublicKeyToken=b77a5c561934e089</assembly>
> </assemblys>
> </quill>
>
> <log4net>
> <appender name="DebugLogFileAppender"
> type="log4net.Appender.RollingFileAppender">
> <file value="C:\tmp\log\dbflute-nbasic-example-debug.log"/>
> <appendToFile value="true"/>
> <rollingStyle value="Date"/>
> <datePattern value="yyyyMMdd"/>
> <layout type="log4net.Layout.PatternLayout">
> <conversionPattern value="%date [%t] %-5level
> (%C{1}#%M():%L) - %m%n"/>
> </layout>
> </appender>
> <appender name="DebugConsoleAppender"
> type="log4net.Appender.ConsoleAppender">
> <layout type="log4net.Layout.PatternLayout">
> <conversionPattern value="%-5level (%C{1}#%M():%L) - %m%n"/>
> </layout>
> </appender>
> <root>
> <level value="DEBUG" />
> <appender-ref ref="DebugConsoleAppender"/>
> </root>
> </log4net>
>
> </configuration>
>
>
> ----- App.config -----
> namespace App.DB.Example.DBFlute
> {
> [TestFixture]
> public class BehaviorTest : QuillTestCase
> {
> /// <summary>
> /// Log
> /// </summary>
> private static readonly log4net.ILog m_log =
>
> log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
>
> /// <summary>
> /// BehaviorSelector
> /// </summary>
> protected BehaviorSelector m_Selector;
>
> /// <summary>
> /// Setup
> /// </summary>
> [MbUnit.Framework.SetUp]
> public void Before()
> {
> log4net.Config.XmlConfigurator.Configure();
>
> AccessContext context = new AccessContext();
> context.AccessTimestamp = DateTime.Now;
> context.AccessUser = "testUser";
> context.AccessProcess = "testProcess";
> AccessContext.SetAccessContextOnThread(context);
> }
>
> /// <summary>
> /// TearDown
> /// </summary>
> [MbUnit.Framework.TearDown]
> public void After()
> {
> AccessContext.ClearAccessContextOnThread();
> }
>
> /// <summary>
> /// selectEntity
> /// </summary>
> [Test, Quill(Tx.Rollback)]
> public void SelectEntity()
> {
> // ## Arrange ##
> CodeMstCB cb = new CodeMstCB();
> cb.Query().SetCode_Equal("01");
>
> // ## Act ##
> CodeMstBhv bhv = m_Selector.Select<CodeMstBhv>();
> CodeMst code = bhv.SelectEntity(cb);
>
> // ## Assert ##
> m_log.Debug(code.ToString());
> Assert.AreEqual("01", code.Code);
> }
>
> /// <summary>
> /// Insert
> /// </summary>
> [Test, Quill(Tx.Rollback)]
> public void Insert()
> {
> // ## Arrange ##
> CodeMst code = new CodeMst();
> code.Code = "999";
> code.Name = "テスト";
>
> // ## Act ##
> CodeMstBhv bhv = m_Selector.Select<CodeMstBhv>();
> bhv.Insert(code);
> }
>
> }
> }
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>
seasar-dotnet メーリングリストの案内