内容/目次
IBM Java SDK 6.0 (以下、IBM JDK 6.0) において、java.math.BigDecimalに関連する複数の不具合が報告されています。IBM JDK 6.0の環境で、java.math.BigDecimalを使用している場合、特定の処理を実行した際に誤った結果が戻る可能性があります。
【対象のお客様】
IBM JDK 6.0 Service Release 6未満のService Release(以下、SR)を使用している場合に当問題が発生する可能性があります。
WebSphere Application Server(以下、WAS)ではV7.0が対象となります。
WAS 7.0.0.5のJava SDK Fix Packを適用している場合、IBM JDK 6.0 のSR レベルはSR5相当です。
【対象ソフトウェア】
対象製品: IBM JDK 6.0、またはそれを含むIBMのソフトウェア(WAS V7.0 など)
対象プラットフォーム: AIX、Linux、Windows、z/OS 、i5/OS(※1)
対象バージョン・レベル: IBM JDK 6.0 SR6未満
※1 IBM JDKのみで発生する問題のため、IBM JDKが提供されていないSolarisやHP-UXは対象外です。32bit/64bitなどOSやIBM JDKのbit数には依存しません。
【障害内容】
java.math.BigDecimal を使用している場合、特定の処理を実行した際に誤った結果が戻る可能性があります。
※ com.ibm.math.BigDecimal クラスを使用している場合にはこの問題は発生しません。
下記6つの障害が報告されています。
表1: IBM Java SDK 6.0 におけるjava.math.BigDecimalに関連する不具合一覧
| APAR番号 | 修正SR (※1) | 修正SRを含むWAS用Java SDK | 障害概要 |
| IZ32747 | SR3 | WAS V7.0.0.3 | valueOf メソッドを使用し生成されたjava.math.BigDecimalオブジェクトを比較する際、実行結果として例外がスローされず、誤った結果が戻る可能性があります。 |
| IZ32776 | SR3 | WAS V7.0.0.3 | Decimal Floating Point機構を搭載したハードウェア(※2)環境において、java.math.BigDecimalを使用し、以下の処理を実行した場合、実行結果として例外がスローされず、誤った結果が戻る可能性があります。 1) BigDecimalオブジェクトに値をセットするかもしくは更新 2) そのBigDecimalオブジェクトにsetScale(0, int) もしくは setScale(0, RoundingMode) する処理を実行 |
| IZ46867 | SR5 | WAS V7.0.0.5 | java.math.BigDecimalを使用し、以下の処理を実行した場合、実行結果として例外がスローされず、誤った結果が戻る可能性があります。 1) BigDecimalオブジェクト Aに値をセット 2) AのunscaledValue() を実行 3) Aを Bなどの他のBigDecimalの演算処理で使用 4) 計算結果CのunscaledValue()を実行 |
| IZ50258 | SR5 | WAS V7.0.0.5 | java.math.BigDecimalを使用し、掛け算(multiply)を実行した結果を比較する際、実行結果として例外がスローされず、誤った結果が戻る可能性があります。 |
| IZ53194 | SR6 | WAS V7.0.0.7 | DBCSエリアの数字(全角数字)を示すUnicodeポイントとなるcharを使用して java.math.BigDecimalオブジェクトを生成した場合に、実行結果として期待された数値から-48された数値が返されます。 |
| IZ53811 | SR6 | WAS V7.0.0.7 | Decimal Floating Point機構を搭載したハードウェア(※2)環境において、シリアライズされたjava.math.BigDecimal オブジェクトをデシリアライズした際、小数点位置が誤った場所に変化する可能性があります。 |
※1 修正SRのレベルに満たない場合、もしくは個別のInterim Fixを適用していない場合に該当します。
各SRに含まれるAPARのリストは下記Webサイトをご参照ください。
Finding the list of fixes in Java Service Refreshes (SRs)
http://www.ibm.com/support/docview.wss?rs=180&uid=swg21392179
※2 ここでのDecimal Floating Point機構を搭載したハードウェアは、IBM System Power6およびIBM System z10です。これらのハードウェアを使用している場合、対象OSは、z/OS, System z Linux, AIX, System p Linux, IBM i です。
【確認方法】
Java SDKのバージョンの確認は、java -versionコマンドを使用します。
WASの場合は、必ずWASに同梱されているjavaディレクトリのjavaコマンドを使用して確認してください。
(例) UNIX環境のWAS V7.0の場合
# /usr/IBM/WebSphere/AppServer/java/jre/bin/java -version
java version "1.6.0"
Java(TM) SE Runtime Environment (build pxi3260sr4ifix-20090228_01(SR4+147109))
IBM J9 VM (build 2.4, J2RE 1.6.0 IBM J9 2.4 Linux x86-32 jvmxi3260-20090215_29883 (JIT enabled, AOT enabled)
J9VM - 20090215_029883_lHdSMr
JIT - r9_20090213_2028
GC - 20090213_AA)
JCL - 20090228_01
上記は IBM JDK 1.6.0 SR4 です。
※z/OSにつきましては、SMP、またはJOBLOGで製品のレベルを確認してください。
【回避策】
ありません。
ただし、Decimal Floating Point機構を搭載したハードウェア上でのみ発生する障害(APAR IZ32776およびIZ53811)に関しては、Java 仮想マシン・コードに渡すコマンド行引数(※)に -Xnodfpbd を指定することで回避することが出来ます。
※WAS の場合は、汎用JVM引数 に設定してください。汎用JVM引数につきましては、下記URLをご参照ください。
http://publib.boulder.ibm.com/infocenter/wasinfo/v7r0/index.jsp?topic=/com.ibm.websphere.nd.doc/info/ae/ae/urun_rconfproc_jvm.html
【解決策】
表1に記載されている各APARを含むSRを適用します。
(WASの場合、Java SDKに対するFix Packを適用します。)
最新のSRに含まれていないAPARに対するInterim Fix入手のご要望、またはご質問は、サポート契約(ソフトウェア・サブスクリプション&サポート、またはSTSS)に基づくサポート窓口までお問い合わせください。
Interim Fixの提供は、最新のSRから1つ前のSR(最新がSR5の場合はSR4)までとなります。回避策が存在する障害に対しては、回避策による問題の回避もご検討ください。
<分散系OS上のWASの場合>
WAS V7.0に適用可能なIBM JDKの最新Fix Pack情報は、下記URLをご参照ください。
・ Recommended fixes for WebSphere Application Server
http://www.ibm.com/support/docview.wss?rs=180&uid=swg27004980#ver70
z/OS版SDKの最新Fix Pack情報は、下記URLをご参照ください。
http://www.ibm.com/servers/eserver/zseries/software/java/
サービス契約のあるお客様はIBMサービス・ラインにお問い合わせください。
【参考情報】
・ 【FAQ】 WebSphere Application Serverを最新レベルにするには
http://www.ibm.com/jp/domino01/mkt/websphere.nsf/doc/00572EAB
・ developerWorks : Java technology : IBM developer kits : AIX (AIXにおける最新のSRと修正の入手方法について)
http://www.ibm.com/developerworks/java/jdk/aix/j632/Java6.fixinfo.html
・ APAR IZ32747: BIGDECIMAL COMPARE CAN FAIL (SR3未満)
http://www.ibm.com/support/docview.wss?rs=203&uid=swg1IZ32747
・ APAR IZ32776: INCORRECT OUTPUT PRODUCED ON SYSTEM Z10 AND POWER6 HARDWARE USING DFP FEATURE IN JAVA 6 GA/SR1/SR2 (SR3未満)
http://www.ibm.com/support/docview.wss?rs=203&uid=swg1IZ32776
・【ご注意ください】IBM JDK6 GA/SR1/SR2(WAS V7.0 GA)でBigDecimalを使用した場合の注意点 (WAS-09-004)
(APAR IZ32776に対する公開済み情報)
http://www.ibm.com/jp/domino01/mkt/cnpages1.nsf/page/default-0006D2D1
・ APAR IZ46867: BIGDECIMAL PROBLEM WITH UNSCALEDVALUE METHOD (SR5未満)
http://www.ibm.com/support/docview.wss?rs=203&uid=swg1IZ46867
・ APAR IZ50258: OCCASIONAL BIGDECIMAL COMPARE FAILURES. (SR5未満)
http://www.ibm.com/support/docview.wss?rs=203&uid=swg1IZ50258
・ APAR IZ53194: INCORRECT I/O IN JAVA.MATH.BIGDECIMAL WITH DBCS ENCODING (SR6未満)
http://www.ibm.com/support/docview.wss?rs=203&uid=swg1IZ53194
・ IBM Java 6 BigDecimal Incompatibility (Rational ソフトウェアにおけるAPAR IZ53194に関する情報)
http://www.ibm.com/support/docview.wss?rs=2042&uid=swg21390844
・ APAR IZ53811: BIGDECIMAL SERILIZATION RESULTS IN INCORRECT DECIMAL POINT LOCATION. (SR6未満)
http://www.ibm.com/support/docview.wss?rs=203&uid=swg1IZ53811
・ Finding the list of fixes in Java Service Refreshes (SRs)
http://www.ibm.com/support/docview.wss?rs=180&uid=swg21392179
【お問合せ先】
技術的な内容に関して、サービス契約のあるお客様はIBMサービス・ラインにお問い合わせください。
IBMサービス・ライン
【更新履歴】
2009年7月31日 公開しました。
2009年12月2日 Fix Pack 7公開に伴い、文書全体を更新しました。また、該当のAPARが全てFix Packに含まれたことから、一部存在していた修正出荷用APAR番号を表1から削除しました。
文書情報
有効期限: 2017年7月17日
資料番号: WAS-09-00F
掲載内容について
当サイトは、お客様の問題解決のためのヒントとしてご利用ください。 当サイトにおける記載内容は、お客様固有の問題に対し、適切であるかどうか、また、正確であるかどうかは十分検証されていません。 結果について、いかなる保証も責任も負いかねますので、あらかじめご了承ください。
商標について
IBM、IBM(logo)、developerWorks、Lotus、PartnerWorld、Rational、Tivoli、 WebSphereはIBM Corporationの商標です。 他の会社名、製品名およびサービス名等はそれぞれ各社の商標です。
