Author: jleroux
Date: Sat Apr 23 03:51:13 2016 New Revision: 1740629 URL: http://svn.apache.org/viewvc?rev=1740629&view=rev Log: A patch from Swapnil M Mane for "Calling Groovy as Event generates error when delegator.find used" reported by Wai at https://issues.apache.org/jira/browse/OFBIZ-6808 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:?] 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. ----------------------------------------------------------------------------------------------------------------------------------------------------------- Solution: initialize the transaction when the groovy is called as event and commit the transaction after the completion. Modified: ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/event/GroovyEventHandler.java ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/event/JavaEventHandler.java ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/event/SimpleEventHandler.java Modified: ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/event/GroovyEventHandler.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/event/GroovyEventHandler.java?rev=1740629&r1=1740628&r2=1740629&view=diff ============================================================================== --- ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/event/GroovyEventHandler.java (original) +++ ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/event/GroovyEventHandler.java Sat Apr 23 03:51:13 2016 @@ -40,6 +40,8 @@ import org.ofbiz.base.util.ScriptUtil; import org.ofbiz.base.util.UtilHttp; import org.ofbiz.base.util.UtilMisc; import org.ofbiz.base.util.UtilValidate; +import org.ofbiz.entity.transaction.GenericTransactionException; +import org.ofbiz.entity.transaction.TransactionUtil; import org.ofbiz.webapp.control.ConfigXMLReader.Event; import org.ofbiz.webapp.control.ConfigXMLReader.RequestMap; @@ -70,7 +72,10 @@ public class GroovyEventHandler implemen } public String invoke(Event event, RequestMap requestMap, HttpServletRequest request, HttpServletResponse response) throws EventHandlerException { + boolean beganTransaction = false; try { + beganTransaction = TransactionUtil.begin(); + Map<String, Object> context = new HashMap<String, Object>(); context.put("request", request); context.put("response", response); @@ -123,6 +128,12 @@ public class GroovyEventHandler implemen return (String) result; } catch (Exception e) { throw new EventHandlerException("Groovy Event Error", e); + } finally { + try { + TransactionUtil.commit(beganTransaction); + } catch (GenericTransactionException e) { + Debug.logError(e, module); + } } } } Modified: ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/event/JavaEventHandler.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/event/JavaEventHandler.java?rev=1740629&r1=1740628&r2=1740629&view=diff ============================================================================== --- ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/event/JavaEventHandler.java (original) +++ ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/event/JavaEventHandler.java Sat Apr 23 03:51:13 2016 @@ -27,6 +27,8 @@ import javax.servlet.http.HttpServletReq import javax.servlet.http.HttpServletResponse; import org.ofbiz.base.util.Debug; +import org.ofbiz.entity.transaction.GenericTransactionException; +import org.ofbiz.entity.transaction.TransactionUtil; import org.ofbiz.webapp.control.ConfigXMLReader; import org.ofbiz.webapp.control.ConfigXMLReader.Event; import org.ofbiz.webapp.control.ConfigXMLReader.RequestMap; @@ -79,6 +81,7 @@ public class JavaEventHandler implements } private String invoke(String eventPath, String eventMethod, Class<?> eventClass, Class<?>[] paramTypes, Object[] params) throws EventHandlerException { + boolean beganTransaction = false; if (eventClass == null) { throw new EventHandlerException("Error invoking event, the class " + eventPath + " was not found"); } @@ -88,6 +91,7 @@ public class JavaEventHandler implements Debug.logVerbose("[Processing]: JAVA Event", module); try { + beganTransaction = TransactionUtil.begin(); Method m = eventClass.getMethod(eventMethod, paramTypes); String eventReturn = (String) m.invoke(null, params); @@ -106,6 +110,12 @@ public class JavaEventHandler implements } catch (Exception e) { Debug.logError(e, "Problems Processing Event", module); throw new EventHandlerException("Problems processing event: " + e.toString(), e); + } finally { + try { + TransactionUtil.commit(beganTransaction); + } catch (GenericTransactionException e) { + Debug.logError(e, module); + } } } } Modified: ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/event/SimpleEventHandler.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/event/SimpleEventHandler.java?rev=1740629&r1=1740628&r2=1740629&view=diff ============================================================================== --- ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/event/SimpleEventHandler.java (original) +++ ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/event/SimpleEventHandler.java Sat Apr 23 03:51:13 2016 @@ -27,6 +27,8 @@ import javax.servlet.http.HttpServletRes import org.ofbiz.base.util.Debug; import org.ofbiz.base.util.UtilHttp; import org.ofbiz.base.util.UtilProperties; +import org.ofbiz.entity.transaction.GenericTransactionException; +import org.ofbiz.entity.transaction.TransactionUtil; import org.ofbiz.minilang.MiniLangException; import org.ofbiz.minilang.SimpleMethod; import org.ofbiz.webapp.control.ConfigXMLReader; @@ -52,6 +54,8 @@ public class SimpleEventHandler implemen * @see org.ofbiz.webapp.event.EventHandler#invoke(ConfigXMLReader.Event, ConfigXMLReader.RequestMap, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) */ public String invoke(Event event, RequestMap requestMap, HttpServletRequest request, HttpServletResponse response) throws EventHandlerException { + boolean beganTransaction = false; + String xmlResource = event.path; String eventName = event.invoke; Locale locale = UtilHttp.getLocale(request); @@ -67,6 +71,7 @@ public class SimpleEventHandler implemen Debug.logVerbose("[Processing]: SIMPLE Event", module); try { + beganTransaction = TransactionUtil.begin(); String eventReturn = SimpleMethod.runSimpleEvent(xmlResource, eventName, request, response); if (Debug.verboseOn()) Debug.logVerbose("[Event Return]: " + eventReturn, module); return eventReturn; @@ -75,6 +80,15 @@ public class SimpleEventHandler implemen String errMsg = UtilProperties.getMessage(SimpleEventHandler.err_resource, "simpleEventHandler.event_not_completed", (locale != null ? locale : Locale.getDefault())) + ": "; request.setAttribute("_ERROR_MESSAGE_", errMsg + e.getMessage()); return "error"; + } catch (GenericTransactionException e) { + Debug.logError(e, module); + return "error"; + } finally { + try { + TransactionUtil.commit(beganTransaction); + } catch (GenericTransactionException e) { + Debug.logError(e, module); + } } } } |
Free forum by Nabble | Edit this page |