<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
<!-- bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" / -->
<context:component-scan base-package="xx.yy.locker" />
<context:annotation-config />
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
<property name="persistenceUnitName" value="locker" />
</bean>
<bean id="transactionManager"
class="org.springframework.transaction.jta.WebSphereUowTransactionManager"/>
<tx:annotation-driven transaction-manager="transactionManager" />
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="get*" read-only="true"/>
<tx:method name="*" read-only="false" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="lockerManagerOperation" expression="execution(public * xx.yy..*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="lockerManagerOperation"/>
</aop:config>
</beans>
persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
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">
<persistence-unit name="testDB" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>jdbc/xx</jta-data-source>
<properties>
<property name="hibernate.dialect"
value="org.hibernate.dialect.Oracle10gDialect" />
<property name="hibernate.connection.driver_class"
value="oracle.jdbc.pool.OracleConnectionPoolDataSource" />
<!-- property name="hibernate.transaction.factory_class" value="org.hibernate.transaction.CMTTransactionFactory" / -->
<property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.WebSphereExtendedJTATransactionLookup"/>
</properties>
</persistence-unit>
</persistence>
libs:
antlr-2.7.6.jar
aspectjrt.jar
aspectjweaver.jar
commons-beanutils.jar
commons-collections.jar
commons-logging.jar
dom4j-1.6.1.jar
hibernate-annotations.jar
hibernate-commons-annotations.jar
hibernate-entitymanager.jar
hibernate3.jar
javassist-3.4.GA.jar
common-annotations.jar
log4j-1.2.16.jar
persistence.jar
slf4j-api-1.5.0.jar
slf4j-log4j12-1.5.0.jar
spring-2.5.jar
注意:
1. 使用<context:component-scan> 或 <context:annotation-config />的话,可以不用<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
2. 使用<tx:annotation-driven> + <tx:advice> + <aop:config> 可以不用 @transactional
3. WAS的TransactionManager要用WebSphereUowTransactionManager
4. hibernate.transaction.manager_lookup_class 用 org.hibernate.transaction.WebSphereExtendedJTATransactionLookup
5. hibernate.transaction.factory_class 不能使用 org.hibernate.transaction.CMTTransactionFactory,因为WAS的transaction不是一个joinableTransaction,所以只能使用org.hibernate.transaction.JDBCTransactionFactory
6. 删除WEB-INF/lib中的jta.jar,否则会出现错误。估计这个jta.jar跟WAS的有版本不兼容问题。
7. jsf集成spring
web.xml
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
faces-config.xml
<faces-config>
<application>
<variable-resolver>
org.springframework.web.jsf.DelegatingVariableResolver
</variable-resolver>
</application>
</faces-config>
这样就不用写Managed-Bean,但EL不能获得managedBean的数据,只能用jsf的EL读取managedBean,即不能${xBean},只能#{xBean}
8. <context:annotation-config />支持JSR-250 annotations,即 @Resource, @PostConstruct, @PreDestroy。等价于<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor">而CommonAnnotationBeanPostProcessor支持 @EJB
http://www.ibm.com/developerworks/websphere/techjournal/0609_alcott/0609_alcott.html
中文:http://www.ibm.com/developerworks/cn/websphere/techjournal/0609_alcott/0609_alcott.html
http://www.swview.org/blog/configuring-jboss-spring-jpa-hibernate-jta-web-applicationhttp://www.infoq.com/articles/spring-2.5-part-1
本文详细介绍了如何在Spring框架下集成JPA和Hibernate,并实现事务管理。包括了applicationContext.xml和persistence.xml的配置细节,以及必要的jar包清单。

1642

被折叠的 条评论
为什么被折叠?



