2013-05-30 14 views
5

JTATransactionManager'ı (çoklu kaynaklar) kullanmaya karar verdiğim için bir veritabanı ve JMS kuyruğu ile çalışacağım.
Ben JTATransactionManager Hiçbirşeyle
GlassFish 3.1.2.2
JTATransactionManager Veritabanına Gönderilmiyor

db.I kararlıdır
hazırda 4.2.1.Final o fine.I yok çalışır JPATransactionManager çalıştı 3.2.3.RELEASE Bahar Framework kullanıyorum JTATransactionManager.Any fikri ile herhangi bir istisna olsun yanlış ne yapıyorum?

Bu

JPA yapılandırma dosyasının bir parçasıdır

<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" /> 

Bu benim Jenerik Dao olan 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)); 
} 

}

Bu

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

Ve bu UserDao

olduğunu benim servom Buz kodu

@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

Hizmetinizde hangi paket var? – MarkOfHall

+0

@SteveHall hepsi aynı paket içinde – Emre

cevap

1

Sana bağlam xml <tx:annotation-driven/> eklemek gerek. Bu, @Transactional ile aradığınız işlem davranışını sağlayan bir AOP yöntemi engelleyicisi ile yöntemleri sarmalayacak bir içerik sonrası işlemcisi çalıştıracaktır.

+1

bir şekilde bir şekilde özledim oldukça açık bir şey işaret etti.Bu için oy veriyorum ama hala onunla çalışmıyor. – Emre