org.lastaflute.job.log.SavedHistoryCache Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of lasta-job Show documentation
Show all versions of lasta-job Show documentation
Job Scheduling for LastaFlute
/*
* Copyright 2015-2017 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied. See the License for the specific language
* governing permissions and limitations under the License.
*/
package org.lastaflute.job.log;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
import org.dbflute.helper.message.ExceptionMessageBuilder;
import org.dbflute.optional.OptionalThing;
import org.lastaflute.job.LaJobHistory;
import org.lastaflute.job.exception.JobHistoryNotFoundException;
/**
* @author jflute
* @since 0.2.8 (2017/03/04 Saturday)
*/
public class SavedHistoryCache {
// ===================================================================================
// Attribute
// =========
// basically synchronized but just in case
protected final Map historyMap = new ConcurrentHashMap();
protected final List historyKeyList = new CopyOnWriteArrayList();
// ===================================================================================
// Operation
// =========
// -----------------------------------------------------
// Find
// ------
public synchronized OptionalThing find(String historyKey) {
final LaJobHistory found = historyMap.get(historyKey);
return OptionalThing.ofNullable(found, () -> {
final ExceptionMessageBuilder br = new ExceptionMessageBuilder();
br.addNotice("Not found the job history by the job thread.");
br.addItem("History Key");
br.addElement(historyKey);
br.addItem("Existing Key");
if (!historyMap.isEmpty()) {
historyMap.forEach((key, value) -> {
br.addElement(key + " = " + value);
});
} else {
br.addElement("*No history");
}
final String msg = br.buildExceptionMessage();
throw new JobHistoryNotFoundException(msg);
});
}
// -----------------------------------------------------
// Record
// ------
public synchronized void record(String historyKey, LaJobHistory jobHistory, int limit) {
if (historyMap.size() >= limit) {
final String removedKey = historyKeyList.remove(0);
historyMap.remove(removedKey);
}
historyMap.put(historyKey, jobHistory);
historyKeyList.add(historyKey);
}
// -----------------------------------------------------
// List
// ------
public synchronized List list() {
return new ArrayList(historyMap.values());
}
// -----------------------------------------------------
// Clear
// -----
public synchronized void clear() {
historyMap.clear();
historyKeyList.clear();
}
}