我有一个应用程序管理器,可以在一个JVM中加载和运行应用程序jar。它将每个jar隔离到自己的类加载器。管理器通过套接字与子进程通信以进行数据和配置。我遇到的麻烦是我希望能够在每个应用程序中使用getFrames调用进行几何保存/恢复,并且它总是返回JVM中为该JVM中运行的每个应用程序的所有帧。有没有办法过滤每个应用程序的结果?我尝试过基于类加载器的过滤,但Frames类加载器总是为空。
答案 0 :(得分:1)
由于您只提供了一些细节,因此很难说出错的原因。一些评论:
在单个VM中运行多个Java应用程序通常不是一个好主意。例如,日志框架和数据库驱动程序在VM中安装全局挂钩,因此卸载它们变得不可能。考虑在自己的VM中运行每个应用程序。使用系统属性确定所需的参数。 Here is some code应该让你开始。
如果在自己的虚拟机中运行每个应用程序都不是一个选项,那么如何与每个应用程序交谈并使其与应用服务器“注册”?为此目的Web servers use standardized listeners。这样,应用程序可以告诉您要保存哪些帧/配置值。
类的classLoader
属性永远不能为null - 类加载器是在Java中创建Class实例的唯一方法。
答案 1 :(得分:1)
我假设getFrames()查询一些全局集合。隔离这样一个全局可访问库的唯一方法是让每个应用程序加载都是Frames库的自己的副本(因此它不可全局访问)这使得调用getFrames()更加困难;)