You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by jl...@apache.org on 2016/04/23 05:51:13 UTC
svn commit: r1740629 - in
/ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/event:
GroovyEventHandler.java JavaEventHandler.java SimpleEventHandler.java
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);
+ }
}
}
}