Spring + JPA

2 respostas
pablofaria

Gostaria de usar o Spring para controle automático de Transação e injeção do EntytiManager automática.

Uso Mentawai e como implementação do JPA o Hibernate, quero usar o Spring absolutamente só para esse propósito, só que nunca trabalhei com Spring e não faço a menor idéia de como configurá-lo para isso.

Todas as tentativas que realizei foram frustrantes, será que não teriam um passo-a-passo ou uma aplicação de exemplo…

agradeço desde já…

2 Respostas

georgesq

isso é meu dataSourceApplication.xml, ele faz o que vc espera, só que daí a vc fazer o suporte na sua aplicação, vc precisa dá uma olhada no JpaDAOSupport do próprio spring, este exemplo é pra Spring 2.5

<?xml version="1.0" encoding="UTF-8"?>
<bean id="propertyConfigurer"
      class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
      p:location="jdbc.properties" />

<!-- JPA EntityManagerFactory -->
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
      p:dataSource-ref="dataSource">
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"
              p:databasePlatform="${jpa.databasePlatform}" p:showSql="${jpa.showSql}"/>           
    </property>
    <property name="jpaProperties">
        <props>
            <prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JTATransactionFactory</prop>
            <prop key="hibernate.transaction.manager_lookup_class">org.hibernate.transaction.JBossTransactionManagerLookup</prop>
        </props>
    </property>
</bean>     

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
	<property name="jndiName" value="java:/aaDS" />
</bean>
<!--
<bean id="dataSource"
      class="org.springframework.jdbc.datasource.DriverManagerDataSource"
      p:driverClassName="${jdbc.driverClassName}"
      p:url="${jdbc.url}"
      p:username="${jdbc.username}"
      p:password="${jdbc.password}" />
    PostProcessors to perform exception translation on @Repository classes (from native
exceptions such as JPA PersistenceExceptions to Spring's DataAccessException hierarchy).
-->
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>    
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>
<tx:jta-transaction-manager></tx:jta-transaction-manager>
<!--
Instruct Spring to perform declarative transaction management
automatically on annotated classes.
-->
<tx:annotation-driven />
<!--
Activates various annotations to be detected in bean classes: Spring's
@Required and @Autowired, as well as JSR 250's @PostConstruct,
@PreDestroy and @Resource (if available) and JPA's @PersistenceContext
and @PersistenceUnit (if available).
-->
<context:annotation-config/>
<context:component-scan base-package="br"/> 
<!--
Instruct Spring to retrieve and apply @AspectJ aspects which are defined
as beans in this context (such as the UsageLogAspect below).
<bean id="pesquisaDAO" class="br.com.gsq.spring25.dao.PesquisaDAO"/>
-->
<aop:aspectj-autoproxy/>
pablofaria

Com essa configuração eu consigo fazer isso usando um conteiner de Servlets (Tomcat)?

Se colocar a anotação @PersistenceContext no meu EntityManager ele popula automaticamente?

Se colocat @Transactional ele gerencia minhas transações?

Criado 1 de março de 2008
Ultima resposta 1 de mar. de 2008
Respostas 2
Participantes 2