Привет всем, я выполнил настройку приложения, используя hybernate + JPA, и атомикос для управления транзакциями XA и spring 3.0, а mysql - мой бэкэнд, здесь все работает нормально, однако операция вставки, когда возникает исключение, транзакция должна откатиться, но это не происходит!! вот небольшой поток для нашего приложения, на уровне нашего менеджера мы называем бизнес (здесь мы используем Spring IOC) мой
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 (сущность объекта)
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>
and my persistence.xml file is
<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 в application/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>
где проблема? На самом деле, когда я пытаюсь обновить какое-то свойство в таблице, транзакция работает нормально (происходит откат и фиксация), но когда я пытаюсь выполнить операцию вставки, откат не происходит.
log4j.logger.org.springframework.transaction=DEBUGв свою конфигурацию log4j (или эквивалент того, что вы используете для ведения журнала) и посмотрите, действительно ли используются транзакции. Это лучший вариант для отладки подобных вещей. Если у вас все еще есть проблемы, обновите свой пост с информацией. (Кстати, вы можете отредактировать свой пост, чтобы добавить информацию, а не публиковать его как ответ.) - person Henning   schedule 10.12.2010