1. トップ >
  2. 製品・サービス >
  3. biz-Stream >
  4. サポート情報 >
  5. 数値や日付について正しい値が出力しない

biz-Stream サポート情報

RSS

数値や日付について正しい値が出力しない

2004年01月20日

biz-Stream v3.0、v3.03、v3.1御利用の際に文字列以外のタイプ・クラスを使用していた場合、指定した値が正しく出力しない現象に関して説明いたします。
※ このトピックスの対象は biz-Stream v3.0、v3.03、v3.1を御利用のお客様のみです。

1. 現象

PDFを生成する際にレイアウトに関連して指定するデータタイプ/クラスについて、文字列以外のタイプ/クラスを指定していた際に、以下の現象が発生する可能性があります。

  1. a.生成したPDFの数値や日付について、指定したものと異なる値になってしまう。
  2. b.java.text.DecimalFormatクラス内でエラーが発生してしまう。
    (java.lang. ArrayIndexOutOfBoundsException)

2. 発生する条件

biz-Stream v3が稼動しているマルチスレッド対応のアプリケーション環境で、以下の様に文字列以外のデータタイプ・クラスを利用している場合に発生する可能性があります。

● レイアウト・デザイナ等で作成したレイアウトファイル内に、
文字列以外のデータタイプを指定している場合
対象となるタイプ smallint, integer, long, float, double, decimal, date, time, timestamp
非対象となるタイプ char, varchar
● データの指定について、HashtableType()で生成したオブジェクトに対し、
文字列以外のデータクラスで格納した場合
対象となるタイプ ShortType, IntType, LongType, FloatType, DoubleType, DateType,TimeType, TimestampType
非対象となるタイプ StringType

3. 原因

biz-Stream v3では、「文字列以外のデータタイプ/クラスでPDF生成のための各種データを指定できる」ように機能が拡張されています。

  1. a.XMLレイアウトファイルで、CSVやハッシュテーブル、RDBMSへのデータアクセス等が指定できます。
  2. b.setDataSourceメソッドにより、biz-Streamへのデータの指定が柔軟にできます。

これらの機能を利用する際に、文字列以外のデータタイプ/クラスが指定されていた場合、または文字列以外のデータで出力する設定がされていた場合に、biz-Stream v3は内部でJDKのJava.text.DecimalFormatクラス等を拡張した独自のフォーマットクラスを使用してデータタイプの変換を行っています。

本現象は、あるスレッドが独自クラスを使用してデータを変換している途中で、別のスレッドが変換をする際に、最初のスレッドのデータが書き換えられてしまうという現象です。マルチスレッドに対して保護されていない、同期化されていないという「スレッドセーフではない状態」のために発生します。

発生頻度は、アプリケーションの実行頻度やマルチCPU環境下等様々な要因により影響を受けます。

この「スレッドセーフではない」現象ですが、独自クラスのベースであるJDKのJava.text.Decimal.Formatクラス自身がスレッドセーフでないことに端を発しています。

当該クラスが「スレッドセーフでない」件ですが、JDK 1.4.0では製品不具合としてBug Databaseに投稿されていたものです。最新のJDK 1.4.0以降より、APIドキュメントにその旨が明記されており、現時点では仕様として扱われています。これは、パフォーマンスに影響を与える懸念があり、必要に応じて上位アプリケーションで対応するということです。

● JDK 1.4.0のドキュメントでの記載

フォーマットは同期化されません。スレッドごとに別のフォーマットインスタンスを作成することをお勧めします。複数のスレッドがフォーマットに同時にアクセスする場合は、外部的に同期化する必要があります。

● Bug Databaseへの投稿スレッド

4. 対策

biz-Stream v3のホットフィックス3.10Gにより修正を行いました。このため、biz-Stream v3.2へのリリースアップ又はv4へのバージョンアップを行ってください。

また、その際にプロパティファイル修正の際、次表の設定についても必ず確認のうえ反映願います。

現在のバージョン default_values.propertiesファイル xml_compatible.propertiesファイル
3.0 default_multi_narrow=size multitext_narrow_3.1mode=false
3.03 default_multi_narrow=size multitext_narrow_3.1mode=true
3.1以降 default_multi_narrow=size multitext_narrow_3.1mode=true