内容/目次
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未満(※2)
※1 IBM JDKのみで発生する問題のため、IBM JDKが提供されていないSolarisやHP-UXは対象外です。32bit/64bitなどOSやIBM JDKのbit数には依存しません。
※2 当文書には、将来のSRに含まれる予定のAPAR情報が含まれます。事前の予告なしに対象のSRが拡大する場合があります。
情報を随時更新しますので最新の情報をご確認ください。
【障害内容】
java.math.BigDecimal を使用している場合、特定の処理を実行した際に誤った結果が戻る可能性があります。
※ com.ibm.math.BigDecimal クラスを使用している場合にはこの問題は発生しません。
下記6つの障害が報告されています。
表1: IBM Java SDK 6.0 におけるjava.math.BigDecimalに関連する不具合一覧
| APAR番号 | 修正出荷用 APAR番号 | 修正SR (※1) | 修正SRを含むWAS用Java SDK | 障害概要 |
| IZ32747 | N/A | SR3 | WAS V7.0.0.3 | valueOf メソッドを使用し生成されたjava.math.BigDecimalオブジェクトを比較する際、実行結果として例外がスローされず、誤った結果が戻る可能性があります。 |
| IZ32776 | N/A | SR3 | WAS V7.0.0.3 | Decimal Floating Point機構を搭載したハードウェア(※2)環境において、java.math.BigDecimalを使用し、以下の処理を実行した場合、実行結果として例外がスローされず、誤った結果が戻る可能性があります。 1) BigDecimalオブジェクトに値をセットするかもしくは更新 2) そのBigDecimalオブジェクトにsetScale(0, int) もしくは setScale(0, RoundingMode) する処理を実行 |
| IZ46867 | PK86384 | SR5 | WAS V7.0.0.5 | java.math.BigDecimalを使用し、以下の処理を実行した場合、実行結果として例外がスローされず、誤った結果が戻る可能性があります。 1) BigDecimalオブジェクト Aに値をセット 2) AのunscaledValue() を実行 3) Aを Bなどの他のBigDecimalの演算処理で使用 4) 計算結果CのunscaledValue()を実行 |
| IZ50258 | N/A | SR5 | WAS V7.0.0.5 | java.math.BigDecimalを使用し、掛け算(multiply)を実行した結果を比較する際、実行結果として例外がスローされず、誤った結果が戻る可能性があります。 |
| IZ53194 | PK89794 (公開前) | SR6 (予定) | WAS V7.0.0.7 (予定) | DBCSエリアの数字(全角数字)を示すUnicodeポイントとなるcharを使用して java.math.BigDecimalオブジェクトを生成した場合に、実行結果として期待された数値から-48された数値が返されます。 |
| IZ53811 | PK91083 (公開前) | SR6 (予定) | WAS V7.0.0.7 (予定) | Decimal Floating Point機構を搭載したハードウェア(※2)環境において、シリアライズされたjava.math.BigDecimal オブジェクトをデシリアライズした際、小数点位置が誤った場所に変化する可能性があります。 |
※1 修正SRのレベルに満たない場合、もしくは個別のInterim Fixを適用していない場合に該当します。
※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を適用する。
現在のところ、全ての修正を含む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(PK86384): BIGDECIMAL PROBLEM WITH UNSCALEDVALUE METHOD (SR5未満)
http://www.ibm.com/support/docview.wss?rs=203&uid=swg1IZ46867
・ PK86384: BIGDECIMAL problem with unscaledValue method (APAR IZ46867に対するWAS用Interim Fix)
http://www.ibm.com/support/docview.wss?rs=180&uid=swg24023085
・ APAR IZ50258: OCCASIONAL BIGDECIMAL COMPARE FAILURES. (SR5未満)
http://www.ibm.com/support/docview.wss?rs=203&uid=swg1IZ50258
・ APAR IZ53194(PK89794): 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(PK91083): BIGDECIMAL SERILIZATION RESULTS IN INCORRECT DECIMAL POINT LOCATION. (SR6未満)
http://www.ibm.com/support/docview.wss?rs=203&uid=swg1IZ53811
【お問合せ先】
技術的な内容に関して、サービス契約のあるお客様はIBMサービス・ラインにお問い合わせください。
IBMサービス・ライン
【更新履歴】
2009年7月31日 公開しました。
文書情報
有効期限: 2017年7月17日
資料番号: WAS-09-00F
掲載内容について
当サイトは、お客様の問題解決のためのヒントとしてご利用ください。 当サイトにおける記載内容は、お客様固有の問題に対し、適切であるかどうか、また、正確であるかどうかは十分検証されていません。 結果について、いかなる保証も責任も負いかねますので、あらかじめご了承ください。
商標について
IBM、IBM(logo)、developerWorks、Lotus、PartnerWorld、Rational、Tivoli、 WebSphereはIBM Corporationの商標です。 他の会社名、製品名およびサービス名等はそれぞれ各社の商標です。
