2013-05-30 7 views
5

Ich werde mit einer Datenbank und mit einer JMS-Warteschlange arbeiten, also entschied ich mich, JTATransactionManager (mehrere Ressourcen) zu verwenden.
Ich verwende Spring Framework 3.2.3.RELEASE
Hibernate 4.2.1.Final
Glassfish 3.1.2.2
JTATransactionManager wird nicht an Datenbank übergeben

Mit JTATransactionManager nichts zu db.I JPATransactionManager versucht sich verpflichtet, arbeitet fine.I nicht bekomme keine Ausnahmen mit JTATransactionManager.Any Idee, was ich falsch mache? Danke.

Dies ist ein Stück von JPA Config

<jee:jndi-lookup id="dataSource" jndi-name="Test" /> 

<bean id="entityManagerFactory" 
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" 
     p:packagesToScan="com.pinkshield.jpaTest.domain" 
     p:dataSource-ref="dataSource" 
     p:jpaPropertyMap-ref="jpaPropertyMap" 
     p:jpaVendorAdapter-ref="hibernateVendor" /> 


<util:map id="jpaPropertyMap"> 
    <entry key="hibernate.hbm2ddl.auto" value="validate" /> 
    <entry key="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect" /> 
    <entry key="transaction.factory_class" value="org.hibernate.transaction.JTATransactionFactory" /> 
    <entry key="transaction.manager_lookup_class" 
     value="org.hibernate.transaction.SunONETransactionManagerLookup" /> 
</util:map> 

<bean id="hibernateVendor" 
    class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" 
    p:showSql="true" /> 

<tx:jta-transaction-manager /> 

<context:component-scan base-package="com.pinkshield.jpaTest" /> 

Datei Dies ist mein Allgemein Dao für JPA

package com.pinkshield.jpaTest; 

import java.util.List; 

import javax.persistence.EntityManager; 
import javax.persistence.PersistenceContext; 

public class GenericDaoJpa<T> implements GenericDao<T> 
{ 

private Class<T> queryClass; 
protected EntityManager entityManager; 

@PersistenceContext 
public void setEntityManager(EntityManager entityManager) 
{ 
    this.entityManager = entityManager; 
} 

public GenericDaoJpa(Class<T> queryClass) 
{ 
    super(); 
    this.queryClass = queryClass; 
} 

public T getNewInstance() 
{ 
    try 
    { 
     return getQueryClass().newInstance(); 
    } 
    catch (InstantiationException e) 
    { 
     throw new RuntimeException("Error creating new instance of : " + getQueryClass().getName(), e); 
    } 
    catch (IllegalAccessException e) 
    { 
     throw new RuntimeException("Error creating new instance of : " + getQueryClass().getName(), e); 
    } 
} 

public Class<T> getQueryClass() 
{ 
    return queryClass; 
}  

public T get(Long id) 
{ 
    if (id == null) 
    { 
     return null; 
    } 
    else 
    { 
     return entityManager.find(queryClass, id); 
    } 
} 

@SuppressWarnings("unchecked") 
public List<T> getAll() 
{ 
    return entityManager.createQuery("select o from " + queryClass.getName() + " o").getResultList(); 
} 

public void save(T object) 
{ 
    entityManager.persist(object); 
} 

public void update(T object) 
{ 
    entityManager.merge(object); 
} 

public void delete(T object) 
{ 
    entityManager.remove(entityManager.merge(object)); 
} 

}

Dies ist UserDao

@Repository 
public class UserDao extends GenericDaoJpa<User> 
{ 
public UserDao() 
{ 
    super(User.class); 
} 
} 

Und das ist mein Serv Eis Code

@Service 
public class UserServiceImpl implements IUserService{ 

@Autowired UserDao userDao; 

@Override 
@Transactional 
public void saveUser(String name, String lastName) 
    { 
    User user=new User(); 
    user.setLastName(lastName); 
    user.setName(name); 

    userDao.save(user); 
    } 
} 
+0

In welchem ​​Paket ist Ihr Service? – MarkOfHall

+0

@SteveHall alle im selben Paket – Emre

Antwort

1

Ich glaube, Sie <tx:annotation-driven/> den Kontext xml hinzufügen müssen. Dadurch wird ein Kontext-Postprozessor ausgeführt, der Methoden mit @Transactional mit einem AOP-Methodentrenner umschließt, der das von Ihnen gesuchte Transaktionsverhalten bietet.

+1

Sie wies auf etwas ganz offensichtlich, dass ich irgendwie vermisst habe.Für dies stimme ich es, aber es funktioniert immer noch nicht damit. – Emre