Java 黑客在';不相关的';在同一JVM上运行的程序?

Java 黑客在';不相关的';在同一JVM上运行的程序?,java,web-applications,Java,Web Applications,我的场景是,我有两个web应用程序在servlet容器中运行。尽管它们实际上是相关的应用程序,但servlet容器假定没有两个web应用程序实际上是相关的。我希望这些web应用能够以轻量级的方式共享数据。。。通过引用堆上的同一对象。显然,这些数据必须完全用两个web应用程序通用的类加载器定义的类来表示,但是让我们假设java.lang.String或byte[]将为我完成这项工作 诀窍是找到一种方法,使每个web应用程序都可以获得对要共享对象的引用 例如,如果安全管理器允许,一个web应用可能会

我的场景是,我有两个web应用程序在servlet容器中运行。尽管它们实际上是相关的应用程序,但servlet容器假定没有两个web应用程序实际上是相关的。我希望这些web应用能够以轻量级的方式共享数据。。。通过引用堆上的同一对象。显然,这些数据必须完全用两个web应用程序通用的类加载器定义的类来表示,但是让我们假设
java.lang.String
byte[]
将为我完成这项工作

诀窍是找到一种方法,使每个web应用程序都可以获得对要共享对象的引用

例如,如果安全管理器允许,一个web应用可能会执行以下操作:

System.setOut(new PrintStream(System.out) {
   public Object data;
});
然后,另一个web应用程序可以尝试在System.out上使用reflection来获取对
数据的引用

但我需要一些不受安全经理保护的东西。显然,成功的黑客攻击将有效地成为不受信任的程序无法共享JVM的原因之一,并且可能在将来被关闭。当然,它不受支持,无法依赖,需要在线程之间同步,等等

其想法是不需要以任何方式修改JVM或servlet容器配置,只需要像平常一样部署两个web应用程序,并滥用java.*类库的接缝来做JavaEE供应商希望您不要做的事情。:-)

想法

编辑1:强调关键目标/限制
Edit2:限定了我对“无关”的使用

为什么以下两种选择对您不可行?(1) 将两个应用程序作为一个supervisor应用程序中的模块运行。(2) 使用外部文件、管道或HTTP协议进行通信。像这样耦合据称无关的应用程序听起来是个坏主意。现代实践正朝着另一个方向发展,将应用程序分解为单独的外部通信服务。@Giorgio基本上是因为(1)要求我在Java Servlet API的“下面”添加一个框架——要么导入一个,要么生成一个。。。少即是多——我希望通过servlet API实现模块化;(2) 强迫我去马歇尔/解开马歇尔。。。如果我能找到另一种方法,为什么还要承受这种开销?@chrylis我的应用程序已经是单独的服务了,但是在我将它们全部部署到1个JVM的情况下,为什么我不必要地承受“外部”的冲击呢?我同意这是个坏主意。。。这个问题更多的是关于它到底能不能做到?(以黑客的精神,是吗?)。也许我最终要为我的应用程序做的是将我的“服务”(服务本身)打包成这样一种方式,Tomcat可以将它作为“资源”弹出到我的UI web应用程序的JNDI树中。然而,这也变得不可移植,给管理员带来了更多负担,并促使我在应用程序中嵌入servlet容器。这不是我现在想要的方向。如果我找到一个好的黑客,我现在可能会接受它。