Hi,
I have an OSGI (Karaf) setup where I have two isolated instances of Clojure
deployed & running in two bundles (within the same JVM),
and I am seeing a problem where passing Clojure Objects (such as
PersistentArrayMaps) from one clojure bundle to another, breaks clojure
interfaces
at the receiving end. The two bundles communicate via a OSGI services.
The specific problem/example is as follows:
Lets say that I have two Clojure bundle instances running in Apache Karaf
(clj-bundle-A) and (clj-bundle-B)
clj-bundle-A registers an interface implementation with the OSGI registry.
The interface looks like:
public interface clojureCall {
Object callMethod(Object request);
}
clj-bundle-B looks up the interface from the OSGI registry and calls the
method, the code looks like this:
(defn call-bundle-a []
; service is an instance of clojureCall implemented in clj-bundle-a
(let [service (lookup-osgi-registry-bundle-a)]
; send a map as a request
(.callMethod service {"hello" "world"})))
An instance of the PersistentHashMap {"hello" "world"} is sent from
clj-bundle-B to clj-bundle-A;
However, clj-bundle-A only sees it as a Java object with its clojure
interfaces not realized.
For example on clj-bundle-A, the passed in argument looks like
> (println request)
#<PersistentArrayMap {"hello" "world"} *<== I would expect it to print
{"hello" "map"} instead it is realizing this as a Java object.*
> (println (type request))
clojure.lang.PersistentHashMap *<== The type information is saved, but the
interface is broken*
> (map? request)
false
> (instance? java.util.Map request) *<== the java interfaces are realized
correctly*
true
I figure that the problem may be related to the two Clojure-Bundles are not
sharing any classes between them, since they are running in different
isolated bundles.
I want to have to multiple instances of clojures running so as to run
multiple versions of the sample clj file in the same JVM
I am wondering if anyone has any suggestions on how to avoid this problem.
Thanks,
Rama
--
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.