2014-01-29 63 views
10

我有一個彈簧mvc web應用程序,我需要更改類加載器。我需要將類加載器更改爲等於PARENT_LAST。我正在使用WAS 6.1,並且已經有一個來自之前的Web應用程序的jacl腳本,我可以通過它複製來完成這項工作。如何設置java類加載器PARENT_LAST

在最後一個應用程序中使用Apache ant,他們所做的是使部署依賴於運行jacl腳本。

在我的新Web應用程序中,我使用maven install來創建war文件,並將該war文件部署到我的應用程序服務器。

如何使用maven將類加載器設置爲PARENT_LAST?我知道如何在控制檯中做到這一點,但如果有一種方法可以使用腳本來完成,那將會很好。

此外,將此設置放置在戰爭文件的某個位置,以便在部署應用程序時可以獲取設置。這個問題來自於我對jacl腳本的工作原理缺乏瞭解。

謝謝

+0

不完全確定移除'java'標籤是否合理? – Torxed

回答

16

如果您只是部署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提取。

+0

感謝這是一個非常好的答案。我現在明白,如果我想改變我需要建立耳朵而不是戰爭的設置。這很不幸。但我猜想另一個替代方案總是在部署後在web管理控制檯中手動設置 – Richie

+1

正確。許多(但不是全部)部署特定的設置位於EAR文件中,其中WAS有其自己的部署描述符。我們發現,部署EAR文件而不僅僅是一個WAR文件對我們來說更好,主要是因爲易於部署。 – DanielBarbarian

1

Websphere使用deployment.xml文件來管理ear文件中每個模塊的部署設置。您可以在以下路徑改變deployment.xml中的類加載器設置:

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

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

2

AFAIK在裝配過程中無法爲PARENT_LAST預先配置WAR。類加載策略是在部署期間指定的,因此設置它的方式取決於應用程序的部署方式。

使用腳本更改策略很簡單。腳本使用wsadmin工具運行。下面的Jython代碼片段完成了這項工作。它可以很容易地轉換爲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()