我有一个在WAS 6上运行的JEE应用程序。它需要将类加载器顺序设置为“首先加载应用程序类加载器的类”,并将WAR类加载器策略选项设置为“应用程序的单个类加载器”
是否可以在EAR文件中指定这些选项,无论是在ibm-web-bnd.xmi文件还是其他文件中,因此管理员无需手动更改这些设置?
由于应用程序是通过自动脚本部署的,并且负责部署的人员不在现场,而且出于其他一些政治原因,这将有很大帮助!
答案 0 :(得分:10)
感谢@Matthew Murdoch的回答,我能够提出一个解决方案。在这里它是,如果它帮助其他人。
我创建了一个像这样的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_1241112964096">
<deployedObject xmi:type="appdeployment:ApplicationDeployment" xmi:id="ApplicationDeployment_1241112964096" startingWeight="1" warClassLoaderPolicy="SINGLE">
<classloader xmi:id="Classloader_1241112964096" mode="PARENT_LAST"/>
<modules xmi:type="appdeployment:WebModuleDeployment" xmi:id="WebModuleDeployment_1241112964096" startingWeight="10000" uri="AGS.war">
<classloader xmi:id="Classloader_1241112964097"/>
</modules>
</deployedObject>
</appdeployment:Deployment>
确保更改要匹配的WAR文件的名称(我的名称为AGS.war)。
我还更改了xmi:id
属性中的数字,以确保它们是唯一的,但我不确定它们在应用程序中是否唯一真正重要。
然后,我将deployment.xml文件放在我的EAR文件的根目录中,通过ANT:
<ear destfile="${artifactsDir}/${earName}.ear" appxml="${projectName}_EAR/application.xml">
<fileset dir="${artifactsDir}" includes="${warName}.war"/>
<fileset dir="${projectName}_EAR/" includes="deployment.xml"/>
</ear>
答案 1 :(得分:8)
编辑(2) WebSphere Application Server Toolkit (AST)是一个可用于使用此信息增强EAR文件的工具(请参阅{{例如'配置增强型EAR'部分) 3}})。
编辑(1): this document建议可以在EAR中的deployment.xml文件中设置“首先加载应用程序类加载器的类”(PARENT_LAST设置)。
如果您可以控制自动部署脚本,则可以执行此操作。下面是一些wsadmin jython代码,用于将Web模块类加载器顺序设置为“首先加载应用程序类加载器的类”(有趣的是,该设置称为PARENT_LAST,它是在以前版本的管理控制台中标记的内容...)。 / p>
wsadmin示例(jython):
def getWebModule(config, applicationName):
webModules = config.list('WebModuleDeployment').
split(system.getProperty('line.separator'))
for webModule in webModules:
if (webModule.find(applicationName) != -1):
return webModule
return None
applicationName = "<Your application name here>"
webModule = getWebModule(AdminConfig, applicationName)
if (webModule != None):
AdminConfig.modify(webModule, "[[classloaderMode PARENT_LAST]]")
AdminConfig.save()
else:
print "Error: Cannot find web module for application: " + applicationName
答案 2 :(得分:0)
查看此链接。根据您的服务器版本,有不同的方法使用Jython设置类加载器策略 - http://pic.dhe.ibm.com/infocenter/wasinfo/v7r0/index.jsp?topic=%2Fcom.ibm.websphere.express.doc%2Finfo%2Fexp%2Fae%2Frxml_7libapp4.html
答案 3 :(得分:0)
与pkaeding的答案类似,我发现如下,并不是特定于.war的名称,但在应用于.ear文件中的默认.war时非常有用。 (.ear文件中包含一个.war文件只有.war,因此在条目中命名.war是不必要的。)这种方法可能适用于您可能需要重命名的情况。 .war项目后来由于某种原因,所以你不必担心更新deployment.xml
文件。我发现deployment.xml
文件埋在单元格引用目录中; dunno,如果文件放在目录级别META-INF
并且没有更深的时候显示正常。
在我的特定情况下,我在我的.ear项目中找到了deployment.xml
:
&LT; project_root&GT; \ META-INF \ ibmconfig \细胞\ defaultCell \应用\ defaultApp \部署\ defaultApp \
该文件的内容看起来很像:
<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_1262775196208">
<deployedObject xmi:type="appdeployment:ApplicationDeployment"
xmi:id="ApplicationDeployment_1262775196208" startingWeight="10">
<classloader xmi:id="Classloader_1262775196208" mode="PARENT_LAST" />
</deployedObject>
</appdeployment:Deployment>
该行:
<classloader xmi:id="Classloader_1262775196208" mode="PARENT_LAST" />
最初阅读:
<classloader xmi:id="Classloader_1262775196208" mode="PARENT_FIRST" />
注意,没有提及任何.war。如上所述,你不应该期望各种身份证号码对你来说都是一样的。