javaee规范需要澄清

javaee规范需要澄清,java,jakarta-ee,classloader,Java,Jakarta Ee,Classloader,从任何应用程序的代码流中创建新的类加载器是否违反JavaEE规范 我想在运行时将类加载到一个单独的类加载器中,该加载器将从应用程序中创建。我不能100%确定它是否适用于Java EE应用程序的所有部分(例如web应用程序),但在EJB中,不允许您创建新的类加载器: 来自JSR220(EJB3.0,核心合同和需求): “21.1.2编程限制 企业bean不能试图创建类加载器;获取当前的类加载器; 设置上下文类加载器;设置安全管理器;创建新的安全管理器;停止 JVM;或更改输入、输出和错误流。”这

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


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

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

来自JSR220(EJB3.0,核心合同和需求):

“21.1.2编程限制

企业bean不能试图创建类加载器;获取当前的类加载器; 设置上下文类加载器;设置安全管理器;创建新的安全管理器;停止
JVM;或更改输入、输出和错误流。”

这肯定违反了规范。例如,请参阅:

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

有两种方法可以满足您的潜在需求。一个是,如果您设想在特定的appserver上进行内部部署,这并不重要——只要您知道它可以工作。您最有可能搞砸热部署,所以您应该在热部署中进行测试


另一个是查看JavaEE或您的特定应用程序服务器为您提供了什么。例如,Weblogic允许您配置ear的类加载层次结构。在这一点上,JavaEE已经足够成熟,如果您有合法的需求,几乎可以肯定地完成它。它可能没有定制类加载器那么好、漂亮、舒适或简单,并且可能依赖于应用程序服务器,但它可能能够正常工作。

该链接专门讨论了EJB。其他J2EE组件呢?@java_geek,据我所知,对servlet的限制是可选的,兼容的servlet容器会通过安全限制限制您这样做(换句话说,这取决于实现)。如果容器想要支持热部署,类装入器肯定是敏感的。如果你不是指servlet,你想知道什么?J2EE的哪个子部分?J2EE相当庞大。另外,你确定你说的是老式的J2EE,而不是4年前更新的JavaEE吗?