Uploaded image for project: 'S2Dao.PHP5'
  1. S2Dao.PHP5
  2. DAOPHP-3

PDOトランザクションが正しく実行されない

XMLWordPrintable

    • Type: Icon: Bug Bug
    • Resolution: Fixed
    • Priority: Icon: Critical Critical
    • S2Dao.PHP5-1.1.1
    • Affects Version/s: S2Dao.PHP5-1.1.0-RC4
    • Component/s: S2Dao.PHP5
    • None
    • Environment:
      s2container.php5-1.1.0
      s2dao.php5-1.1.0-rc3
      MySQL 4.1.20
      PHP 5.1.2
      windows 2000

      例えばMemberEntryServiceを下記のように設定します。
      executeメソッドで、memberDaoを使って挿入処理を行います。

      <component name="service" class="MemberEntryServiceImpl">
          <aspect pointcut="execute">pdo.requiredTx</aspect>
          <property name="memberDao">memberDao</property>
      </component>
      
      <component name="memberDao" class="MemberDao">
          <aspect>dao.interceptor</aspect>
      </component>
      

      pdo.diconは下記の通りです。

      pdo.dicon
      <components namespace="pdo">
          <component name="dataSource" class="S2Container_PDODataSource">
              <property name="dsn">"mysql:host=localhost;dbname=test"</property>
              <property name="user">"root"</property>
              <property name="password">"test"</property>
              <property name="option">
                  array(PDO::ATTR_ORACLE_NULLS => PDO::NULL_EMPTY_STRING,
                           PDO::ATTR_AUTOCOMMIT => false);
              </property>
          </component>
      
          <component name="requiredTx" class="S2Dao_RequiredInterceptor" />
          <component name="requiresNewTx" class="S2Dao_RequiresNewInterceptor" />
          <component name="mandatoryTx" class="S2Dao_MandatoryInterceptor" />
          <component name="notSupportedTx" class="S2Dao_NotSupportedInterceptor" />
      </components>
      

      この状態で、MemberEntryServiceImplからexecuteしてみると、

      exception 'PDOException' with message 'There is already an active transaction' in
      c:\www\test\lib\S2Dao\S2Dao\S2Dao_AbstractTxInterceptor.class.php:45

      とエラーとなってしまいます。
      (<aspect pointcut="execute">pdo.requiredTx</aspect>を外して、
      PDO::ATTR_AUTOCOMMIT => trueとすれば挿入できます。)

            Assignee:
            nowel nowel
            Reporter:
            nowel nowel
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved: