Can I set the classloader policy for WebSphere in the ibm-web-bnd.xmi file?
我有一个在WAS 6上运行的JEE应用程序。它需要将类加载器顺序设置设置为"首先用应用程序类加载器加载类",并且将WAR类加载器策略选项设置为"针对应用程序的单个类加载器" 。
是否可以在EAR文件中指定这些选项,无论是在ibm-web-bnd.xmi文件还是其他文件中,因此管理员不需要手动更改这些设置?
由于该应用是通过自动脚本进行部署的,并且负责部署的人员不在现场,并且出于某些其他政治原因,这将大有帮助!
由于@Matthew Murdoch的回答,我得以提出解决方案。就是这样,以防其他人帮助。
我这样创建了一个deployment.xml:
1 2 3 4 5 6 7 8 9 | <?xml version="1.0" encoding="UTF-8"?> <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)。
我还更改了
然后,我通过ANT将deploy.xml文件放在EAR文件的根目录中:
1 2 3 4 | <ear destfile="${artifactsDir}/${earName}.ear" appxml="${projectName}_EAR/application.xml"> <fileset dir="${artifactsDir}" includes="${warName}.war"/> <fileset dir="${projectName}_EAR/" includes="deployment.xml"/> </ear> |
编辑(2):WebSphere Application Server Toolkit(AST)是可用于通过此信息来增强EAR文件的工具(例如,请参见本文档中的"配置增强的EAR"部分)。铅>
编辑(1):本文建议可以在EAR中的deployment.xml文件中设置\\'首先由应用程序类加载器加载的类'(PARENT_LAST设置)。
如果您可以控制自动部署脚本,则可以执行此操作。下面是一些wsadmin jython代码,用于将Web模块类加载器顺序设置为"首先使用应用程序类加载器加载的类"(有趣的是,该设置称为PARENT_LAST,这是在先前版本的管理控制台中标记的名称)。 。
wsadmin示例(jython):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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 |
类似于pkaeding的答案,我发现以下内容,不是按名称特定于特定的.war,而是在应用于.ear文件中的默认.war时很有用。 (.ear文件中只有一个.war文件,而该文件只有那个.war,因此,在该条目中不必命名.war。)这种方法对于需要重命名.war的情况可能是好的。战争项目以后由于某种原因,因此您不必担心更新
在我的特殊情况下,我在.ear项目的
中找到了
文件的内容非常像:
1 2 3 4 5 6 7 | <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> |
行:
1 | <classloader xmi:id="Classloader_1262775196208" mode="PARENT_LAST" /> |
最初阅读:
1 | <classloader xmi:id="Classloader_1262775196208" mode="PARENT_FIRST" /> |
请注意,未引用任何.war。如pkaeding所述,您不应期望各种ID号对您来说都是相同的。
查看此链接。根据您的服务器版本,有多种方法可以使用Jython设置类加载器策略-
http://pic.dhe.ibm.com/infocenter/wasinfo/v7r0/index.jsp?topic=/com.ibm.websphere.express.doc/info/exp/ae/rxml_7libapp4.html