Привет всем Я сделал конфигурацию приложения, используя hybernate + JPA, и atomikos для управления трансацией XA и весной 3.0, а mysql - это мой бэкэнд, здесь все работает нормально, но вставлять операцию, когда исключение бросает transcation должен откат, но это не происходит !! вот небольшой поток для нашего приложения, в нашем уровне менеджера мы называем Businesss (здесь мы используем Spring IOC) моегоОткат транзакции JPA не работает
Manager.java
insertuser()
{
//here we are getting transcation support from spring.
business.insertuser();
}
business.java мы используем один метод insertuser()
insertuser()
{
Tauser taUser=new Tauser();
taUser.setUsername("Maya");
taUser.setPassword("*****")
Dao.insertDetails(taUser);
throw new NullPointerException("checking transcation management");
// because of this exception throwing,it should rollback right,
but its not happening.The property's are commiting in to the table.
}
и наш dao.java класс мы используем один метод insertuser (объект Object)
void insertDetails(Object entity)
{
this.getJpaTemplate().persist(entity);
}
и наш orm.xml
<entity class="TaUser" name="TaUser">
<table name="ta_user" />
<attributes>
<id name="userId">
<column name="USER_ID" />
<generated-value strategy="AUTO" />
</id>
<basic name="userName">
<column name="USER_NAME" length="50" />
</basic>
</attributes>
и мой файл persistence.xml является
<persistence-unit name="shop" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:comp/env/jdbc/shobWeb</jta-data-source>
<mapping-file>META-INF/orm.xml</mapping-file>
<class>TaUser</class>
---------
---------
---------
<properties>
<property name="hibernate.transaction.manager_lookup_class"
value="com.atomikos.icatch.jta.hibernate3.TransactionManagerLookup"/>
</properties>
</persistence-unit>
</persistence>
и я настроил мой JNDI в приложении/meta_inf/context.xml
<Resource name="jdbc/shobWeb" auth="Container"
driverClassName="com.mysql.jdbc.Driver"
user="root"
password="root"
type="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource"
factory="com.mysql.jdbc.jdbc2.optional.MysqlDataSourceFactory"
url="jdbc:mysql://localhost:3306/shobWebSample"
explicitUrl="true"
pinGlobalTxToPhysicalConnection="true"
></Resource>
и мой конфигурационный файл является config.xml
<beans:bean id="Manager"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<beans:property name="transactionManager">
<beans:ref bean="transactionManager" />
</beans:property>
<beans:property name="target">
<beans:ref local=" ManagerTarget" />
</beans:property>
<beans:property name="transactionAttributes">
<beans:props>
<beans:prop key="*">PROPAGATION_REQUIRED</beans:prop>
</beans:props>
</beans:property>
</beans:bean>
<beans:bean id="ManagerTarget"
class="Manager">
<beans:property name="Business" ref="Business" />
</beans:bean>
<beans:bean id="Business" class="PaymentsBusiness">
<beans:property name="Dao" ref=" Dao" />
</beans:bean>
<beans:bean id="Dao"
class=" Dao">
<beans:property name="jpaTemplate">
<beans:ref bean="jpaTemplate" />
</beans:property>
</beans:bean>
<beans:bean id="jpaTemplate" class="org.springframework.orm.jpa.JpaTemplate">
<beans:property name="entityManagerFactory">
<beans:ref bean="entityManagerFactory" />
</beans:property>
</beans:bean>
<beans:bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<beans:property name="persistenceUnitName" value="shop" />
<beans:property name="jpaVendorAdapter">
<beans:bean
class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<beans:property name="generateDdl" value="false" />
<beans:property name="showSql" value="true" />
</beans:bean>
</beans:property>
<beans:property name="persistenceXmlLocation">
<bean:value>classpath:META-INF/persistence.xml</beans:value>
</beans:property>
</beans:bean>
где проблема? Фактически, когда я пытаюсь обновить какое-либо свойство в таблице, тогда транзакция работает нормально (откат и фиксация происходит), но когда я пытаюсь выполнить операцию вставки, откат не происходит.
Можете ли вы предоставить больше своего фактического кода (конечно же, с любыми конкретными компаниями)? Похоже, транзакция закрывается и совершается после вашего звонка в DAO, что явно не то, что вы пытаетесь сделать. – 2010-12-08 13:04:53