Package org.jboss.seam.cron.scheduling.queuj

Source Code of org.jboss.seam.cron.scheduling.queuj.QueuJScheduleProvider

/**
* JBoss, Home of Professional Open Source
* Copyright 2011, Red Hat, Inc. and/or its affiliates, and individual
* contributors by the @authors tag. See the copyright.txt in the
* distribution for a full listing of individual contributors.
*
* 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.jboss.seam.cron.scheduling.queuj;

import com.workplacesystems.queuj.Occurrence;
import com.workplacesystems.queuj.Queue;
import com.workplacesystems.queuj.QueueFactory;
import com.workplacesystems.queuj.process.QueujFactory;
import com.workplacesystems.queuj.process.java.JavaProcessBuilder;
import org.jboss.seam.cron.spi.SeamCronExtension;
import org.jboss.seam.cron.spi.queue.CronQueueProvider;
import org.jboss.seam.cron.spi.scheduling.CronSchedulingProvider;
import java.text.ParseException;
import java.util.Locale;

import javax.enterprise.inject.spi.BeanManager;
import javax.inject.Inject;

import org.jboss.seam.cron.impl.scheduling.exception.CronProviderDestructionException;
import org.jboss.seam.cron.impl.scheduling.exception.CronProviderInitialisationException;
import org.jboss.seam.cron.spi.CronProviderLifecycle;
import org.jboss.seam.cron.spi.scheduling.trigger.IntervalTriggerDetail;
import org.jboss.seam.cron.spi.scheduling.trigger.ScheduledTriggerDetail;
import org.jboss.seam.cron.spi.scheduling.trigger.TriggerDetail;
import org.jboss.seam.cron.spi.scheduling.trigger.TriggerSupplies;
import org.jboss.solder.logging.Logger;

/**
* Methods of this class are called at various stages of the JSR-299 initialization
* to set up and start the appropriate schedules in line with the scheduled events
* being observed by the application.
*
* @author Dave Oxley
*/
public class QueuJScheduleProvider implements CronProviderLifecycle, CronSchedulingProvider {

    private static final Logger log = Logger.getLogger(QueuJScheduleProvider.class);
    @Inject
    BeanManager beanManager;
    @Inject
    SeamCronExtension cronExtension;

    /**
     * Initialises the scheduler.
     *
     */
    public void initProvider() throws CronProviderInitialisationException {
        try {
            QueujFactory.getProcessServer((String)null);
        } catch (Exception ex) {
            throw new CronProviderInitialisationException("Error initializing QueuJ scheduler", ex);
        }
    }

    public void processScheduledTrigger(final String queueId, final ScheduledTriggerDetail schedTriggerDetails) throws ParseException, InternalError {
        Occurrence runRelatively = new RunRelatively(schedTriggerDetails);
        scheduleJob(queueId, schedTriggerDetails, runRelatively);
    }

    public void processIntervalTrigger(final String queueId, final IntervalTriggerDetail intervalTriggerDetails) throws ParseException, InternalError {
        Occurrence runRelatively = new RunRelatively(intervalTriggerDetails);
        scheduleJob(queueId, intervalTriggerDetails, runRelatively);
    }

    private void scheduleJob(final String queueId, TriggerDetail triggerDetails, Occurrence occurence) {
        Queue<JavaProcessBuilder> queue = QueueFactory.DEFAULT_QUEUE;
        if (queueId != null) {
            CronQueueProvider queueProvider = cronExtension.getQueueProvider();
            queue = (Queue)queueProvider.getQueue(queueId);
        }
        JavaProcessBuilder jpb = queue.newProcessBuilder(Locale.getDefault());
        final String jobName = triggerDetails.toString() + "-trigger";
        jpb.setProcessName(jobName);
        jpb.setProcessOccurrence(occurence);
        TriggerSupplies triggerSupplies = new TriggerSupplies(beanManager, triggerDetails.getQualifier(), triggerDetails.getQualifiers());
        jpb.setProcessDetails(new TriggerRunner(), "execute", new Class[] { TriggerSupplies.class }, new Object[] { triggerSupplies });
        jpb.setProcessPersistence(false);
        jpb.newProcess();
    }

    /**
     * Shutdown the scheduler on application close.
     */
    public void destroyProvider() throws CronProviderDestructionException {
    }
}
TOP

Related Classes of org.jboss.seam.cron.scheduling.queuj.QueuJScheduleProvider

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.