Package org.jpos.q2.iso

Source Code of org.jpos.q2.iso.DirPollAdaptor

/*
* jPOS Project [http://jpos.org]
* Copyright (C) 2000-2014 Alejandro P. Revilla
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

package org.jpos.q2.iso;

import org.jpos.core.Configurable;
import org.jpos.core.Configuration;
import org.jpos.q2.QBeanSupport;
import org.jpos.q2.QFactory;
import org.jpos.util.DirPoll;
import org.jpos.util.LogSource;
import org.jpos.util.ThreadPool;

/**
* DirPoll Adaptor
*
* @author Alejandro Revilla
* @version $Revision$ $Date$
*/
public class DirPollAdaptor
    extends QBeanSupport
    implements DirPollAdaptorMBean
{
    String path, priorities, processorClass;
    int poolSize;
    long pollInterval;
    protected DirPoll dirPoll;
    protected Thread dirPollThread = null;

    public DirPollAdaptor () {
        super ();
        poolSize = 1;
        pollInterval = 1000;
    }

    protected void initService () throws Exception {
        QFactory factory = getServer().getFactory();
        dirPoll  = createDirPoll();
        dirPoll.setPath (getPath ());
        dirPoll.setThreadPool (new ThreadPool (1, poolSize));
        dirPoll.setPollInterval (pollInterval);
        if (priorities != null)
            dirPoll.setPriorities (priorities);
        dirPoll.setLogger (getLog().getLogger(), getLog().getRealm ());
        Configuration cfg = factory.getConfiguration (getPersist());
        dirPoll.setConfiguration (cfg);
        dirPoll.createDirs ();
        Object dpp = factory.newInstance (getProcessor());
        if (dpp instanceof LogSource) {
            ((LogSource) dpp).setLogger (
                getLog().getLogger(), getLog().getRealm ()
            );
        }
        if (dpp instanceof Configurable) {
            ((Configurable) dpp).setConfiguration (cfg);
        }
        dirPoll.setProcessor (dpp);
    }

    protected DirPoll createDirPoll() {
        return new DirPoll();
    }

    protected void startService () throws Exception {
        if (dirPoll == null) {
            throw new IllegalStateException("Not initialized!");
        }
        synchronized (dirPoll) {
            dirPollThread = new Thread(dirPoll);
            dirPollThread.start();
        }
    }

    protected void stopService () throws Exception {
        dirPoll.destroy ();
        synchronized (dirPoll) {
            if (dirPollThread != null) {
                long shutdownTimeout = cfg.getLong("shutdown-timeout", 60000);
                try {
                    dirPollThread.join(shutdownTimeout);
                } catch (InterruptedException e) {

                }
                if (dirPollThread.isAlive()) {
                    getLog().warn(getName() + " - dirPoll thread did not finish in " + shutdownTimeout + " milliseconds. Interrupting thread now.");
                    dirPollThread.interrupt();
                }
                dirPollThread = null;
            }
        }
    }


    public synchronized void setPath (String path) {
        this.path = path;
        setModified (true);
    }

    public synchronized void setPoolSize (int size) {
        this.poolSize = size;
        setModified (true);
    }

    public int getPoolSize () {
        return poolSize;
    }

    public String getPath () {
        return path == null ? "." : path;
    }

    public synchronized void setPollInterval (long pollInterval) {
        this.pollInterval = pollInterval;
        setModified (true);
    }

    public long getPollInterval () {
        return pollInterval;
    }

    public synchronized void setPriorities (String priorities) {
        this.priorities = priorities;
        setModified (true);
    }

    public String getPriorities () {
        return priorities;
    }

    public synchronized void setProcessor (String processor) {
        this.processorClass = processor;
        setModified (true);
    }

    public String getProcessor() {
        return processorClass;
    }
}
TOP

Related Classes of org.jpos.q2.iso.DirPollAdaptor

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.