在应用程序之间共享java对象

时间:2011-11-30 13:24:58

标签: java java-ee reflection classloader

我想编写一个应用程序,当在服务器上部署时,发现该服务器上的某些类及其方法,并向客户端公开它的列表(通过Web服务,servlet或RMI)。

然后客户可以选择一种方法并激活它(带反射)。

问题是我的应用程序与服务器上的其他应用程序不在同一个上下文中,所以我无法激活他们的方法(我无法访问他们的类加载器)。

我有一些想法,但不确定它们是否可行:

  1. 创建一个jar并让服务器上的所有应用程序都知道它(通过Manifes文件或将它放在服务器库中) - 问题是,这样我就无法向客户端公开接口(也许我可以通过RMI吗?)

  2. 创建一个WAR并将所有应用程序链接到此WAR,因此当它们启动时会加载它(如链接到jar) - 据我所知,它是不可能的。

  3. 是否有一个知道所有类的类加载器?有没有办法得到它?

  4. 分析师如何做到这一点?

  5. 任何想法都会受到欢迎。

1 个答案:

答案 0 :(得分:0)

3)AFAIK应用程序服务器通常具有类加载器层次结构,因此没有单个类加载器可以访问所有类。实际上,您经常需要加载同一类的多个实例,例如部署使用静态类变量或类或库的不同版本的独立应用程序时。这是一个short description of how JBoss does it.

4)最有可能的探查者使用JVMTI

但是,您应该记住,由于安全性,稳定性和性能原因,不建议公开每个类和每个对象。用户是否应该能够调用内部类或基本类(如String)上的方法?用户是否应该可以致电System.exit()?我会说不,因此你需要定义一些确定暴露内容的方法。很可能一个更简单的解决方案(专用服务)将满足您的用例要求(您没有说出它们只是猜测)。

相关问题