Problema com JPA e SQLServer

Galera,tenho um cadastro que utiliza um DAO genérico para salvar os dados no banco.Quando dou um persist(),nenhum erro é mostrado,se eu der um ‘findByID’ é retornado o registro que tentei inserir,mas o registro não consta no banco,o que pode estar errado?

Segue o código:

@Override 
	@Transactional(readOnly = false, propagation = Propagation.REQUIRED) 
	public T salvar(T object)  {
		getEntityManager().clear();
		try {
			getEntityManager().persist(object);
			System.out.println(getEntityManager().contains(object));
		}catch(Exception e){
			e.printStackTrace();
		}
		ApplicationContext ctx = AppContext.getApplicationContext();  
		
		ChamadoTecnicoDAO dao = (ChamadoTecnicoDAO)ctx.getBean("chamadoTecnicoDAOImp");
		ChamadoTecnico cht = (ChamadoTecnico)dao.findById(new Long(110500132));//retornando OK
		return object;
	}

[quote=Maracuja]Vc não esta fazendo o flush.

http://download.oracle.com/javaee/5/api/javax/persistence/EntityManager.html

[]`s
[/quote]

Mas pq eu precisaria nesse caso,tendo em conta que essa eh uma solução que funciona bem em várias aplicações,com bancos diferentes?

Bem,este é o contexto:

Minha aplicação acessa dois bancos SqlServer,estou usando o Spring para gerenciar as transações e esse é o arquivo de configuração:

<?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: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/context 
http://www.springframework.org/schema/context/spring-context-2.5.xsd 
       http://www.springframework.org/schema/tx 
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

	<context:property-placeholder location="/WEB-INF/application.properties" />

	<bean id="persistenceUnitManager"
		class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager">
		 <property name="persistenceXmlLocations">
			<list>
				<value>classpath*:META-INF/persistence_DBSSS.xml</value>
				<value>classpath*:META-INF/persistence_DBCSH.xml</value>
			</list>
		</property>

		<property name="dataSources">
			<map>
				<entry key="dataSource1" value-ref="dataSource_DBSSS" />
				<entry key="dataSource2" value-ref="dataSource_DBCSH" />
			</map>
		</property>
	</bean>	
	
	<bean id="entityManagerFactory_DBSSS"
		class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
		<property name="persistenceUnitManager" ref="persistenceUnitManager" />
		<property name="persistenceUnitName" value="pu_DBSSS" />
		<property name="loadTimeWeaver">
    <bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/>
  </property>
		
	</bean>
	
	<bean id="entityManagerFactory_DBCSH"
		class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
		<property name="persistenceUnitManager" ref="persistenceUnitManager" />
		<property name="persistenceUnitName" value="pu_DBCSH" />
		<property name="loadTimeWeaver">
    <bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/>
  </property>
		
	</bean>

	<bean id="dataSource_DBSSS" class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">
		<property name="driverClassName" value="${database.driver}" />
		<property name="url" value="${dbsss.url}" />
		<property name="username" value="${dbsss.username}" />
		<property name="password" value="${dbsss.password}" />
	</bean>
	
		<bean id="dataSource_DBCSH" class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">
		<property name="driverClassName" value="${database.driver}" />
		<property name="url" value="${dbcsh.url}" />
		<property name="username" value="${dbcsh.username}" />
		<property name="password" value="${dbcsh.password}" />
	</bean>
	
	<bean id="txManager_DBSSS" class="org.springframework.orm.jpa.JpaTransactionManager">
		<property name="entityManagerFactory" ref="entityManagerFactory_DBSSS" />
	</bean>
	 
	<bean id="txManager_DBCSH" class="org.springframework.orm.jpa.JpaTransactionManager">
		<property name="entityManagerFactory" ref="entityManagerFactory_DBCSH" />
	</bean>
	
	<tx:annotation-driven transaction-manager="txManager_DBSSS" />
	<tx:annotation-driven transaction-manager="txManager_DBCSH" />
	
	<bean
		class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor" />
	<bean
		class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />

	<bean id="contextApplicationContextProvider" class="context.ApplicationContextProvider" />
	<context:component-scan base-package="*" />
	
</beans>

para cada implementação do DAO eu preciso indicar explicitamente qual persistence unit vou usar:

@PersistenceContext(unitName="pu_DBCSH")
	public EntityManager entityManager;

Esse é o método salvar ‘genérico’,que funciona em outras apps sem o flush:

@Override 
	@Transactional(readOnly = false, propagation = Propagation.REQUIRED) 
	public T salvar(T object)  {
		getEntityManager().clear();
		try {
			getEntityManager().persist(object);
		}catch(Exception e){
			e.printStackTrace();
		}
		return object;
	}

Esse é o método salvar em que tentei colocar o flush explicito:

@Override 
	@Transactional(readOnly = false, propagation = Propagation.REQUIRED) 
	public T salvar(T object)  {
		getEntityManager().clear();
		try {
			getEntityManager().getTransaction().begin();
			getEntityManager().persist(object);
			getEntityManager().flush();
			getEntityManager().getTransaction().commit();
		}catch(Exception e){
			e.printStackTrace();
		}
		return object;
	}

Que está retornado o seguinte erro:

java.lang.IllegalStateException: Not allowed to create transaction on shared EntityManager - use Spring transactions or EJB CMT instead

Alguma idéia? :smiley:

[quote=Maracuja]Olá, agora vc está complicando tudo, vc agora esta tentando utilizar JPA transaction managment programaticamente e Spring transaction managment declarativamente (anotations), isso certamente não vai funcionar. heheheh Vc deve usar uma coisa, ou outra.

[/quote]

Cara,confesso que eu estou seguindo “receita de bolo” nesse assunto,sempre usava assim em projetos anteriores e simplesmente funcionava :smiley: , se vc puder me dar uma luz ficaria bastante grato :smiley: