有你心蓝
unread,Mar 26, 2008, 4:47:17 AM3/26/08Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
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