-
Type: Bug
-
Resolution: Fixed
-
Priority: Critical
-
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とすれば挿入できます。)