spring hibernate manuelle commit
kann jemand helfen dabei?
derzeit traf ich ein paar Probleme, ich bin mit spring,jpa,hibernate.
hier ist das problem, wenn ich versuche zu speichern mehrere Objekte, und klicken Sie dann manuell roll back als wenn solrj false zurück.
ich habe versucht, die folgenden:
1. usertransaction (Ausnahme: Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException
)
2.entitymanager.gettransaction().begin
(Ausnahme: shared-manager)
Dank, wenn Sie mir helfen können, herauszufinden.
header:
@Service("jpaWallPostService")
@Repository
public class WallPostServiceImpl implements WallPostService {
//........
@PersistenceContext
private EntityManager em;
======================================
@Transactional(readOnly=false)
public boolean save(String solrURL,int userid,wall_post wallPost,List<String> groupsid,List<String> hashtag){
try{
em.getTransaction().begin();//***error occur on here*** and stop here
//...............proccess
boolean ok = SolrJ.IndexingWallPost(solrURL,userid, wallPost.getTitle(), wallPost.getMessage(), hashtag,groupsid);
if(!ok)
em.getTransaction().rollback();
em.getTransaction().commit();
return true;
}
catch(Exception e)
{
em.getTransaction().rollback();
return false;
}
}
hier ist der error log
SEVERE: Servlet.service() for servlet [appServlet] in context with path [/opscentral] threw exception [Request processing failed; nested exception is java.lang.IllegalStateException: Not allowed to create transaction on shared EntityManager - use Spring transactions or EJB CMT instead] with root cause
java.lang.IllegalStateException: Not allowed to create transaction on shared EntityManager - use Spring transactions or EJB CMT instead
at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:198)
at $Proxy42.getTransaction(Unknown Source)
at sg.com.innovax.opscentralv5.table.service.impl.WallPostServiceImpl.save(WallPostServiceImpl.java:230)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:319)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at $Proxy49.save(Unknown Source)
at sg.com.innovax.opscentralv5.UserHomeController.newWall_post(UserHomeController.java:171)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:213)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:311)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:116)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:101)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:146)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:182)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:173)
at org.springframework.security.config.debug.DebugFilter.doFilterInternal(DebugFilter.java:45)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:947)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1009)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1852)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
- poste den kompletten Fehler-log
Du musst angemeldet sein, um einen Kommentar abzugeben.
Richtige Weg ist, entfernen alle Handbuch Transaktion-management bei der Verwendung der @Transactional. In einem richtigen CMT Kontext sollte man nicht manuell die Interaktion mit Transaktionen, die @transactional sicherzustellen, dass Ihre Methode ausgeführt, die innerhalb einer Transaktion, wird die Verbreitung des Transaktionskontext zu delegieren rufen und verpflichten sich, am Ende der Ausführung oder rollback-exception geworfen. Die einzigen Dinge, die Sie tun können, ist zu zwingen, rollback mit
setRollbackOnly()
auf dieEJBContext
Finden Sie unter : gibt es eine Möglichkeit zu zwingen, ein Transaktions-rollback, ohne dass eine Ausnahme?
Sonst, wenn Sie lieber manuell verwalten die Transaktion :
Definieren Sie einen transactionManager bean im spring-context mit Ihrem entityManagerFactory.
und verwenden Sie es auf diese Weise :
EJBContext.setRollBackOnly()
(siehe edition)Das problem ist, dass deine save-Methode wird annotiert Transaktions-was bedeutet, dass die Transaktion abgewickelt werden, die von Frühling, aber in der Methode, die Sie versuchen, zu verwalten Transaktion programmgesteuert mithilfe der JPA-API.
So sind Sie falsch mischen zwei Ansätze. Idealerweise sollten Sie nur den Transactional-annotation.
Unten habe ich den Quelltext von der Spring helper-Klassen, die diese verarbeitet. Die betreffende Klasse ist org.springframework.orm.jpa.SharedEntityManagerCreator.Es verfügt über eine private statische Klasse SharedEntityManagerInvocationHandler und den entsprechenden code, wo der Fehler ausgelöst wird ist unterhalb
So ist dies, was ich oben erwähnt habe.
Wird, die Sie anrufen getTransaction-Methode, und Sie bekommen den Fehler.
So loszuwerden, die Handhabung der Transaktionen innerhalb der Methode und stick nur auf das Transactional-annotation.
boolean ok = SolrJ.IndexingWallPost(solrURL,userid, wallPost.getTitle(), wallPost.getMessage(), hashtag,groupsid); if(!ok) // throw some RuntimeException;