Hello, Thanks for this detail email and your works.
I'm not opposed to load closure in OFBiz code base for same reason that you exposed. For success the inclusion, I suggest to rename the namespace to org.apache.ofbiz, add test one framework/service/testdef and an example "hello world" service. Thanks Eugen ! Nicolas On 04/07/2021 14:59, Eugen Stan wrote: > Hello, > > I've implemented a clojure engine for OFBiz and I would like to > contribute this to OFBiz repo. > > It was simpler than I thought. > > NOTE: Right now the code is bundled with the ofbiz-repl-plugin in > https://github.com/netdava/ofbiz-clojure-repl . > Code is a draft and will be cleaned up for inclusion. > > == Why? > > * Allow OFBiz to use clojure libraries and ecosystem > * Allow Clojure developers to work with OFBiz in a friendlier way > * Does not increase OFBiz complexity > * Clojure is also dynamic like Groovy > * Enables powerful OFBiz administration and development via Clojure > Repl (work in progress, I have working babshka scripts that I can use > to manage OFBiz and call services remotely via REPL) > > == The code > > Code is based off of java engine: > https://github.com/netdava/ofbiz-clojure-repl/blob/main/src/main/java/com/netdava/ofbiz/clojure/ClojureEngine.java > > > Service it is defined the usual way: > https://github.com/netdava/ofbiz-clojure-repl/blob/main/servicedef/services.xml > > > A sample service looks like this > https://github.com/netdava/ofbiz-clojure-repl/blob/main/src/main/resources/com/netdava/ofbiz/clojure/sample.clj > > Copy pasting code snippets from above links: > > <service > name="com.netdava.ofbiz.clojure.sample/clojure-test-service" > engine="clojure" > location="com.netdava.ofbiz.clojure.sample" > invoke="clojure-test-service" export="true" > max-retry="3" use-transaction="false"> > <description> > Clojure repl service. Get service stats. > </description> > <attribute name="status" type="java.util.Map" mode="OUT"/> > </service> > > > (ns com.netdava.ofbiz.clojure.sample > (:gen-class) > (:import org.apache.ofbiz.service.DispatchContext)) > > (defn clojure-test-service [^DispatchContext dctx ^java.util.Map ctx] > (println "test " dctx " " ctx) > {"status" {"msg" "Hello OFBiz from clojure"}}) > > The service prints contexts and returns a clojure map with "status" > key and a map as a value (that implements java.util.Map). > > > To test out the code, clone ofbiz-clojure-repl into plugins/ > and apply two changes: clojars maven repo and the service engine > definition. > > https://github.com/ieugen/ofbiz-framework/commit/d50254ed57358544c8765a2647ec4bbdd3baf6a5 > > https://github.com/ieugen/ofbiz-framework/commit/e58ad5ed9d102210a1f1363e8337cef486cf999e > > > > Regards,