在单个JVM实例中部署Clojure应用程序

问题描述 投票:5回答:4

假设我在Clojure中使用ZeroMQ和BSON作为协议开发了两个或多个不同的服务器应用程序。我如何使用单个JVM实例部署它们,同时还共享公共依赖项?

似乎为每个独立应用程序使用JVM实例会浪费内存。我计划将来开发几个Clojure应用程序,并且VPS内存并不便宜。

尽管没有明确说明,但是在隔离其状态的同时,在应用服务器(Jetty,Glassfish)中运行的应用似乎共享相同的JVM。但是,它们需要一个容器,而Servlet和Enterprise JavaBean都没有一种可以轻松适应自定义协议的实现。

我一直在考虑使用Servlet并实现虚拟service()方法,尽管我不喜欢HTTP Server开销无谓的想法。至于EJB容器,我什至无法弄清楚它的实现。

有一个只需要init()和destroy()方法的容器,但是我找不到提供它的应用服务器。

也许有办法解决,或者我甚至不需要应用程序服务器。有人可以指出我正确的方向吗?

servlets clojure jvm osgi application-server
4个回答
3
投票

听起来您可以使用EJB容器,但前提是要更容易或更简单地使用它。您看过Immutant吗?它基本上是JBossAS for Clojure的包装,由Red Hat的人(他们也拥有JBossAS)编写。

除了成为应用程序服务器之外,这些人还围绕Clojure包装了JMS和其他Java-EE功能,以便在应用程序之间发送消息appears pretty simple

此外,它们还有DaemonsJobs,它们可能提供的内容与您在init()destroy()中描述为简单服务的内容类似。

话虽如此,我还没使用过,所以我不能保证它太棒了/令人厌恶。


3
投票

因此,您有两个应用程序都共享相同的依赖关系,并且都希望响应和/或在消息总线上生成事件。


2
投票

我一直在搜索,发现某些实现OSGi服务平台的应用服务器具有比Java EE提供的容器更简单的轻量级容器。


0
投票

我不确定什么是DD,但是任何JAR都是有效的捆绑包。由于clojure的类型不安全,因此您需要在clojure世界和OSGi / Java世界之间建立桥梁,但是OSGi API对于此类桥梁实在是梦wet以求。

© www.soinside.com 2019 - 2024. All rights reserved.