症状
サーバー再起動後、SOAコンポジットが全く使えないことに気付きました。EM上に現れず、ログファイルには以下のメッセージが残っていました。
SEVERE: WLSFabricKernelInitializer.getCompositeList Error during parsing and processing of deployed-composites.xml fileこのエラーメッセージは、deployed-composites.xmlをパースした時に何らかの問題が発生した、ということを意味しています。これは非常にまずい問題です。というのも、deployed-composites.xmlは、「何のSOAコンポジットをロードして、MDSのどこにSOAコンポジットが存在するか」を、SOAインフラに伝えるための目次なので、このファイルが読めない場合、どのSOAコンポジットもロードできません。
検証
JDeveloperからMDSにつなぐか、WLSTを使ってエクスポートするか、EMからSOA->soa-infra->管理(Administration)->MDS構成(MDS Configuration) を辿ってsoa-infra MDSパーティションまるごとエクスポートするなどすれば、deployed-composites.xmlを見ることができます。後々のことを考えれば、EMでエクスポートするのが一番簡単でしょう。
SOAサーバのローカルストレージにsoa-infraパーティションをエクスポートした後、deployed-composites/deployed-composites.xmlを以下のXSLファイルで変換しました。
<?xml version="1.0" encoding="utf-8"?>出力結果によると、属性(nameとdefault)がない<composite-series>タグが存在する、ということを示しています。また、deployed-composites.xmlファイル中に、SOAコンポジットの個数(111)とコンポジットのリビジョン件数(115)が存在することがわかります。
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"http://www.w3.org/2001/XMLSchema" xmlns="http://www.w3.org/1999/xhtml">
<xsl:output indent="yes"/>
<xsl:template match="/">
<testResult>
<composite-series>
<xsl:attribute name="elementCount"><xsl:value-of select="count(deployed-composites/composite-series)"/></xsl:attribute>
<xsl:attribute name="nameAttributeCount"><xsl:value-of select="count(deployed-composites/composite-series[@name])"/></xsl:attribute>
<xsl:attribute name="defaultAttributeCount"><xsl:value-of select="count(deployed-composites/composite-series[@default])"/></xsl:attribute>
<composite-revision>
<xsl:attribute name="elementCount"><xsl:value-of select="count(deployed-composites/composite-series/composite-revision)"/></xsl:attribute>
<xsl:attribute name="dnAttributeCount"><xsl:value-of select="count(deployed-composites/composite-series/composite-revision[@dn])"/></xsl:attribute>
<xsl:attribute name="stateAttributeCount"><xsl:value-of select="count(deployed-composites/composite-series/composite-revision[@state])"/></xsl:attribute>
<xsl:attribute name="modeAttributeCount"><xsl:value-of select="count(deployed-composites/composite-series/composite-revision[@mode])"/></xsl:attribute>
<xsl:attribute name="locationAttributeCount"><xsl:value-of select="count(deployed-composites/composite-series/composite-revision[@location])"/></xsl:attribute>
<composite>
<xsl:attribute name="elementCount"><xsl:value-of select="count(deployed-composites/composite-series/composite-revision/composite)"/></xsl:attribute>
<xsl:attribute name="dnAttributeCount"><xsl:value-of select="count(deployed-composites/composite-series/composite-revision/composite[@dn])"/></xsl:attribute>
<xsl:attribute name="deployedTimeAttributeCount"><xsl:value-of select="count(deployed-composites/composite-series/composite-revision/composite[@deployedTime])"/></xsl:attribute>
</composite>
</composite-revision>
<xsl:apply-templates select="deployed-composites/composite-series"/>
</composite-series>
</testResult>
</xsl:template> xmlns:xs="
<xsl:template match="composite-series">
<xsl:if test="not(@name) or not(@default) or composite-revision[not(@dn) or not(@state) or not(@mode) or not(@location)]">
<ErrorNode>
<xsl:attribute name="elementPos"><xsl:value-of select="position()"/></xsl:attribute>
<xsl:copy-of select="."/>
</ErrorNode>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<testResult xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.w3.org/1999/xhtml">
<composite-series elementCount="111" nameAttributeCount="110" defaultAttributeCount="110">
<composite-revision elementCount="115" dnAttributeCount="114" stateAttributeCount="115"
modeAttributeCount="115"
locationAttributeCount="114">
<composite elementCount="115" dnAttributeCount="114" deployedTimeAttributeCount="115"/>
</composite-revision>
<ErrorNode elementPos="82">
<composite-series xmlns="">
<composite-revision state="on" mode="active">
<composite deployedTime="2010-12-15T11:50:16.067+01:00"/>
</composite-revision>
</composite-series>
</ErrorNode>
</composite-series>
</testResult>
この結果から、<composite-series>要素の一つ(111個中の82個目)に問題があると目星をつけ、目算通りに問題を発見、修正しました。
解決方法
非常に簡単です。
- エクスポートしたMDSパーティションは安全のためにバックアップをとっておきます。
- 先ほど発見したdeployed-composites/deployed-composites.xml ファイルの<composite-series>タグを修正します。
- SOAドメインを再起動して、 デプロイ済のSOAコンポジットがEMに現れていることを確認します。
SOA 11gを再起動した際にデプロイ済みのSOAコンポジットが見えなくなる原因の一つとして、deployed-composites.xmlファイルが壊れていることがあります。このファイルをMDSから取り出し、修正して、置き換えると解決します。何が原因でこのdeployed-composites.xmlが壊れるのかはまだわかっていません。
原文はこちら。
http://blogs.oracle.com/reynolds/2011/02/gone_with_the_wind.html
0 件のコメント:
コメントを投稿