In senso antiorario, il plugin Eclipse per Clojure, è scritto in Java misto e Clojure. Usa clojure.osgi 1.2.10 ancora.
Quindi è una dimostrazione dal vivo del concetto che è possibile. E AFAIK, in senso antiorario, viene utilizzato con successo da centinaia di persone.
Esistono alcuni vincoli: lo spazio dei nomi di Clojure è "globale" per alcuni "root classloader". PER ESEMPIO. se impacchetti Clojure all'interno di un pacchetto chiamato, ad esempio, myapp.clojure, probabilmente avrai un sacco di altri bundle che richiedono myapp.clojure. Dì ad esempio myapp.bundle1, myapp.bundle2. Quando lo fai, e, da ogni bundle, carica in memoria (richiedono) gli spazi dei nomi dei bundle, ognuno verrà caricato all'interno del ClassLoader giusto (gli spazi dei nomi di myapp.bundle1 verranno caricati nel classloader di contesto di myapp.bundle1, e gli spazi dei nomi di myapp.bundle2 verranno caricati nel classloader di contesto di myapp.bundle2). Questo è grandioso, perché permette all'interoperabilità di java di funzionare correttamente.
Ma ricorda che alla fine, gli spazi dei nomi caricati dal bundle1 & bundle2 saranno gestiti dal "mondo del namespace globale" in bundle myapp.clojure.
Per essere onesti, questo non ha ancora dimostrato un problema in senso antiorario. Perché all'interno della stessa caratteristica, avere i bundle condividere una singola istanza di Clojure è quasi ok.
I potenziali svantaggi sono:
- se si utilizzano le librerie di terze parti, ad esempio tools.logging, non sarà possibile avere spazi dei nomi in myapp.bundle1 a seconda della versione X di tools.logging e allo stesso tempo myapp.bundle2 dipenderà dalla versione Y di tools.logging. Cioè, all'interno della tua funzione in cui hai un clojure condiviso tramite bundle myapp.clojure, lavori come se le regole OSGi non si applicassero, ad esempio, come funzionano le webapp.
- non viene scalato correttamente se applicato in modo massivo: se ogni funzione Eclipse dovesse riconfezionare la propria versione di Clojure, ci sarebbe uno spreco di memoria. Ma questo inconveniente è più teorico che pratico, ancora. E questo è un problema che può essere affrontato in seguito, quando ne emergerà la necessità.
Si noti che per un prodotto Eclipse RCP, al contrario di un plug-in Eclipse, questi svaniscono.
Se volete vedere come antiorario abbia riconfezionato clojure, e utilizza clojure.osgi, si può guardare al suo codice sorgente:
http://github.com/laurentpetit/ccw.clojure.git http://github.com/laurentpetit/ccw.git
HTH,
- Laurent
Dopo averci pensato un po 'ho avuto un piccolo brainstorm e ho cercato OSGI e Clojure e ho trovato questo post sul blog [esecuzione del clojure in OSGI] (http://www.talios.com/clojure_running_succ essfully_under_osgi.htm) e un [thread di posta elettronica] (http://osdir.com/ml/clojure/2009-10/msg00113.html) che implica che non è una buona idea. Un po 'confuso. – Punit