2011-01-14 2 views
1

JPA 2의 OpenJPA 구현을 사용 중이고 개체를 데이터베이스에 유지하는 데 문제가 있습니다. 컨테이너 (Websphere)에서 관리하는 트랜잭션을 사용하고 싶습니다. 트랜잭션이 관리되므로 tx.begin(), tx.commit() 등의 상용구 코드가 필요하지 않습니다.관리 대상 트랜잭션이 지속되지 않는 JPA 2

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 
    <persistence-unit name="buildTest" transaction-type="JTA"> 
     <jta-data-source>jdbc/lfcbuild</jta-data-source> 
     <class>entities.Build</class> 
     <properties> 
      <property name="openjpa.jdbc.Schema" value="APP"/> 
      <property name="openjpa.TransactionMode" value="managed"/> 
      <property name="openjpa.ConnectionFactoryMode" value="managed"/>      
     </properties> 
    </persistence-unit> 
</persistence> 

빌드를 지속 할 때 내가 실행하고있어 코드는 다음과 같습니다

EntityManagerFactory emf = Persistence.createEntityManagerFactory("buildTest"); 
EntityManager em = emf.createEntityManager(); 

Build b = new Build(); 
b.setFirstName("Dick"); 
b.setLastName("Tracy"); 

em.persist(b); 

코드가 실행되며 예외가 발생하지 않습니다. 데이터베이스를 검사 할 때 아무 것도 지속되지 않습니다. 뭔가 빠졌는가, 아니면 개체가 컨테이너 관리 트랜잭션으로 지속될만큼 충분해야합니까?

답변

0

해당 코드는 EJB의 일부입니까? 그렇지 않으면 프로그래밍 방식으로 Tx를 시작하고 커밋해야 할 수도 있습니다.

+0

아니요 EJB의 일부가 아닙니다. 실제로 OSGi 번들에서 실행됩니다. – stuff22

+0

tx가 없으므로 엔티티 관리자가 Tx의 끝에서 플러시되지 않는 것처럼 보입니다. 상태 비 저장 EJB 메소드에이 코드를 삽입하고 어떤 일이 발생하는지 살펴볼 수 있습니까? EJB가 없다면 보일러 판 tx.begin() 등이 필요합니다. –

관련 문제