У меня есть приложение j2ee, работающее на Spring Framework. Я пытаюсь применить управление транзакциями, используя aop, но, видимо, это не сработает. Я пытаюсь применить транзакцию к функции из класса с именем RegisterBLogic с именем функции execute (ParamObject obj). Моя функция вставляет в базу данных. Я также помещаю функцию выброса ne Exception, чтобы вызвать исключение.
Внутри userManagerContext:
<bean id="RegisterBLogic"
scope="singleton"
class="jp.co.anicom.fw.web.usermanager.blogic.RegisterBLogic">
<property name="queryDAO"
ref="queryDAO" /> <property
name="updateDAO" ref="updateDAO" />
</bean>
Внутри приложенияContext
<bean id="TerasolunaDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="PrototypeDataSource" />
</bean>
<tx:advice id="transactionInterceptor" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="insert*" propagation="REQUIRED"
rollback-for="java.lang.Exception" />
<tx:method name="execute*" propagation="REQUIRED"
rollback-for="java.lang.Exception" />
<tx:method name="*" propagation="REQUIRED" read-only="true" />
</tx:attributes>
</tx:advice>
<!-- AOPの設定 -->
<aop:config>
<aop:pointcut id="blogicBeans" expression="bean(*BLogic)" />
<aop:pointcut id="serviceBeans" expression="bean(*Service)" />
<aop:advisor pointcut-ref="blogicBeans" advice-ref="transactionInterceptor" />
<aop:advisor pointcut-ref="serviceBeans" advice-ref="transactionInterceptor" />
</aop:config>
Да, эти бобы уже существуют. У меня есть это объявление bean под userManagerCOntext.xml. Этот xml загружается в конфигурацию распорок через
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"
value="/WEB-INF/userManager/userManagerContext.xml"/>
</plug-in>
Я нашел проблему. В настоящее время я использую источник данных из JNDI.
класс = "org.springframework.jndi.JndiObjectFactoryBean">
Я изменил его на обычный источник данных со свойством defaultAutoCommit, установленным в false
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="oracle.jdbc.OracleDriver" />
<property name="url"
value="jdbc:oracle:thin:@192.168.178.82:1521:anicom" />
<property name="username" value="jay" />
<property name="password" value="jay" />
<property name="initialSize" value="5" />
<property name="maxActive" value="10" />
<property name="defaultAutoCommit" value="false" />
</bean>
Как использовать источник данных JNDI, но иметь возможность установить для свойства, несколько похожего на defaultAutoCommit, значение false. Я использую сервер Oracle weblogic, и мой источник данных хранится в нем, доступ к которому осуществляется через JNDI