从任何应用程序的代码流中创建新的类加载器是否违反Java EE规范?
我想在运行时将类加载到将从应用程序创建的单独的类加载器中。
答案 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已经足够成熟,如果您有合法需求,您几乎可以肯定地完成它。它可能不是很好,漂亮,舒适或者像使用自定义类加载器一样简单,并且可能依赖于应用程序服务器,但它很可能能够工作。