2

自動化フレームワークを開発していますが、wsadminツールの奇妙な動作を経験しました。この問題は、WAS 6.1、7.0、および8.0で再現可能です(8.5で試したことはありません)。

これがwsadminのバグかどうか疑問に思っています(おそらくWAS 5以降、誰も気づいていないのは非常に奇妙です!)...

サンプルスクリプトは、害を及ぼすことなく、任意のWAS環境に対して安全に実行できます。

try:
    # this line throws WAS exception
    AdminConfig.list('NonExistentType')
except:
    # exception is being handled
    print 'Handled wsadmin exception'
print 'Raising another exception'
# eventually the script throws a non-WAS exception
x = 1/0

私が正しく理解していれば、上記のスクリプトはゼロ除算で失敗します。しかし、wsadmin出力は少し紛らわしいです:

Handled wsadmin exception
Raising another exception
WASX7017E: Exception received while running file "ex.py"; exception information: com.ibm.websphere.management.exception.InvalidConfigDataTypeException
com.ibm.websphere.management.exception.InvalidConfigDataTypeException: ADMG0007E: The configuration data type NonExistentType is not valid.

本当に興味深いのは、Jaclにも同じ問題があるようです。

if [catch { puts [$AdminConfig list NonExistentType] } result] {
    puts "Handled wsadmin exception"
}
puts "Raising another exception"
set x [expr 1 / 0]

wsadminまた、スクリプトを終了した実際の例外に関する情報も出力しません。

Handled wsadmin exception
Raising another exception
WASX7017E: Exception received while running file "ex.jacl"; exception information: com.ibm.websphere.management.exception.InvalidConfigDataTypeException
com.ibm.websphere.management.exception.InvalidConfigDataTypeException: ADMG0007E: The configuration data type NonExistentType is not valid.

(WAS例外のスローを回避するために)両方のスクリプトをわずかに変更した後、両方のスクリプトの出力は正しくなります。

try:
    # this line does not throw any exception
    AdminConfig.list('Cell')
except:
    # exception is being handled
    print 'Handled wsadmin exception'
print 'Raising another exception'
# eventually the script throws a non-WAS exception
x = 1/0

スクリプトがWAS例外をスロー/処理しない場合、出力は期待どおりになります。

Raising another exception
WASX7017E: Exception received while running file "ex1.py"; exception information: com.ibm.bsf.BSFException: exception from Jython:
Traceback (innermost last):
  File "<string>", line 9, in ?
ZeroDivisionError: integer division or modulo

Jaclと同じ:

if [catch { puts [$AdminConfig list Cell] } result] {
    puts "Handled wsadmin exception"
}
puts "Raising another exception"
set x [expr 1 / 0]

wsadmin以下を出力しますが、これも非常に期待されています。

wdrCell(cells/wdrCell|cell.xml#Cell_1)
Raising another exception
WASX7017E: Exception received while running file "ex1.jacl"; exception information: com.ibm.bsf.BSFException: error while eval'ing Jacl expression:
divide by zero
    while executing
"expr 1 / 0"
    invoked from within
"set x [expr 1 / 0]"

少し告白する必要があります。この質問をする理由は、実際に問題をWebSphereサポートに報告したためです。しかし、私は彼らの返事に完全には満足していません。Wsadmin / Jython / Jacl / Python / Tclの専門家:それについてどう思いますか?

私は何か間違ったことをしていますか?

のバグwsadminですか?

予想される動作ですか?

4

1 に答える 1

2

この問題は、WSAS 6.1、7.0、8.0、および 8.5 の今後の FixPack で修正される予定です。

IBM サポートは、以前の実装との互換性を損なうことを少し懸念していました (まあ、議論の余地はありますが、一部のスクリプトはこのバグに依存している可能性があります)。そのため、com.ibm.ws.scripting.exceptionPropagation=thrownJVM プロパティを使用して適切な動作を明示的に有効にする必要があります。

このプロパティーを wsadmin の JVM に渡す方法は 2 つあります。

  • javaOption環境変数
  • javaoptionオプション

環境変数の方法:

export javaOption=-Dcom.ibm.ws.scripting.exceptionPropagation=thrown
./wsadmin.sh -lang jython -f script.py

コマンドライン オプションの方法:

./wsadmin.sh -javaoption -Dcom.ibm.ws.scripting.exceptionPropagation=thrown-lang jython -f script.py

この修正により、Jython と Jacl の両方の問題が解決されます。

公式文書へのリンク: http://www-01.ibm.com/support/docview.wss?uid=swg1PM80400

于 2013-04-06T23:13:36.070 に答える