All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jberet.wildfly.cluster.infinispan.InfinispanPartitionResource Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (c) 2017 Red Hat, Inc. and/or its affiliates.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 * Cheng Fang - Initial API and implementation
 */

package org.jberet.wildfly.cluster.infinispan;

import java.lang.annotation.Annotation;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.batch.operations.JobOperator;
import javax.batch.runtime.BatchRuntime;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import org.infinispan.Cache;
import org.infinispan.notifications.cachelistener.annotation.CacheEntryModified;
import org.jberet.operations.AbstractJobOperator;
import org.jberet.operations.DelegatingJobOperator;
import org.jberet.wildfly.cluster.infinispan._private.ClusterInfinispanLogger;
import org.jberet.wildfly.cluster.infinispan._private.ClusterInfinispanMessages;

public final class InfinispanPartitionResource {
    public static final String CACHE_CONTAINER_NAME = "infinispan/container/jberet";
    public static final String CACHE_NAME = "infinispan/cache/web/jberet";

    static final Set> cacheModifiedType =
            Stream.of(CacheEntryModified.class).collect(Collectors.toSet());

    private final Context namingContext;

    public InfinispanPartitionResource() {
        try {
            namingContext = new InitialContext();
        } catch (NamingException e) {
            throw ClusterInfinispanMessages.MESSAGES.failedToNewNamingContext(e);
        }
    }

    public  T lookUp(final String name) {
        String s = name.startsWith("java:") ? name : "java:comp/env/" + name;
        try {
            T result = (T) namingContext.lookup(s);
            ClusterInfinispanLogger.LOGGER.lookupResource(s, result);
            return result;
        } catch (NamingException e) {
            throw ClusterInfinispanMessages.MESSAGES.failedToLookup(e, s);
        }
    }

    public Cache getCache() {
        return lookUp(CACHE_NAME);
    }

    public void close() {
        if (namingContext != null) {
            try {
                namingContext.close();
            } catch (NamingException e) {
                ClusterInfinispanLogger.LOGGER.problemClosingResource(e);
            }
        }
    }

    public static AbstractJobOperator getJobOperator() {
        final JobOperator operator = BatchRuntime.getJobOperator();
        AbstractJobOperator jobOperator = null;
        if (operator instanceof DelegatingJobOperator) {
            JobOperator delegate = ((DelegatingJobOperator) operator).getDelegate();
            if (delegate instanceof AbstractJobOperator) {
                jobOperator = (AbstractJobOperator) delegate;
            }
        }
        if (jobOperator == null) {
            throw ClusterInfinispanMessages.MESSAGES.failedToGetJobOperator();
        }
        return jobOperator;
    }

//    public static void runPartition(final PartitionInfo partitionInfo,
//                                    final BatchEnvironment batchEnvironment,
//                                    final JobRepository jobRepository,
//                                    final ArtifactFactory artifactFactory,
//                                    final ConnectionFactory connectionFactory,
//                                    final Queue partitionQueue,
//                                    final Topic stopRequestTopic) {
//        final JobExecutionImpl jobExecution = partitionInfo.getJobExecution();
//        final Step step = partitionInfo.getStep();
//        final PartitionExecutionImpl partitionExecution = partitionInfo.getPartitionExecution();
//        final long jobExecutionId = jobExecution.getExecutionId();
//
//        final String stopTopicSelector = InfinispanPartitionResource.getMessageSelector(jobExecutionId);
//        final JMSContext stopRequestTopicContext = connectionFactory.createContext();
//        final JMSConsumer stopRequestConsumer = stopRequestTopicContext.createConsumer(stopRequestTopic, stopTopicSelector);
//        stopRequestConsumer.setMessageListener(stopMessage -> {
//            ClusterInfinispanLogger.LOGGER.receivedStopRequest(jobExecutionId,
//                    step.getId(), partitionExecution.getStepExecutionId(),
//                    partitionExecution.getPartitionId());
//            jobExecution.stop();
//        });
//
//        ClusterInfinispanLogger.LOGGER.receivedPartitionInfo(partitionInfo);
//        final JobContextImpl jobContext = new JobContextImpl(jobExecution, null,
//                artifactFactory, jobRepository, batchEnvironment);
//
//        final InfinispanPartitionWorker partitionWorker = new InfinispanPartitionWorker(connectionFactory, partitionQueue, stopRequestTopicContext);
//        final AbstractContext[] outerContext = {jobContext};
//        final StepContextImpl stepContext = new StepContextImpl(step, partitionExecution, outerContext);
//
//        final AbstractRunner runner;
//        final Chunk chunk = step.getChunk();
//        if (chunk == null) {
//            runner = new BatchletRunner(stepContext, null, step.getBatchlet(), partitionWorker);
//        } else {
//            runner = new ChunkRunner(stepContext, null, chunk, null, partitionWorker);
//        }
//        batchEnvironment.submitTask(runner);
//    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy