spring+hibernate+jpa配置JTA事务出错,如何解决?
我使用了spring3.0+hibernate3.3.2+JPA,其中JPA的事务采用JTA的方式,部署在weblogic10.3.2中,但是无法成功初始化,我知道问题出在JTA的配置中,JNDI数据源我也在Weblogic中配置了,但项目还是无法初始化,下面是异常信息:
?<2010-3-15 下午08时46分09秒 CST> <Error> <Deployer> <BEA-149205> <Failed to initialize the application '_appsdir_sshdj2_dir' due to error weblogic.application.ModuleException: Failed to load webapp: 'sshdj2'.
weblogic.application.ModuleException: Failed to load webapp: 'sshdj2'
?at weblogic.servlet.internal.WebAppModule.prepare(WebAppModule.java:378)
?at weblogic.application.internal.flow.ScopedModuleDriver.prepare(ScopedModuleDriver.java:176)
?at weblogic.application.internal.flow.ModuleListenerInvoker.prepare(ModuleListenerInvoker.java:199)
?at weblogic.application.internal.flow.DeploymentCallbackFlow$1.next(DeploymentCallbackFlow.java:391)
?at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:83)
?Truncated. see log file for complete stacktrace
Caused By: org.hibernate.HibernateException: The chosen transaction strategy requires access to the JTA TransactionManager
?at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:371)
?at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1341)
?at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)
?at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669)
?at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:132)
?Truncated. see log file for complete stacktrace
?/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
具体配置如下:
persitence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
??? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
??? xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
??? http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
??? version="1.0">
?
??? <persistence-unit name="sshdj" transaction-type="JTA">
?????? <provider>org.hibernate.ejb.HibernatePersistence</provider>
?????? ?<jta-data-source>jdbc/mysqlDatasource</jta-data-source>
?????? <properties>
?????? ??? <property name="dialect" value="tool.HibernateForMySQLDialect" />
?????????? <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
?????????? <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/sshd2" />
?????????? <property name="hibernate.connection.username" value="root" />
?????????? <property name="hibernate.connection.password" value=".456852QWEQAZ" />
?????????? <property name="hibernate.hbm2ddl.auto" value="update" />
?????????? <property name="hibernate.show_sql" value="true" />
?????????? <property name="transaction.manager_lookup_class" value="org.hibernate.transaction.WeblogicTransactionManagerLookup" />???????
?????? </properties>
??? </persistence-unit>
</persistence>
?
?
application-config.xml:
?
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
??? xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
??? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
??? xmlns:security="http://www.springframework.org/schema/security" xmlns:jee="http://www.springframework.org/schema/jee"?
??? xsi:schemaLocation="
??? ??????? http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd
??? ??????? http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
?????????? http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
?????????? http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
?????????? http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
?????????? http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd">
?
??? <jee:jndi-lookup id="dataSource" jndi-name="jdbc/mysqlDatasource" />
??? <tx:jta-transaction-manager/>
??? <!-- 配置entityManagerFactory-->
??? <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
??? ??? <property name="dataSource" ref="dataSource"/>
?????? <property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml" />
??????? <property name="persistenceUnitName" value="sshdj" />
?????? <property name="loadTimeWeaver" >
?????????? <bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" />
?????? </property>
??? </bean>
?
??? <!-- 配置事务 -->
??? <bean id="transactionManager" class="org.springframework.transaction.jta.WeblogicJtaTransactionManager">
?????? <property name="entityManagerFactory" ref="entityManagerFactory" />
??? </bean>
?
??? <!-- 配置事务的传播特性 -->
??? <tx:advice id="txAdvice" transaction-manager="transactionManager">
?????? <tx:attributes>
?????????? <tx:method name="*" propagation="REQUIRED" />
?????? </tx:attributes>
??? </tx:advice>
?
??? <!-- 那些类的哪些方法参与事务 -->
??? <aop:config>
?????? <aop:advisor pointcut="execution(* hibernate.dao.impl.*.*(..))"
?????????? advice-ref="txAdvice" />
??? </aop:config>
???
??? <!--使用Spring注解功能 -->
??? <context:annotation-config />
???
</beans>
>