Architecture JavaEE类加载标准
WebSphere的父级位于最后,父级位于第一。这个JavaEE兼容吗?所有兼容Java EE 5的应用程序服务器都支持这一点吗?我做了自己的研究(查阅了规范和一些博客),下面是我的想法 耳朵 规范没有定义或规定类装入器在EAR中的工作方式。然而,它定义了Architecture JavaEE类加载标准,architecture,jakarta-ee,classloader,Architecture,Jakarta Ee,Classloader,WebSphere的父级位于最后,父级位于第一。这个JavaEE兼容吗?所有兼容Java EE 5的应用程序服务器都支持这一点吗?我做了自己的研究(查阅了规范和一些博客),下面是我的想法 耳朵 规范没有定义或规定类装入器在EAR中的工作方式。然而,它定义了 对于类的运行时加载,应该有每个线程的上下文类加载器 可能存在用于解析类的分层类加载机制(应用程序服务器供应商可以自由实现他们选择的任何方式) 顶级类装入器(WAR/EAR)可以委托给低级类装入器(如引导、扩展等)。这符合J2SE类加载器委托模
不过,有趣的是,大多数主要的应用程序服务器似乎都支持某种关闭委托的机制,以便在必要时(由于冲突或其他原因)将应用程序与应用程序服务器隔离:WebSphere—“最后一个父应用程序”,GlassFish—
,JBoss—java2ParentDelegation=false
,Geronimo-false
好信息。我在研究同一个问题,得出了类似的结论。仍然存在的一个问题是,是否建议使用家长最后一个选项?我认为这是因为你的应用程序更便于携带;您不依赖Appserver LIB。您可以实现应用程序隔离。
我没有看到有人推荐这种或那种方法。你有没有遇到过这样的最佳实践建议?很好。在Glassfish中,顺便说一句,在
sunweb.xml
中关闭委派。另请参见(图)和“我认为这是因为您的应用程序更具可移植性;您不依赖Appserver LIB。您实现了应用程序隔离。”----它可能会工作,也可能不会工作,因为规范中没有强制要求的标准。例如,这里还有一个场景,尝试将JSF 2.0与WAS 7一起使用,并将PARENT_LAST用于EAR和WAR。仍然在尝试使用它附带的MyFacesImpl。当然,他能够通过更新EL impl来解决这个问题,但问题是,即使您切换了授权策略,您也无法保证一切正常工作: