Architecture JavaEE类加载标准

Architecture JavaEE类加载标准,architecture,jakarta-ee,classloader,Architecture,Jakarta Ee,Classloader,WebSphere的父级位于最后,父级位于第一。这个JavaEE兼容吗?所有兼容Java EE 5的应用程序服务器都支持这一点吗?我做了自己的研究(查阅了规范和一些博客),下面是我的想法 耳朵 规范没有定义或规定类装入器在EAR中的工作方式。然而,它定义了 对于类的运行时加载,应该有每个线程的上下文类加载器 可能存在用于解析类的分层类加载机制(应用程序服务器供应商可以自由实现他们选择的任何方式) 顶级类装入器(WAR/EAR)可以委托给低级类装入器(如引导、扩展等)。这符合J2SE类加载器委托模

WebSphere的父级位于最后,父级位于第一。这个JavaEE兼容吗?所有兼容Java EE 5的应用程序服务器都支持这一点吗?

我做了自己的研究(查阅了规范和一些博客),下面是我的想法

耳朵

规范没有定义或规定类装入器在EAR中的工作方式。然而,它定义了

  • 对于类的运行时加载,应该有每个线程的上下文类加载器
  • 可能存在用于解析类的分层类加载机制(应用程序服务器供应商可以自由实现他们选择的任何方式)
  • 顶级类装入器(WAR/EAR)可以委托给低级类装入器(如引导、扩展等)。这符合J2SE类加载器委托模型(WAS中的父类)
  • 战争

    Servlet规范定义并强制支持父类加载模型(即WAR/web inf/classes和WAR/web inf/lib优先于应用服务器附带的库)。但这只是用于战争模块。在本例中,Servlet规范与PARENT_FIRST的标准J2SE委托模型不同

    参考

    规范:Servlet 2.3,第9.7.2节Web应用程序类加载器

    规范:JavaEE5,章节:EE.6.2.4.7上下文类加载器

    应用服务器详细信息


    不过,有趣的是,大多数主要的应用程序服务器似乎都支持某种关闭委托的机制,以便在必要时(由于冲突或其他原因)将应用程序与应用程序服务器隔离: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来解决这个问题,但问题是,即使您切换了授权策略,您也无法保证一切正常工作: