Package org.rioproject.monitor.service.persistence

Source Code of org.rioproject.monitor.service.persistence.StateManager

/*
* Copyright to 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.rioproject.monitor.service.persistence;

import org.rioproject.monitor.service.OpStringManager;
import org.rioproject.monitor.service.OpStringManagerController;
import org.rioproject.opstring.OperationalStringException;
import org.rioproject.impl.persistence.PersistentStore;
import org.rioproject.impl.persistence.StoreException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.rmi.MarshalledObject;

/**
* Manages the state of OperationalStrings
*/
public class StateManager {
    private OpStringLogHandler opStringLogHandler;
    private PersistentStore store;
    static Logger logger = LoggerFactory.getLogger(StateManager.class.getName());
    /** Snapshot thread */
    SnapshotThread snapshotter;

    public StateManager(String logDirName, OpStringManagerController opStringMangerController) throws StoreException, IOException {
        opStringLogHandler = new OpStringLogHandler();
        opStringLogHandler.setOpStringMangerController(opStringMangerController);
        store = new PersistentStore(logDirName, opStringLogHandler, opStringLogHandler);
        snapshotter = new SnapshotThread(OpStringLogHandler.class.getName(), store);
        opStringLogHandler.setSnapshotter(snapshotter);
        store.snapshot();
    }

    /**
     * Notification of an OperationalString state change. This method is
     * invoked whenever an OperationalString has been added or removed, and
     * whenever elements of an OperationalString have been modified, added or
     * removed.
     *
     * @param opMgr The OpStringManager that has changed
     * @param remove Whether or not the OpStringManager has been removed
     */
    public void stateChanged(OpStringManager opMgr, boolean remove) {
        if(opStringLogHandler.inRecovery() || store == null)
            return;
        if(!opMgr.isActive())
            return;
        try {
            store.acquireMutatorLock();
            int action = (remove? RecordHolder.REMOVED:RecordHolder.MODIFIED);
            store.update(new MarshalledObject<RecordHolder>(
                                   new RecordHolder(opMgr.doGetOperationalString(),
                                                    action)));
        } catch(IllegalStateException ise) {
            logger.warn("OperationalString state change notification", ise);
        } catch(Throwable t) {
            logger.warn("OperationalString state change notification", t);
        } finally {
            store.releaseMutatorLock();
        }
    }

    public void processRecoveredOpStrings() {
        opStringLogHandler.processRecoveredOpStrings();
    }

    public void processUpdatedOpStrings() throws OperationalStringException {
        opStringLogHandler.processUpdatedOpStrings();
    }

    public boolean inRecovery() {
        return opStringLogHandler.inRecovery();
    }
}
TOP

Related Classes of org.rioproject.monitor.service.persistence.StateManager

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.