Search in sources :

Example 1 with MCRTransactionableCallable

use of org.mycore.util.concurrent.MCRTransactionableCallable in project mycore by MyCoRe-Org.

the class MCRMetadataHistoryCommands method buildHistory.

@MCRCommand(syntax = "build metadata history of base {0}", help = "build metadata history of all objects with base id {0}")
public static List<String> buildHistory(String baseId) {
    MCRMetadataStore store = MCRXMLMetadataManager.instance().getStore(baseId);
    if (store instanceof MCRVersioningMetadataStore) {
        LogManager.getLogger().info("Verify SVN history of {}", baseId);
        ((MCRVersioningMetadataStore) store).verify();
    }
    ExecutorService executorService = Executors.newWorkStealingPool();
    MCRSession currentSession = MCRSessionMgr.getCurrentSession();
    int maxId = store.getHighestStoredID();
    AtomicInteger completed = new AtomicInteger(maxId);
    IntStream.rangeClosed(1, maxId).parallel().mapToObj(i -> MCRObjectID.formatID(baseId, i)).map(MCRObjectID::getInstance).map(id -> new MCRTransactionableCallable<>(Executors.callable(() -> {
        EntityManager em = MCREntityManagerProvider.getCurrentEntityManager();
        getHistoryItems(id).sequential().forEach(em::persist);
        completed.decrementAndGet();
    }), currentSession)).forEach(executorService::submit);
    executorService.shutdown();
    boolean waitToFinish = true;
    while (!executorService.isTerminated() && waitToFinish) {
        LogManager.getLogger().info("Waiting for history of {} objects/derivates.", completed.get());
        try {
            executorService.awaitTermination(10, TimeUnit.SECONDS);
        } catch (InterruptedException e) {
            waitToFinish = false;
        }
    }
    return Collections.emptyList();
}
Also used : IntStream(java.util.stream.IntStream) MCRTransactionableCallable(org.mycore.util.concurrent.MCRTransactionableCallable) MCRDerivate(org.mycore.datamodel.metadata.MCRDerivate) ArrayList(java.util.ArrayList) JDOMException(org.jdom2.JDOMException) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) CriteriaBuilder(javax.persistence.criteria.CriteriaBuilder) MCRXMLMetadataManager(org.mycore.datamodel.common.MCRXMLMetadataManager) CriteriaDelete(javax.persistence.criteria.CriteriaDelete) MCRCommandGroup(org.mycore.frontend.cli.annotation.MCRCommandGroup) MCRCreatorCache(org.mycore.datamodel.common.MCRCreatorCache) ExecutorService(java.util.concurrent.ExecutorService) Root(javax.persistence.criteria.Root) MCRMetadataVersion(org.mycore.datamodel.ifs2.MCRMetadataVersion) MCRMetadataManager(org.mycore.datamodel.metadata.MCRMetadataManager) IOException(java.io.IOException) EntityManager(javax.persistence.EntityManager) Instant(java.time.Instant) Collectors(java.util.stream.Collectors) Executors(java.util.concurrent.Executors) ExecutionException(java.util.concurrent.ExecutionException) TimeUnit(java.util.concurrent.TimeUnit) MCREntityManagerProvider(org.mycore.backend.jpa.MCREntityManagerProvider) MCRVersionedMetadata(org.mycore.datamodel.ifs2.MCRVersionedMetadata) List(java.util.List) Stream(java.util.stream.Stream) MCRSystemUserInformation(org.mycore.common.MCRSystemUserInformation) MCRVersioningMetadataStore(org.mycore.datamodel.ifs2.MCRVersioningMetadataStore) MCRCommand(org.mycore.frontend.cli.annotation.MCRCommand) MCRSession(org.mycore.common.MCRSession) MCRObjectID(org.mycore.datamodel.metadata.MCRObjectID) MCRSessionMgr(org.mycore.common.MCRSessionMgr) MCRObject(org.mycore.datamodel.metadata.MCRObject) SAXException(org.xml.sax.SAXException) Optional(java.util.Optional) MCRMetadataStore(org.mycore.datamodel.ifs2.MCRMetadataStore) Collections(java.util.Collections) LogManager(org.apache.logging.log4j.LogManager) MCRTransactionableCallable(org.mycore.util.concurrent.MCRTransactionableCallable) MCRMetadataStore(org.mycore.datamodel.ifs2.MCRMetadataStore) EntityManager(javax.persistence.EntityManager) MCRSession(org.mycore.common.MCRSession) MCRVersioningMetadataStore(org.mycore.datamodel.ifs2.MCRVersioningMetadataStore) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) ExecutorService(java.util.concurrent.ExecutorService) MCRObjectID(org.mycore.datamodel.metadata.MCRObjectID) MCRCommand(org.mycore.frontend.cli.annotation.MCRCommand)

Aggregations

IOException (java.io.IOException)1 Instant (java.time.Instant)1 ArrayList (java.util.ArrayList)1 Collections (java.util.Collections)1 List (java.util.List)1 Optional (java.util.Optional)1 ExecutionException (java.util.concurrent.ExecutionException)1 ExecutorService (java.util.concurrent.ExecutorService)1 Executors (java.util.concurrent.Executors)1 TimeUnit (java.util.concurrent.TimeUnit)1 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)1 Collectors (java.util.stream.Collectors)1 IntStream (java.util.stream.IntStream)1 Stream (java.util.stream.Stream)1 EntityManager (javax.persistence.EntityManager)1 CriteriaBuilder (javax.persistence.criteria.CriteriaBuilder)1 CriteriaDelete (javax.persistence.criteria.CriteriaDelete)1 Root (javax.persistence.criteria.Root)1 LogManager (org.apache.logging.log4j.LogManager)1 JDOMException (org.jdom2.JDOMException)1