spring 2.5 + jpa 1.0 (hibernate 3.2) + jsf 1.2 ...

 applicationContext.xml
<?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-application

http://www.infoq.com/articles/spring-2.5-part-1

你可能感兴趣的:(spring 2.5 + jpa 1.0 (hibernate 3.2) + jsf 1.2 ...)