Author: jonesde
Date: Sun May 18 17:22:46 2008 New Revision: 657701 URL: http://svn.apache.org/viewvc?rev=657701&view=rev Log: Added support for groovy services, and an example of the same; cleaned up the way that bsh services work and updated the example and such to match, now returns a context as one would expect Added: ofbiz/trunk/framework/common/script/org/ofbiz/common/BshServiceTest.bsh - copied, changed from r657609, ofbiz/trunk/framework/common/src/org/ofbiz/common/BshServiceTest.bsh ofbiz/trunk/framework/common/script/org/ofbiz/common/GroovyServiceTest.groovy ofbiz/trunk/framework/service/src/org/ofbiz/service/engine/GroovyEngine.java (with props) Removed: ofbiz/trunk/framework/common/src/org/ofbiz/common/BshServiceTest.bsh Modified: ofbiz/trunk/framework/base/src/base/org/ofbiz/base/util/GroovyUtil.java ofbiz/trunk/framework/common/servicedef/secas_test.xml ofbiz/trunk/framework/common/servicedef/services_test.xml ofbiz/trunk/framework/service/config/serviceengine.xml ofbiz/trunk/framework/service/src/org/ofbiz/service/engine/BeanShellEngine.java Modified: ofbiz/trunk/framework/base/src/base/org/ofbiz/base/util/GroovyUtil.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/base/org/ofbiz/base/util/GroovyUtil.java?rev=657701&r1=657700&r2=657701&view=diff ============================================================================== --- ofbiz/trunk/framework/base/src/base/org/ofbiz/base/util/GroovyUtil.java (original) +++ ofbiz/trunk/framework/base/src/base/org/ofbiz/base/util/GroovyUtil.java Sun May 18 17:22:46 2008 @@ -53,6 +53,10 @@ if (script == null) { URL scriptUrl = FlexibleLocation.resolveLocation(location); + if (scriptUrl == null) { + throw new GeneralException("Script not found at location [" + location + "]"); + } + GroovyShell shell = getShell(context); script = shell.parse(scriptUrl.openStream(), scriptUrl.getFile()); if (Debug.verboseOn()) { Copied: ofbiz/trunk/framework/common/script/org/ofbiz/common/BshServiceTest.bsh (from r657609, ofbiz/trunk/framework/common/src/org/ofbiz/common/BshServiceTest.bsh) URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/script/org/ofbiz/common/BshServiceTest.bsh?p2=ofbiz/trunk/framework/common/script/org/ofbiz/common/BshServiceTest.bsh&p1=ofbiz/trunk/framework/common/src/org/ofbiz/common/BshServiceTest.bsh&r1=657609&r2=657701&rev=657701&view=diff ============================================================================== --- ofbiz/trunk/framework/common/src/org/ofbiz/common/BshServiceTest.bsh (original) +++ ofbiz/trunk/framework/common/script/org/ofbiz/common/BshServiceTest.bsh Sun May 18 17:22:46 2008 @@ -17,9 +17,19 @@ * under the License. */ -System.out.println("-=-=-=- TEST BSH SERVICE -=-=-=-"); -if ( context.containsKey("message") ) { - String message = (String) context.get("message"); - System.out.println("----- Message is: " + message + " -----"); +import org.ofbiz.service.ServiceUtil; +import org.ofbiz.base.util.Debug; + +Debug.logInfo("-=-=-=- TEST BSH SERVICE -=-=-=-", ""); +results = ServiceUtil.returnSuccess(); +if (context.containsKey("message")) { + message = context.get("message"); + results.put("result", message); + results.put("successMessage", "Got message [" + message + "] and finished fine!"); + Debug.logInfo("----- Message is: " + message + " -----", ""); +} else { + results.put("successMessage", "Got no message but finished fine anyway"); + results.put("result", "[no message received]"); } -context.put("result","Script finished"); + +return results; Added: ofbiz/trunk/framework/common/script/org/ofbiz/common/GroovyServiceTest.groovy URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/script/org/ofbiz/common/GroovyServiceTest.groovy?rev=657701&view=auto ============================================================================== --- ofbiz/trunk/framework/common/script/org/ofbiz/common/GroovyServiceTest.groovy (added) +++ ofbiz/trunk/framework/common/script/org/ofbiz/common/GroovyServiceTest.groovy Sun May 18 17:22:46 2008 @@ -0,0 +1,35 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import org.ofbiz.service.ServiceUtil; +import org.ofbiz.base.util.Debug; + +Debug.logInfo("-=-=-=- TEST BSH SERVICE -=-=-=-", ""); +result = ServiceUtil.returnSuccess(); +if (context.containsKey("message")) { + message = context.get("message"); + result.put("successMessage", "Got message [" + message + "] and finished fine"); + result.put("result", message); + Debug.logInfo("----- Message is: " + message + " -----", ""); +} else { + result.put("successMessage", "Got no message but finished fine anyway"); + result.put("result", "[no message received]"); +} + +return result; Modified: ofbiz/trunk/framework/common/servicedef/secas_test.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/servicedef/secas_test.xml?rev=657701&r1=657700&r2=657701&view=diff ============================================================================== --- ofbiz/trunk/framework/common/servicedef/secas_test.xml (original) +++ ofbiz/trunk/framework/common/servicedef/secas_test.xml Sun May 18 17:22:46 2008 @@ -28,7 +28,7 @@ <condition field-name="message" operator="equals" value="12345"/> <action service="testBsh" mode="sync"/> </eca> - <eca service="testBsh" event="commit"> + <eca service="testScv" event="commit"> <condition-service service-name="conditionReturnTrue"/> <action service="blockingTestScv" mode="sync"/> </eca> Modified: ofbiz/trunk/framework/common/servicedef/services_test.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/servicedef/services_test.xml?rev=657701&r1=657700&r2=657701&view=diff ============================================================================== --- ofbiz/trunk/framework/common/servicedef/services_test.xml (original) +++ ofbiz/trunk/framework/common/servicedef/services_test.xml Sun May 18 17:22:46 2008 @@ -90,21 +90,24 @@ <attribute name="result" type="String" mode="OUT"/> </service> - <service name="testBsh" engine="bsh" - location="org/ofbiz/common/BshServiceTest.bsh" invoke=""> + <service name="testBsh" engine="bsh" location="org/ofbiz/common/BshServiceTest.bsh" invoke=""> <description>Test BeanShell Script Service</description> <attribute name="message" type="String" mode="IN" optional="true"/> <attribute name="result" type="String" mode="OUT"/> </service> - <service name="testJMSQueue" engine="jms" - location="serviceMessenger" invoke="testScv"> + <service name="testGroovy" engine="groovy" location="org/ofbiz/common/GroovyServiceTest.groovy" invoke=""> + <description>Test Groovy Script Service</description> + <attribute name="message" type="String" mode="IN" optional="true"/> + <attribute name="result" type="String" mode="OUT"/> + </service> + + <service name="testJMSQueue" engine="jms" location="serviceMessenger" invoke="testScv"> <description>Test JMS Queue service</description> <attribute name="message" type="String" mode="IN"/> </service> - <service name="testJMSTopic" engine="jms" - location="serviceMessenger" invoke="testScv"> + <service name="testJMSTopic" engine="jms" location="serviceMessenger" invoke="testScv"> <description>Test JMS Topic service</description> <attribute name="message" type="String" mode="IN"/> </service> Modified: ofbiz/trunk/framework/service/config/serviceengine.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/service/config/serviceengine.xml?rev=657701&r1=657700&r2=657701&view=diff ============================================================================== --- ofbiz/trunk/framework/service/config/serviceengine.xml (original) +++ ofbiz/trunk/framework/service/config/serviceengine.xml Sun May 18 17:22:46 2008 @@ -41,6 +41,7 @@ <!-- Service Engine Configuration --> <engine name="bsh" class="org.ofbiz.service.engine.BeanShellEngine"/> + <engine name="groovy" class="org.ofbiz.service.engine.GroovyEngine"/> <engine name="group" class="org.ofbiz.service.group.ServiceGroupEngine"/> <engine name="http" class="org.ofbiz.service.engine.HttpEngine"/> <engine name="interface" class="org.ofbiz.service.engine.InterfaceEngine"/> Modified: ofbiz/trunk/framework/service/src/org/ofbiz/service/engine/BeanShellEngine.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/service/src/org/ofbiz/service/engine/BeanShellEngine.java?rev=657701&r1=657700&r2=657701&view=diff ============================================================================== --- ofbiz/trunk/framework/service/src/org/ofbiz/service/engine/BeanShellEngine.java (original) +++ ofbiz/trunk/framework/service/src/org/ofbiz/service/engine/BeanShellEngine.java Sun May 18 17:22:46 2008 @@ -21,15 +21,20 @@ import java.net.URL; import java.util.Map; +import org.ofbiz.base.util.BshUtil; +import org.ofbiz.base.util.Debug; +import org.ofbiz.base.util.GeneralException; import org.ofbiz.base.util.HttpClient; import org.ofbiz.base.util.HttpClientException; import org.ofbiz.base.util.UtilGenerics; import org.ofbiz.base.util.UtilURL; +import org.ofbiz.base.util.UtilValidate; import org.ofbiz.base.util.cache.UtilCache; import org.ofbiz.service.DispatchContext; import org.ofbiz.service.GenericServiceException; import org.ofbiz.service.ModelService; import org.ofbiz.service.ServiceDispatcher; +import org.ofbiz.service.ServiceUtil; import bsh.EvalError; import bsh.Interpreter; @@ -61,70 +66,26 @@ // Invoke the BeanShell Script. private Map<String, Object> serviceInvoker(String localName, ModelService modelService, Map<String, Object> context) throws GenericServiceException { - if (modelService.location == null || modelService.invoke == null) - throw new GenericServiceException("Cannot locate service to invoke"); - - // get the DispatchContext from the localName and ServiceDispatcher - DispatchContext dctx = dispatcher.getLocalContext(localName); - - // get the classloader to use - ClassLoader cl = null; - - if (dctx == null) { - cl = this.getClass().getClassLoader(); - } else { - cl = dctx.getClassLoader(); + if (UtilValidate.isEmpty(modelService.location)) { + throw new GenericServiceException("Cannot run Groovy service with empty location"); } String location = this.getLocation(modelService); - - // source the script into a string - String script = scriptCache.get(localName + "_" + location); - - if (script == null) { - synchronized (this) { - script = scriptCache.get(localName + "_" + location); - if (script == null) { - URL scriptUrl = UtilURL.fromResource(location, cl); - - if (scriptUrl != null) { - try { - HttpClient http = new HttpClient(scriptUrl); - script = http.get(); - } catch (HttpClientException e) { - throw new GenericServiceException("Cannot read script from resource", e); - } - } else { - throw new GenericServiceException("Cannot read script, resource [" + location + "] not found"); - } - if (script == null || script.length() < 2) { - throw new GenericServiceException("Null or empty script"); - } - scriptCache.put(localName + "_" + location, script); - } - } - } - - Interpreter bsh = new Interpreter(); - - Map<String, Object> result = null; - + try { - bsh.set("dctx", dctx); // set the dispatch context - bsh.set("context", context); // set the parameter context used for both IN and OUT - bsh.eval(script); - Object bshResult = bsh.get("result"); - - if ((bshResult != null) && (bshResult instanceof Map)) { - Map<String, Object> bshMapResult = UtilGenerics.checkMap(bshResult); - context.putAll(bshMapResult); + Object resultObj = BshUtil.runBshAtLocation(location, context); + + if (resultObj != null && resultObj instanceof Map) { + Debug.logInfo("Got result Map from script return: " + resultObj, module); + return (Map<String, Object>) resultObj; + } else if (context.get("result") != null && context.get("result") instanceof Map) { + Debug.logInfo("Got result Map from context: " + resultObj, module); + return (Map<String, Object>) context.get("result"); } - result = modelService.makeValid(context, ModelService.OUT_PARAM); - } catch (EvalError e) { - throw new GenericServiceException("BeanShell script threw an exception", e); + } catch (GeneralException e) { + throw new GenericServiceException(e); } - return result; - } + return ServiceUtil.returnSuccess(); + } } - Added: ofbiz/trunk/framework/service/src/org/ofbiz/service/engine/GroovyEngine.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/service/src/org/ofbiz/service/engine/GroovyEngine.java?rev=657701&view=auto ============================================================================== --- ofbiz/trunk/framework/service/src/org/ofbiz/service/engine/GroovyEngine.java (added) +++ ofbiz/trunk/framework/service/src/org/ofbiz/service/engine/GroovyEngine.java Sun May 18 17:22:46 2008 @@ -0,0 +1,75 @@ +/******************************************************************************* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + *******************************************************************************/ +package org.ofbiz.service.engine; + +import java.util.Map; + +import org.ofbiz.base.util.GeneralException; +import org.ofbiz.base.util.GroovyUtil; +import org.ofbiz.base.util.UtilValidate; +import org.ofbiz.service.GenericServiceException; +import org.ofbiz.service.ModelService; +import org.ofbiz.service.ServiceDispatcher; +import org.ofbiz.service.ServiceUtil; + +/** + * Groovy Script Service Engine + */ +public final class GroovyEngine extends GenericAsyncEngine { + + public GroovyEngine(ServiceDispatcher dispatcher) { + super(dispatcher); + } + + /** + * @see org.ofbiz.service.engine.GenericEngine#runSyncIgnore(java.lang.String, org.ofbiz.service.ModelService, java.util.Map) + */ + public void runSyncIgnore(String localName, ModelService modelService, Map<String, Object> context) throws GenericServiceException { + runSync(localName, modelService, context); + } + + /** + * @see org.ofbiz.service.engine.GenericEngine#runSync(java.lang.String, org.ofbiz.service.ModelService, java.util.Map) + */ + public Map<String, Object> runSync(String localName, ModelService modelService, Map<String, Object> context) throws GenericServiceException { + return serviceInvoker(localName, modelService, context); + } + + private Map<String, Object> serviceInvoker(String localName, ModelService modelService, Map<String, Object> context) throws GenericServiceException { + if (UtilValidate.isEmpty(modelService.location)) { + throw new GenericServiceException("Cannot run Groovy service with empty location"); + } + + String location = this.getLocation(modelService); + + try { + Object resultObj = GroovyUtil.runScriptAtLocation(location, context); + + if (resultObj != null && resultObj instanceof Map) { + return (Map<String, Object>) resultObj; + } else if (context.get("result") != null && context.get("result") instanceof Map) { + return (Map<String, Object>) context.get("result"); + } + } catch (GeneralException e) { + throw new GenericServiceException(e); + } + + return ServiceUtil.returnSuccess(); + } +} Propchange: ofbiz/trunk/framework/service/src/org/ofbiz/service/engine/GroovyEngine.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: ofbiz/trunk/framework/service/src/org/ofbiz/service/engine/GroovyEngine.java ------------------------------------------------------------------------------ svn:keywords = "Date Rev Author URL Id" Propchange: ofbiz/trunk/framework/service/src/org/ofbiz/service/engine/GroovyEngine.java ------------------------------------------------------------------------------ svn:mime-type = text/plain |
Free forum by Nabble | Edit this page |