【问题标题】:how to set java class loader PARENT_LAST如何设置java类加载器PARENT_LAST
【发布时间】:2014-02-20 17:09:39
【问题描述】:

我有一个 spring mvc web 应用程序,我需要更改它的类加载器。我需要将类加载器更改为等于 PARENT_LAST。我正在使用 WAS 6.1,并且已经有一个来自以前的 Web 应用程序的 jacl 脚本,我可以复制它来完成这项工作。

在最后一个应用程序中使用了 Apache ant,他们所做的是使部署依赖于运行 jacl 脚本。

在我的新 Web 应用程序中,我使用 maven install 创建一个 war 文件,并将该 war 文件部署到我的应用程序服务器。

如何使用 maven 将类加载器设置为 PARENT_LAST?我知道如何在控制台中执行此操作,但如果有一种方法可以使用脚本来执行此操作,那就太好了。

还会将此设置放置在 war 文件中的某个位置,以便在部署应用程序时获取该设置。这个问题是因为我对 jacl 脚本的工作原理缺乏了解?

谢谢

【问题讨论】:

  • 不完全确定删除java 标记是否合理?

标签: maven websphere classloader websphere-6.1 wsadmin


【解决方案1】:

AFAIK 在组装过程中无法为PARENT_LAST 预配置 WAR。类加载策略是在部署过程中指定的,因此设置它的方式取决于应用程序的部署方式。

使用脚本更改策略非常简单。使用wsadmin 工具运行脚本。下面的 Jython sn-p 可以完成这项工作。它可以很容易地转换为 Jacl。

dep = AdminConfig.getid('/Deployment:app_name/')
depObject = AdminConfig.showAttribute(dep, 'deployedObject')
classldr = AdminConfig.showAttribute(depObject, 'classloader')
AdminConfig.modify(classldr, [['mode', 'PARENT_LAST']])
AdminConfig.save()

【讨论】:

  • 要将 PARENT_LAST 应用于内部战争(如果您部署了 EAR),请添加 AdminConfig.modify(depObject, [['warClassLoaderPolicy', 'SINGLE']]); 作为第三行。
【解决方案2】:

如果您只部署 WAR 文件本身,则无法控制这一点,但如果您的 WAR 文件位于 EAR 文件中,则可以使用 deployment.xml 解决方案。 deployment.xml 文件看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<appdeployment:Deployment xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:appdeployment="http://www.ibm.com/websphere/appserver/schemas/5.0/appdeployment.xmi" xmi:id="Deployment_1347529484613">
  <deployedObject xmi:type="appdeployment:ApplicationDeployment" xmi:id="ApplicationDeployment_1347544766353" startingWeight="99" warClassLoaderPolicy="SINGLE">
    <modules xmi:type="appdeployment:WebModuleDeployment" xmi:id="WebModuleDeployment_1347543866613" startingWeight="1" uri="YourWebApp.war" classloaderMode="PARENT_LAST"/>
    <classloader xmi:id="Classloader_1347543866613" mode="PARENT_LAST"/>
  </deployedObject>
</appdeployment:Deployment>

完成后,您需要做的就是将文件添加到 EAR 项目构建的正确位置,假设您使用的是 src/main/application,即 src/main/application/META-INF/ibmconfig/cells/defaultCell/applications/defaultApp/deployments/defaultApp/deployment.xml,并像往常一样使用 Maven 构建 EAR。

在服务器部署期间,这将由 WAS 获取。

【讨论】:

  • 感谢这是一个非常好的答案。我现在明白如果我想改变我需要建立耳朵而不是战争的设置。很不幸。但我猜另一种选择总是在部署后在 Web 管理控制台中手动设置
  • 正确。 WAS 拥有自己的部署描述符的许多(但不是全部)部署特定设置驻留在 EAR 文件中。我们发现部署 EAR 文件而不仅仅是 WAR 文件对我们来说更好,这主要是因为易于部署。
【解决方案3】:

Websphere 使用deployment.xml 文件来管理ear 文件中每个模块的部署设置。您可以通过以下路径更改 deployment.xml 中的类加载器设置:

/MyTestEAR/META-INF/ibmconfig/cells/defaultCell/applications/defaultApp/deployments/defaultApp/deployment.xml

我不知道如何在 Maven 中进行配置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-10
    • 1970-01-01
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多