Hello,
I'm trying to implement a DA0 bases on plain JPA as is explained in the official Spring documentation (chapter 12.6.3 - http://static.springframework.org/sp...-jpa-straight).
I'm using Spring 2.0.2 and Hibernate 3.
This is my DAO interface:
Here is the DAO class:Code:public interface DataAccessI extends Serializable { /** */ public abstract void save(BaseTable table); /** */ public abstract void delete(BaseTable table); /** * @return */ public abstract <T extends BaseTable> T find(Class<T> entityClass, int id); }
Code:public class SpringPersistentContextInjectedDataAccess implements DataAccessI { /** * */ private static final long serialVersionUID = -799697718286174024L; private EntityManager entityManager = null; @PersistenceContext( type = PersistenceContextType.EXTENDED) public void setEntityManager(EntityManager em) { this.entityManager = em; } public void delete(BaseTable table) { entityManager.remove(entityManager.merge(table)); } public void save(BaseTable table) { entityManager.merge(table); entityManager.flush(); } .......... }
here is o part of the spring xml file:
When in my JUnit tests when the entotyManager.flush() method is called i have a "javax.persistence.TransactionRequiredExceptio n: no transaction is in progress" exception.Code:<bean id="PersistenceService" class="com.bo.df.designer.domain.PersistenceService"> <property name="persistenceDelegate"> <ref bean="SpringPersistentContextInjectedDataAccess" /> </property> </bean> <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/> <bean id="SpringPersistentContextInjectedDataAccess" class="com.bo.df.designer.dao.jpa.SpringPersistentContextInjectedDataAccess"> </bean>
Here is the entire trace:
For me the injected EntiyManager should be bound on the ongoing transaction.Code:javax.persistence.TransactionRequiredException: no transaction is in progress at org.hibernate.ejb.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:293) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:283) at $Proxy25.flush(Unknown Source) at com.bo.df.designer.dao.jpa.SpringPersistentContextInjectedDataAccess.save(SpringPersistentContextInjectedDataAccess.java:40) at com.bo.df.designer.domain.PersistenceService.save(PersistenceService.java:37) at com.bo.df.designer.domain.BaseTableTest.delete(BaseTableTest.java:89) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.junit.internal.runners.TestMethodRunner.executeMethodBody(TestMethodRunner.java:99) at org.junit.internal.runners.TestMethodRunner.runUnprotected(TestMethodRunner.java:81) at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34) at org.junit.internal.runners.TestMethodRunner.runMethod(TestMethodRunner.java:75) at org.junit.internal.runners.TestMethodRunner.run(TestMethodRunner.java:45) at org.junit.internal.runners.TestClassMethodsRunner.invokeTestMethod(TestClassMethodsRunner.java:71) at org.junit.internal.runners.TestClassMethodsRunner.run(TestClassMethodsRunner.java:35) at org.junit.internal.runners.TestClassRunner$1.runUnprotected(TestClassRunner.java:42) at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34) at org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52) at org.junit.internal.runners.CompositeRunner.run(CompositeRunner.java:29) at org.junit.internal.runners.TestClassRunner$1.runUnprotected(TestClassRunner.java:42) at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34) at org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Any idea where is the problem ?
thank's


Reply With Quote