沙盒或带壁的类加载器,用于将应用程序与运行时环境分开

时间:2014-02-22 18:41:29

标签: java classloader dynamic-class-loaders

Tomcat的Web应用程序被包装到.war文件中并被抛入Tomcat。应用程序可以使用war文件中的类和包含的jar文件。这将Tomcat的运行时类与应用程序类分开。

使用storm时(参见storm-project.net),没有类似的隔离。相反,推荐的方法需要创建一个“胖罐子”,表示一个罐子包含从他们自己的罐子里打开它们之后所有必需的类文件。对于简单的情况,这可行,但生成的胖罐必须正确合并所有合并罐中的所有META-INF / *文件,这不会半自动工作。

我不会害羞地编写我自己的类加载器,它模拟像war-file这样的东西。除了我不知道如何拦截加载我部署的所有类的默认类加载器。

我的理论是我的应用程序的一个类首先由默认的类加载器加载。据推测,在static - 部分,我会施放魔法类加载器法术,这样所有依赖类将由我自己的类加载器加载,现在如何从我认为合适的任何类中获取必要的类。

对所描述的一般问题以及所需的特定魔法的任何暗示都表示赞赏。

1 个答案:

答案 0 :(得分:0)

拦截类加载器:默认的类加载器是加载当前正在执行的类的加载器。因此,如果您使用单独的类加载器来引入WAR的入口点,则来自它或其(运行时/创建)后代的每个类引用都将默认通过该类加载器。然后,类加载器可以决定它应该引用更高级别的类加载器以及它应该使用自己的解析规则重新加载的内容 - 简单的规则“只向父级询问我在此插件中没有的内容” ,也称为“父母最后”,通常就足够了。