Implementación de EJB escrito en clojure en un servidor de aplicaciones independiente

¿Alguien tiene experiencia en la combinación del código Clojure con la infraestructura JavaEE existente (en mi caso, es Webspehere Application Server 8)?

Al crear un jar para ser implementado en el servidor de aplicaciones, puse (:aot [carina.stateless]) a project.clj (carina.stateless incluye clase y dos interfaces necesarias para EJB sin estado) y luego se ejecuta lein jar resultando en un enorme jar compuesto por todos los espacios de nombres clojure dependientes.

Traté de evitar lein uberjar ya que tengo la intención de implementar algunas aplicaciones más en el mismo servidor de aplicaciones y hacer uso de archivos jar compartidos, pero ahora, la mayor parte del código se precompila.

¿Hay alguna manera de evitar que este paso AOT produzca un archivo jar enorme si todo lo que estoy haciendo es implementar javax.ejb.Remote y extendiendo javax.ejb.Stateless?

preguntado el 03 de mayo de 12 a las 16:05

Encontré una forma de crear un EJB liviano con clojure e implementarlo sin necesidad de AOT. Usé un pequeño EJB escrito en Java que usa clojure.lang.RT para compilar espacios de nombres de clojure y para llamar a funciones de clojure. El proyecto de ejemplo está disponible en github: github.com/alesk/clojure-javainterop -

1 Respuestas

Respuesta corta:

No, no hay manera de hacer lo que quieres. Es posible que pueda seleccionar algunas bibliotecas compartidas y subirlas en la jerarquía del cargador de clases en su servidor de aplicaciones, pero "probablemente" no valga la pena el esfuerzo.

Pero mira este espacio:

Su problema es que necesita (espero) solo algo de clojure que usa su EJB.

Actualmente, clojure no es modular, por lo que está obligado a tomar todo clojure.jar y cualquier dependencia.

No le ayuda en este momento, pero la función que necesita es 'sacudir el árbol' mediante el cual puede, a través de un proceso aún no especificado, 'sacudir' sus dependencias y todas las partes que no necesita se caen, dejándolo con un pequeño runtime y jar.

Creo que esto se mencionó en el clojure conj más reciente en relación con las implementaciones en plataformas pequeñas como Android.

contestado el 03 de mayo de 12 a las 20:05

¡Gracias! El frasco no es tan grande de todos modos, pero esa característica de 'sacudir árboles' suena realmente prometedora. - Aleš Kotnik

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.