Forums: Open Discussion (Thread #44393)

Bean定義ファイル(xml)を用いてBeanを生成する際のMapの型について (2021-07-19 14:10 by K.K #87762)

TERASOLUNA Batch Framework for Java 2.x系において同期型バッチを実行(JobStarter)する場合、
Bean定義ファイル(FrameworkBean.xmlやDefaultValueBean.xml)を参照しBeanを自動生成すると思います。

その中でDefaultValueBean.xmlに定義されている例外ハンドラMapについて質問なのですが
デフォルトでは以下のように書かれています。

<util:map id="exceptionHandlerMap">
<entry>
<key>
<bean class="jp.terasoluna.fw.batch.core.jobException" />
</key>

 ・
 ・
</entry>
</util:map>

JDK1.7でアプリケーションを動作させた場合、例外ハンドラMapの型はLinkedHashMapで登録されます。
しかしJDK1.8にした場合、例外ハンドラMapの型はLinkedMapになってしまいバッチ起動時にエラーが発生します。

ハンドラMapの定義に「map-class="java.util.LinkedHashMap"」を追記するとエラーは解消するのですが
Java7からJava8に移行した場合になぜBean定義ファイルのMap定義のmap-class属性が省略されていると
LinkedMap型で登録されるのでしょうか?

ご回答よろしくお願いします。

Reply to #87762×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login

Re: Bean定義ファイル(xml)を用いてBeanを生成する際のMapの型について (2021-07-20 14:56 by terasoluna #87763)

メッセージ #87762 への返信
> TERASOLUNA Batch Framework for Java 2.x系において同期型バッチを実行(JobStarter)する場合、
> Bean定義ファイル(FrameworkBean.xmlやDefaultValueBean.xml)を参照しBeanを自動生成すると思います。
>
> その中でDefaultValueBean.xmlに定義されている例外ハンドラMapについて質問なのですが
> デフォルトでは以下のように書かれています。
>
> <util:map id="exceptionHandlerMap">
> <entry>
> <key>
> <bean class="jp.terasoluna.fw.batch.core.jobException" />
> </key>
> ・
>  ・
>  ・
> </entry>
> </util:map>
>
> JDK1.7でアプリケーションを動作させた場合、例外ハンドラMapの型はLinkedHashMapで登録されます。
> しかしJDK1.8にした場合、例外ハンドラMapの型はLinkedMapになってしまいバッチ起動時にエラーが発生します。
>
> ハンドラMapの定義に「map-class="java.util.LinkedHashMap"」を追記するとエラーは解消するのですが
> Java7からJava8に移行した場合になぜBean定義ファイルのMap定義のmap-class属性が省略されていると
> LinkedMap型で登録されるのでしょうか?
>
> ご回答よろしくお願いします。

まず、TERASOLUNA Batch Framework for Java 2.x系に同梱しているSpring
# Batch FW 2.0.2.0までに同梱しているSpring 2.0.6
# Batch FW 2.0.3.0以降に同梱しているSpring 2.5.6.SEC01
は、JDK1.8には対応しておらず、
また、TERASOLUNA Batch Framework for Java 2.xでも動作検証は行っていないことをご承知おきください。

上記の事象は、SpringがJavaのバージョンを正しく認識できず、
LinkedHashMap(Java1.4以降であることが必須条件)が自動選択されない状況に陥ったことにより発生しております。

以下、詳細となります。

TERASOLUNA Batch Framework for Java 2.x系において、
Springが正しくJavaのバージョンを認識できるのが、1.7(Java7)までであり、
それ以降のJavaバージョンになりますと、正しく認識できず、
Springのバージョンによって、
Java1.3扱いもしくはJava1.4扱いとなります。
# Batch FW 2.0.2.0までに同梱しているSpring 2.0.6であれば、Java1.3扱い、
# Batch FW 2.0.3.0以降に同梱しているSpring 2.5.6.SEC01であれば、Java1.4扱いとなります。
# 詳しくは、ご利用のバージョンのSpringの、
# org.springframework.core.JdkVersionのソースでご確認いただけます。

<util:map id="exceptionHandlerMap">
<entry>
<key>
<bean class="jp.terasoluna.fw.batch.core.jobException" />
</key>



</entry>
</util:map>
によって生成されるMapは、
本来、ランタイムがJava1.4以降であれば、
java.util.LinkedHashMap(JDK1.4で追加されたクラス)が自動選択されますが、
判定不能バージョンのJava(1.8)が、Spring 2.0.6ではJava1.3扱いとなり、
java.util.LinkedHashMapが自動選択できず、
次の自動選択候補となるorg.apache.commons.collections.map.LinkedMapがクラスパス上に存在したため、
LinkedMapが自動選択される結果となっています。
Reply to #87762

Reply to #87763×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login

Re: Bean定義ファイル(xml)を用いてBeanを生成する際のMapの型について (2021-09-21 11:10 by terasoluna #88058)

メッセージ #87763 への返信

前回の回答について、2点訂正させて下さい。

> 上記の事象は、SpringがJavaのバージョンを正しく認識できず、
> LinkedHashMap(Java1.4以降であることが必須条件)が自動選択されない状況に陥ったことにより発生しております。

誤)
LinkedHashMap(Java1.4以降であることが必須条件)
正)
LinkedHashMap(Java1.5以降であることが必須条件)



> によって生成されるMapは、
> 本来、ランタイムがJava1.4以降であれば、
> java.util.LinkedHashMap(JDK1.4で追加されたクラス)が自動選択されますが、
> 判定不能バージョンのJava(1.8)が、Spring 2.0.6ではJava1.3扱いとなり、
> java.util.LinkedHashMapが自動選択できず、
> 次の自動選択候補となるorg.apache.commons.collections.map.LinkedMapがクラスパス上に存在したため、
> LinkedMapが自動選択される結果となっています。

誤)
本来、ランタイムがJava1.4以降であれば、
java.util.LinkedHashMap(JDK1.4で追加されたクラス)が自動選択されますが、
判定不能バージョンのJava(1.8)が、Spring 2.0.6ではJava1.3扱いとなり、

正)
本来、ランタイムがJava1.5以降であれば、
java.util.LinkedHashMap(JDK1.5で追加されたクラス)が自動選択されますが、
判定不能バージョンのJava(1.8)が、Spring 2.0.6ではJava1.3扱い、Spring 2.5.6.SEC01ではJava1.4扱いとなり、
Reply to #87763

Reply to #88058×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login