4

私は一日中この問題の答えを探していました。中程度のサイズのXMLドキュメント(〜1.5MB、〜1000要素)のスタイルシートを作成しているので、多くの問題が発生します。これは、さまざまな処理プラント設備のイベント時間線グラフを作成することです。XMLは、SAP MII QueryTempalteを介して生成され、/ Rowsets / Rowset/Row形式になっています。このデータはすべて処理され、ローカルノードセットに/ Equipment / Equipment/Event形式で保存されます。次に、このノードセットはHTMLに処理され、ブラウザでレンダリングされます。今、私はいくつかの問題にぶつかり始めています。過去5日間のデータを簡単に取得できるため、MIIから最大900行のデータが取得され、ノード形式に処理されて、900行弱になります。しかし、2番目にMIIからフェッチされた1017行にヒットしました。スタイルシートは約半分しかレンダリングされず、その後停止し、「これ以上DTMIDは使用できません」という例外が発生します。現在、MIIサーバーはJDK 1.5.xのみを実行しており、それが問題になる可能性があることを読みました。唯一のことは、それについては何もできないということです。だから今私はここで尋ねています:私のコードを最適化する方法はありますか?XSLとサンプルXMLのリンクをいくつか添付しました。

XSL:http : //pastie.org/1566517 Samlpe XML: http: //pastie.org/1566522

現在、サンプルXMLは「楽しい」視覚的な結果をもたらさない可能性があり、エラーを再現することはできません。しかし、誰かが曖昧な最適化を見つけることができれば、私は知りたいです:) startOffset、endOffsetなどの計算を置き換える/移動するのがいいと思っていましたが、方法がわかりません。

誰かが私を助けてくれることを願っています!:)

4

2 に答える 2

5

フォローアップ

別のアプリケーションでもこの問題が発生しました。エラーの原因は同じです。上記でほのめかされているように、根本的な問題は、xsltドキュメントを処理するためのxalan、Apacheプロジェクトの制限です。この制限は、めったにトリガーされませんが、最大数の65535(16ビット相当)のDTMIDを使い果たしたために発生します。上記のアプリケーションでは、SAPのリソース割り当て効率機能を使用することで、これを回避できるようですが、これは、使用していたアプリケーションなどの他のアプリケーションには適用できません。

Xalanの変更

要約すると、65K DTM IDの制限はしばらくの間(2003年頃)存在し、パッチが適用された後、2.7ブランチでパッチが失われました。現在の最新バージョンの2.7.2には、この問題があります。最も基本的なレベルでは、ドキュメントIDは32ビット整数です。この修正は、DTM用に確保されるビット数を増やすソースコードの変更です。より徹底的な議論はここで見ることができます。推奨されるハックは、ノードビット数を12に変更して、DTMの数を20に増やし、合計DTMを1048576に増やすことです。手順は次のとおりです。

  • xalanソースをダウンロード
  • を設定する行を変更して、src / org / apache / xml / dtm/DTMManager.javaを解凍して変更しますIDENT_DTM_NODE_BITS
  • xalanをビルドします。おそらくantをインストールし、クラスパスを適切に設定する必要があります。新しいjarはビルドディレクトリに配置されます。
  • 以前のxalanjarを作成したばかりのものに置き換えます
于 2016-12-21T23:54:24.097 に答える
2

この質問は古いことを知っていますが、自分で同じ質問をしてください。この問題を見つけた人は、これを解決する可能性のあるJVMパッチの詳細を示すSAPノートがあるようです。

注#1604623

https://websmp130.sap-ag.de/sap(bD1lbiZjPTAwMQ==)/bc/bsp/spn/sapnotes/index2.htm?numm=1604623

メモの修正の1つは次のとおりです。

XSLT変換のリソース消費が改善されました。(再帰的な)テンプレートを使用する複雑なXSLでエラー「DTMException:使用可能なDTMIDがありません」が発生するXSLT処理のリソースリークを修正しました。この問題の理由は、処理ステップの中間結果がDTMに格納され、DTMの数が65536に制限されているためです。

この変更により、新しいシステムプロパティ「com.sap.jvm.xsltc.enableResourceOptimization」が追加されました。このプロパティが「true」に設定されている場合、XSLTコンパイラは中間結果をリリースするため、必要なリソースが少なくなります。複雑なXSLの処理が可能である必要があります。このシステムプロパティはデフォルトでは設定されていないことに注意してください。

于 2012-04-20T07:35:23.633 に答える