2009-05-01 27 views
12

私はWAS 6で動作するJEEアプリケーションを持っています。クラスローダーの順序を "アプリケーションクラスローダで最初にロードされるクラス"に設定し、WARクラスのローダポリシーオプションを "アプリケーション用の単一クラスローダー"に設定する必要があります。WebSphere用のクラスローダー・ポリシーをibm-web-bnd.xmiファイルに設定できますか?

これらのオプションは、ibm-web-bnd.xmiファイルまたは他のファイルのいずれであっても、EARファイル内で指定できますか?管理者はこれらの設定を手動で変更する必要はありませんか?

アプリは自動スクリプトでデプロイされており、デプロイメントを担当するユーザーはオフサイトになっているため、他の政治的理由からも大きな効果があります。

答えて

10

おかげで、私は解決策を考え出すことができました。これは、他の人に役立つ場合に備えてです。

私はこのようなの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> 

(地雷がAGS.warと呼ばれている)と一致するようにWARファイル(複数可)の名前を変更することを確認します。

xmi:idの属性の数値も変更しましたが、それらが一意であることを確認しましたが、アプリケーション間で一意であることが本当に重要であるかどうかはわかりません。

はその後、私はANTを経て、私のEARファイルのルートでのdeployment.xmlファイルを置く:

<ear destfile="${artifactsDir}/${earName}.ear" appxml="${projectName}_EAR/application.xml"> 
     <fileset dir="${artifactsDir}" includes="${warName}.war"/> 
     <fileset dir="${projectName}_EAR/" includes="deployment.xml"/> 
    </ear> 
8

編集(2):WebSphere Application Server Toolkit (AST)あなたが(たとえばthis documentの「強化されたEARの設定」セクションを参照)、この情報をEARファイルを強化するために使用できるツールです。

編集(1):This postは(PARENT_LAST設定)「最初にアプリケーションクラスローダーでロードされたクラスが」EAR内のdeployment.xmlファイルで設定することができることを示唆しています。

自動展開スクリプトを管理できる場合は、これを実行できます。以下は、Webモジュールのクラスローダの順序を 'アプリケーションクラスローダでロードされたクラス'に設定するためのwsadmin jythonのコードです(興味深いことに、この設定は管理コンソールの以前のバージョンではラベル付けされたPARENT_LASTです...)。

のwsadmin例(Jythonを):@Matthewマードックの答えに

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 
+0

残念ながら、私はスクリプトを制御できません。政治的な理由から、私はEARをパッケージ化する前にこれをすべて処理する必要があります(これは、配備責任者の仕事であると主張することもできます)。 – pkaeding

+0

フォーラムのポストへのリンクを追加しました。 deployment.xmlファイルでPARENT_LASTオプションを設定する方法。細部については少し短いですが、始めることができます。 –

0

は、私が発見したが、これだけに役立ち適用するとき.earファイルのデフォルト.warは何でも。 (.earファイルには.warファイルが1つしかありません。したがって、.warの名前はエントリには必要ありません)。このアプローチは、.warの名前を変更する必要がある場合に適しています後で何らかの理由でプロジェクトを作成するため、deployment.xmlファイルの更新について心配する必要はありません。 deployment.xmlファイルがセル参照ディレクトリの内部に埋め込まれています。ファイルがディレクトリレベルのMETA-INFに置かれていて、深く表示されていない場合は表示されません。私の特定のケースで

は、私はで私の.earプロジェクトにdeployment.xmlが見つかりました:META-INF \

<PROJECT_ROOT> \ 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への参照が行われていないことに注意してください。 pkaedingが述べたように、さまざまなID番号が同じであるとは思わないはずです。

関連する問題