0

ビジネス ロジックのジョブ実行コンテキストにマップ/リストを格納するスプリング バッチ ジョブがあり、最初に失敗して再起動しようとすると、常に次のようなエラーが発生しました。

java.lang.InstantiationError: java.util.Map$Entry
at sun.reflect.GeneratedSerializationConstructorAccessor147.newInstance(Unknown Source)
....
at com.thoughtworks.xstream.XStream.fromXML(XStream.java:853)
at org.springframework.batch.core.repository.dao.XStreamExecutionContextStringSerializer.deserialize(XStreamExecutionContextStringSerializer.java:48)

DB CLOB から jobexecutioncontext を読み取るときの原因は、XStream 1.3 での逆シリアル化の問題のように見えます...

XStream 1.2.2 にデグレードするようなことを試みましたが、まったく機能しませんでした。そこで、以下のジョブ実行コンテキストにマップ/リストを保存するバッチプログラムを修正しました

AfterJobListener クラス

protected void afterJob() {

for (Entry<String, Object     entry : getJobExecutionContext().entrySet()) {
                String key = entry.getKey();
                Object value = entry.getValue();
                //log.debug("key:" + key + ", value:" + value);
                if (value instanceof Map || value instanceof List) {
                    //log.debug("Del key:" + key + ",Del value:" + value);
                    getJobExecutionContext().remove(key);
                }
            }
        }
jobRepository.updateExecutionContext(getJobExecution());

そして今働いています。

問題は、このエラーを回避する別の方法はありますか? websphere 7.0.0.17 で spring-batch-core-2.1.5 springframework-core 3.0.2 を使用している私のサイト

ありがとう

4

0 に答える 0