2013-04-03 9 views
7

क्या कोई इस के लिए मदद कर सकता है?वसंत हाइबरनेट मैनुअल प्रतिबद्ध

वर्तमान में मैं कुछ समस्याओं से मुलाकात की, मैं वसंत, जेपीए, हाइबरनेट का उपयोग कर रहा हूं। यहां समस्या है, जब मैं कई ऑब्जेक्ट्स को सहेजने का प्रयास करता हूं, और तब मैन्युअल रूप से वापस रोल करता है जब solrj झूठी वापसी करता है।
1. usertransaction (अपवाद:: Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException)

2. entitymanager.gettransaction().begin (अपवाद: साझा प्रबंधक)

मैं निम्नलिखित की कोशिश की

धन्यवाद, अगर आप मेरी मदद कर सकते पता लगाने के लिए।

हैडर:

@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; 
    } 
} 

यहाँ त्रुटि लॉग

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) 
+0

पूर्ण त्रुटि लॉग –

उत्तर

12

उचित तरह से जब @Transactional का उपयोग कर सभी मैनुअल लेनदेन प्रबंधन दूर करने के लिए है। एक उचित सीएमटी संदर्भ में आपको लेनदेन के साथ मैन्युअल रूप से बातचीत नहीं करनी चाहिए, @transactional सुनिश्चित करें कि आपकी विधि एक लेनदेन के अंदर चलेगी, लेनदेन संदर्भ को कॉल करने के लिए प्रचारित करेगी और अपवाद के मामले में निष्पादन या रोलबैक के अंत में प्रतिबद्ध होगा । is there a way to force a transactional rollback without encountering an exception?

अन्यथा यदि आप मैन्युअल लेन-देन से प्रबंधित करना चाहते: केवल बातें आप ऐसा कर सकते हैं EJBContext

देखें पर setRollbackOnly() का उपयोग कर रोलबैक के लिए मजबूर करने के लिए है

का उपयोग कर अपने वसंत संदर्भ में एक transactionManager सेम परिभाषित करें अपने entityManagerFactory।

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactory" /> 
</bean> 

और इसे इस तरह का उपयोग करें:

@Inject 
JpaTransactionManager txManager; 

DefaultTransactionDefinition def = new DefaultTransactionDefinition(); 
def.setName("rootTransaction"); 
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); 
TransactionStatus status = txManager.getTransaction(def); 
[...] 
txManager.commit(status); 
+0

पोस्ट करने के बाद मैंने मूल रूप से लेनदेन प्रबंधक को सेट किया था .... और शुरू भी नहीं, फिर त्रुटि। इसलिए शेष कोड त्रुटि संकेत के बाद नहीं चलेंगे – Stupidfrog

+0

आप एनोटेशन हैंडलिंग का प्रबंधन कैसे करते हैं? क्या आपके पास ऐसा कुछ नहीं है: \t <संदर्भ: एनोटेशन-कॉन्फ़िगर /> – Gab

+0

हाँ, मेरे पास भी है। – Stupidfrog

3

समस्या यह है कि अपने को बचाने के विधि की लेन-देन जिसका अर्थ है कि लेन-देन स्प्रिंग द्वारा नियंत्रित किया जाएगा टिप्पणी की जाती है, लेकिन विधि के भीतर आप का प्रबंधन करने की कोशिश कर रहे जेपीए एपीआई का उपयोग कर प्रोग्रामिंग लेनदेन।

तो आप गलत तरीके से मिश्रण कर रहे हैं दो दृष्टिकोण। आदर्श रूप में आपको केवल लेनदेन संबंधी एनोटेशन का उपयोग करना चाहिए।

नीचे मैंने स्प्रिंग हेल्पर कक्षाओं से स्रोत कोड जोड़ा है जो इसे संभालता है। प्रासंगिक वर्ग org.springframework.orm.jpa.SharedEntityManagerCreator.It एक निजी स्थिर वर्ग SharedEntityManagerInvocationHandler और प्रासंगिक कोड, जहां त्रुटि फेंक दिया जाता है नीचे है

public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { 
    ..... 
    ..... 
    else if (method.getName().equals("getTransaction")) { 
     throw new IllegalStateException("Not allowed to create transaction on shared" 
          +" EntityManager - use Spring transactions or EJB CMT instead"); 
..... 
..... 
    } 

तो यह है कि मैं क्या ऊपर उल्लेख किया है है।

आप getTransaction विधि को कॉल कर रहे हैं और आपको त्रुटि मिल रही है।

तो विधि के अंदर लेनदेन हैंडलिंग से छुटकारा पाएं और केवल लेनदेन संबंधी एनोटेशन पर चिपके रहें।

+0

सच है, और आपका विधि निकाय इस 'बूलियन ठीक = SolrJ.IndexingWallPost (solrURL, userid, wallPost.getTitle(), wallPost.getMessage(), हैशटैग, groupid) जैसा दिखना चाहिए; अगर (! ठीक है) // कुछ रनटाइम अपवाद फेंक दें; ' –

+0

मैं अपने शोध और समझ के आधार पर आपके अंक से सहमत हूं। मैं वसंत का अनुमान लगा रहा हूं लेनदेन पर कब्जा कर लिया है और मैं इसे पाने और नियंत्रित करने की कोशिश करता हूं। हालांकि मैं सिर्फ @ ट्रांसेक्शनल को हटा देता हूं और लेनदेन प्राप्त करने का प्रयास करता हूं, फिर मैंने इन समस्याओं से मुलाकात की ("java.lang.IllegalStateException: साझा एंटिटी मैनेजर पर लेनदेन बनाने की अनुमति नहीं है - इसके बजाय स्प्रिंग लेनदेन या ईजेबी सीएमटी का उपयोग करें") – Stupidfrog

+0

ओरिड --- आपका विधि काम है, लेकिन यह सुनिश्चित करने के लिए कि इस क्षेत्र के भीतर कोई कोशिश न करें और पकड़ें, और मेरे साथ भी यही समस्याएं होंगी.धन्यवाद! – Stupidfrog

संबंधित मुद्दे