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



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

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

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

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

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

也许有一种方法,或者我什至不需要应用程序服务器。有人可以将我指向正确的方向吗?

听起来您可以使用EJB容器,但是只有当它更容易或更易于使用时。你看过现象吗?基本上,这是Clojure围绕Jbossas的包装纸,由Red Hat的Guys(也有Jbossas)撰写。

除了作为应用程序服务器外,这些家伙还包装了JMS和其他Java-EE功能,因此在应用程序之间发送消息似乎很简单:

另外,他们有守护程序和工作,这可能会提供与您所描述的简单服务相似的东西,而init()destroy()

话虽如此,我没有使用过,所以我不能为它的敬畏/可怕。

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

如果我理解您在说什么,这应该很简单,就像启动JVM,并从类Path中访问所有代码并从主要方法初始化消息总线和代码。

如果要使用容器,则可以创建一些虚拟消息驱动的bean,这些bean坐在您的clojure代码和消息总线之间,假设您的消息总线有JMS适配器。使用Netbeans/Glassfish,这可能还不错。您可能会在监视方面获得一些,但我不确定您还会获得什么。

我一直在搜索并发现某些实现OSGI服务平台的应用程序服务器比Java EE提供的简单轻巧容器。

apache karaf例如可以直接从jar文件加载pojo应用程序。

我不确定什么是DDS,但是任何JAR都是有效的捆绑包。由于Clojure不是安全的类型,因此您需要桥接Clojure世界和Osgi/Java世界,但是Osgi API是此类桥梁的潮湿梦想。

并不是说在OSGI捆绑包中不会自动提供其内容,在OSGI中,bundle是默认情况下的。但是,API允许您在想要的任何地方打孔。

最新更新