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,

Reply via email to