no transaction is in progress exception

149 views
Skip to first unread message

有你心蓝

unread,
Mar 26, 2008, 4:47:17 AM3/26/08
to JBoss Seam中文站讨论组
I'm using Spring 2.5, Hibernate, JPA and WLS9.2, and I'm having some
problems using the @Service annotation. I have a service
implementation class annotated with @Service, the service class has a
method called saveUser. Inside the saveUser method I do
jpaTemplate.persists and jpaTemplate.flush . When flush is called,
"InvalidDataAccessApiUsageException: no transaction is in progress"
gets thrown.

Here's the stack trace:
--------------------------

Code:
ä¸¥é‡ : org.springframework.dao.InvalidDataAccessApiUsageException: no
transaction is in progress; neste
d exception is javax.persistence.TransactionRequiredException: no
transaction is in progress
javax.faces.el.EvaluationException:
org.springframework.dao.InvalidDataAccessApiUsageException: no t
ransaction is in progress; nested exception is
javax.persistence.TransactionRequiredException: no tr
ansaction is in progress
at
javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionA
dapter.java:91)
at
com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:
91)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:
251)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:
117)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
at weblogic.servlet.internal.StubSecurityHelper
$ServletServiceAction.run(StubSecurityHelper.java:22
5)
at
weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:
127)
at
weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:
283)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
at
weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:
42)
at org.jboss.seam.servlet.SeamFilter
$FilterChainImpl.doFilter(SeamFilter.java:83)
at
org.jboss.seam.debug.hot.HotDeployFilter.doFilter(HotDeployFilter.java:
68)
at org.jboss.seam.servlet.SeamFilter
$FilterChainImpl.doFilter(SeamFilter.java:69)
... 37 more
Caused by: javax.persistence.TransactionRequiredException: no
transaction is in progress
at
org.hibernate.ejb.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:
294)
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:346)
at $Proxy112.flush(Unknown Source)
at org.springframework.orm.jpa.JpaTemplate$8.doInJpa(JpaTemplate.java:
283)
at org.springframework.orm.jpa.JpaTemplate.execute(JpaTemplate.java:
185)
... 76 more


/WEB-INF/components.xml:
Code:
<core:manager conversation-timeout="120000" concurrent-request-
timeout="500" conversation-id-parameter="cid" />
<core:init transaction-management-enabled="false" debug="true" />
<transaction:no-transaction />
<spring:context-loader />

/WEB-INF/applicationContext.xml
Code:
<jee:jndi-lookup id="fw.defaultDataSource" jndi-name="jdbc/crm" />
<bean id="transactionManager"
class="org.springframework.transaction.jta.WebLogicJtaTransactionManager" /
>
<tx:annotation-driven transaction-manager="transactionManager" />
<bean
class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"></
bean>
<bean id="fw.jpaTemplate"
class="org.springframework.orm.jpa..JpaTemplate">
<property name="entityManagerFactory" ref="fw.defaultEMF" />
</bean>
<bean id="fw.defaultEMF"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="fw.defaultDataSource" />
<property name="jpaVendorAdapter">
<bean
class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="database" value="ORACLE" />
<property name="showSql" value="true" />
</bean>
</property>
<property name="loadTimeWeaver">
<bean
class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" /
>
</property>
<property name="persistenceUnitName"
value="fw.defaultPersistenceUnit" />
</bean>

RegisterAction.java
Code:
@In("#{userService}")
private UserService userService;
public void register() {
userService.createUser(user);
}
}

UserService.java
Code:
@Autowired
@Qualifier("fw.jpaTemplate")
org.springframework.orm.jpa.JpaTemplate jpaTemplate;

@Transactional
public void createUser(final User user) throws ValidationException
{
jpaTemplate.persist(user);
jpaTemplate.flush();
}


User.java
Code:
@Entity
@Name("user")
@Scope(SESSION)
@Table(name="Customer")
public class User implements Serializable
{....}

HELP ME
Reply all
Reply to author
Forward
0 new messages