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

ade*_*ade 5 osgi jvm servlets clojure application-server

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

为每个独立应用程序使用 JVM 实例似乎是一种内存浪费。以后打算开发几个Clojure应用,VPS内存也不便宜。

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

我一直在考虑使用 Servlets 并实现一个虚拟的 service() 方法,尽管我不喜欢有一个毫无意义的 HTTP 服务器开销的想法。至于 EJB 容器,我什至无法弄清楚它的实现。

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

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

Nic*_*uer 3

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

除了作为应用程序服务器之外,这些人还围绕 Clojure 封装了 JMS 和其他 Java-EE 功能,这样在应用程序之间发送消息就显得非常简单

此外,他们还有DaemonsJobs,它们可能提供类似于您使用init()和描述的简单服务的内容destroy()

话虽这么说,我还没有使用过它,所以我不能保证它有多棒/可怕。