0

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

使用storm时(参见storm-project.net),没有类似的隔离。相反,推荐的方法需要创建一个“胖 jar”,表示在将所有必要的类文件从各自的 jar 中解包后包含所有必要的类文件的 jar。对于简单的情况,这是可行的,但生成的胖 jar 必须正确合并来自所有合并 jar 的所有 META-INF/* 文件,这不能半自动工作。

我不会害羞地编写自己的类加载器来模拟类似战争文件的东西。除了我不知道如何拦截加载我部署的所有类的默认类加载器。

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

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

4

1 回答 1

0

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

于 2014-02-22T18:53:22.620 回答