2013-05-30 3 views
5

데이터베이스와 JMS 대기열을 사용하여 JTATransactionManager (다중 자원)를 사용하기로했습니다.
나는 JtaTransactionManager를 아무 것도
글래스 피시 3.1.2.2
JTATransactionManager가 데이터베이스에 커밋하지 않음

이 db.I하기 위해 최선을 다하고 있습니다
최대 절전 모드 4.2.1.Final 그것은 괜찮아요 그렇지 작동 JPATransactionManager을 시도 3.2.3.RELEASE 스프링 프레임 워크를 사용하고 있습니다 JTATransactionManager를 사용하여 예외를 가져 오십시오. 내가 뭘 잘못하고 있는지 알겠습니까? 고마워요.

는 JPA 설정 파일의 조각입니다

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

이 내 일반 다오입니다 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)); 
} 

}

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

그리고이 UserDao

입니다 내 부하이다. 얼음 코드

@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

귀하의 서비스는 어떤 패키지입니까? – MarkOfHall

+0

@SteveHall은 모두 같은 패키지에 있습니다. – Emre

답변

1

나는 <tx:annotation-driven/>을 컨텍스트 xml에 추가해야한다고 생각합니다. 그러면 컨텍스트 포스트 프로세서가 실행되어 @Transactional 메서드를 Arap 메서드 인터셉터로 래핑하여 찾고있는 트랜잭션 동작을 제공합니다.

+1

당신은 내가 어떻게 든 그리워한다는 것을 아주 분명하게 지적했습니다. 이것을 위해 나는 투표를하고 있지만 여전히 그걸로는 작동하지 않습니다. – Emre

관련 문제