Uploaded image for project: 'OFBiz'
  1. OFBiz
  2. OFBIZ-6808

Calling Groovy as Event generates error when delegator.find used

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 16.11.01, Trunk
    • 14.12.01, 15.12.01, 13.07.04
    • framework
    • None

    Description

      We are using Groovy as event in the controller request, everything works fine for us but as we used delegator.find()
      it generates the following error

      ERROR: Cannot do a find that returns an EntityListIterator with no transaction in place. Wrap this call in a transaction.
           [java] java.lang.Exception: Stack Trace
           [java] 	at org.ofbiz.entity.GenericDelegator.find(GenericDelegator.java:1757) [ofbiz-entity.jar:?]
           [java] 	at org.ofbiz.entity.Delegator$find.call(Unknown Source) [ofbiz-entity.jar:?]
           [java] 	at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45) [groovy-all-2.2.1.jar:2.2.1]
           [java] 	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108) [groovy-all-2.2.1.jar:2.2.1]
           [java] 	at ProductInventory$_run_closure1.doCall(ProductInventory.groovy:18) [script:?]
           [java] 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_60]
           [java] 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_60]
           [java] 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_60]
           [java] 	at java.lang.reflect.Method.invoke(Method.java:497) ~[?:1.8.0_60]
           [java] 	at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) [groovy-all-2.2.1.jar:2.2.1]
           [java] 	at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233) [groovy-all-2.2.1.jar:2.2.1]
           [java] 	at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:272) [groovy-all-2.2.1.jar:2.2.1]
           [java] 	at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:909) [groovy-all-2.2.1.jar:2.2.1]
           [java] 	at groovy.lang.Closure.call(Closure.java:423) [groovy-all-2.2.1.jar:2.2.1]
           [java] 	at groovy.lang.Closure.call(Closure.java:439) [groovy-all-2.2.1.jar:2.2.1]
           [java] 	at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:1324) [groovy-all-2.2.1.jar:2.2.1]
           [java] 	at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:1296) [groovy-all-2.2.1.jar:2.2.1]
           [java] 	at org.codehaus.groovy.runtime.dgm$147.invoke(Unknown Source) [groovy-all-2.2.1.jar:2.2.1]
           [java] 	at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoMetaMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java:271) [groovy-all-2.2.1.jar:2.2.1]
           [java] 	at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:53) [groovy-all-2.2.1.jar:2.2.1]
           [java] 	at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45) [groovy-all-2.2.1.jar:2.2.1]
           [java] 	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108) [groovy-all-2.2.1.jar:2.2.1]
           [java] 	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116) [groovy-all-2.2.1.jar:2.2.1]
           [java] 	at ProductInventory.run(ProductInventory.groovy:11) [script:?]
           [java] 	at org.ofbiz.webapp.event.GroovyEventHandler.invoke(GroovyEventHandler.java:107) [ofbiz-webapp.jar:?]
           [java] 	at org.ofbiz.webapp.control.RequestHandler.runEvent(RequestHandler.java:763) [ofbiz-webapp.jar:?]
           [java] 	at org.ofbiz.webapp.control.RequestHandler.doRequest(RequestHandler.java:476) [ofbiz-webapp.jar:?]
           [java] 	at org.ofbiz.webapp.control.ControlServlet.doGet(ControlServlet.java:210) [ofbiz-webapp.jar:?]
           [java] 	at org.ofbiz.webapp.control.ControlServlet.doPost(ControlServlet.java:89) [ofbiz-webapp.jar:?]
           [java] 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:646) [servlet-api-3.0.jar:?]
           [java] 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) [servlet-api-3.0.jar:?]
           [java] 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) [tomcat-7.0.65-catalina.jar:7.0.65]
           [java] 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [tomcat-7.0.65-catalina.jar:7.0.65]
           [java] 	at org.ofbiz.webapp.control.ContextFilter.doFilter(ContextFilter.java:349) [ofbiz-webapp.jar:?]
           [java] 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) [tomcat-7.0.65-catalina.jar:7.0.65]
           [java] 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [tomcat-7.0.65-catalina.jar:7.0.65]
           [java] 	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) [tomcat-7.0.65-catalina.jar:7.0.65]
           [java] 	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) [tomcat-7.0.65-catalina.jar:7.0.65]
           [java] 	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) [tomcat-7.0.65-catalina.jar:7.0.65]
           [java] 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) [tomcat-7.0.65-catalina.jar:7.0.65]
           [java] 	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) [tomcat-7.0.65-catalina.jar:7.0.65]
           [java] 	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) [tomcat-7.0.65-catalina.jar:7.0.65]
           [java] 	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956) [tomcat-7.0.65-catalina.jar:7.0.65]
           [java] 	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423) [tomcat-7.0.65-catalina.jar:7.0.65]
           [java] 	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079) [tomcat-7.0.65-tomcat-coyote.jar:7.0.65]
           [java] 	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625) [tomcat-7.0.65-tomcat-coyote.jar:7.0.65]
           [java] 	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318) [tomcat-7.0.65-tomcat-coyote.jar:7.0.65]
           [java] 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_60]
           [java] 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_60]
           [java] 	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-7.0.65-tomcat-coyote.jar:7.0.65]
           [java] 	at java.lang.Thread.run(Thread.java:745) [?:1.8.0_60]
      

      -----------------------------------------------------------------------------------------------------------------------------------------------------------

      Reason:

      Since we are using find method of GenericDelegator.java
      As per the code implementation it required the transaction should exist

         if (!TransactionUtil.isTransactionInPlace()) {
      

      if not, it generate error

      ERROR: Cannot do a find that returns an EntityListIterator with no transaction in place. Wrap this call in a transaction.

      -----------------------------------------------------------------------------------------------------------------------------------------------------------

      Possible Solution:

      The one possible solution could be to initialize the transaction when the groovy is called as event and commit the transaction after the completion.
      The following code base at the starting and ending of GroovyEventHandler.java can resolve the issue.

         // At begining
          boolean beganTransaction = false;
          if (!TransactionUtil.isTransactionInPlace()) { 
              beganTransaction = TransactionUtil.begin(); 
          }
      
         // At End
         if (beganTransaction) { 
             TransactionUtil.commit(); 
         }
      

      Attachments

        1. OFBIZ-6808.patch
          6 kB
          Swapnil Mane

        Activity

          People

            jleroux Jacques Le Roux
            swapnilmmane Swapnil Mane
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: