Java EE规范需要澄清

时间:2010-03-03 15:59:47

标签: java java-ee classloader

从任何应用程序的代码流中创建新的类加载器是否违反Java EE规范?

我想在运行时将类加载到将从应用程序创建的单独的类加载器中。

2 个答案:

答案 0 :(得分:1)

我不是100%确定它是否适用于Java EE应用程序的所有部分(例如Web应用程序),但是从EJB开始,您不能创建新的类加载器:

来自JSR 220(EJB 3.0,核心合同和要求):

“21.1.2编程限制

...

企业bean不得尝试创建类加载器;获取当前的类加载器; 设置上下文类加载器;设置安全经理;创建一个新的安全管理器;停下来 JVM;或更改输入,输出和错误流。“

答案 1 :(得分:1)

这绝对违反了规范。例如,请参阅here

  

尝试创建或获取类加载器,设置或创建新的安全管理器,停止JVM,更改输入,输出和错误流。该限制强制执行安全性并维护EJB容器管理运行时环境的能力。

有两种方法可以满足您的潜在需求。一个是,如果您想要在特定的应用程序服务器上进行内部部署,那么无关紧要 - 只要您知道它可以正常工作。您最有可能搞乱热部署,因此这是您应该测试的地方。

另一个是查看Java EE或您的特定应用服务器为您提供的内容。例如,Weblogic允许您配置耳朵的类加载层次结构。在这一点上,Java EE已经足够成熟,如果您有合法需求,您几乎可以肯定地完成它。它可能不是很好,漂亮,舒适或者像使用自定义类加载器一样简单,并且可能依赖于应用程序服务器,但它很可能能够工作。