/*
* JBoss, Home of Professional Open Source.
* Copyright 2011, Red Hat, Inc., and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.as.controller.persistence;
import java.io.OutputStream;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import org.jboss.as.controller.PathAddress;
import org.jboss.dmr.ModelNode;
/**
* The configuration persister for a model.
*
* @author <a href="mailto:david.lloyd@redhat.com">David M. Lloyd</a>
*/
public interface ConfigurationPersister {
/**
* Callback for use by callers to {@link ConfigurationPersister#store(org.jboss.dmr.ModelNode, java.util.Set)}
* to control whether the stored model should be flushed to permanent storage.
*/
interface PersistenceResource {
/**
* Flush the stored model to permanent storage.
*/
void commit();
/**
* Discard the changes.
*/
void rollback();
}
/**
* Persist the given configuration model.
*
* @param model the model to persist
* @param affectedAddresses
*
* @return callback to use to control whether the stored model should be flushed to persistent storage
*/
PersistenceResource store(ModelNode model, Set<PathAddress> affectedAddresses) throws ConfigurationPersistenceException;
/**
* Marshals the given configuration model to XML, writing to the given stream.
*
* @param model the model to persist
* @param output the stream
* @throws ConfigurationPersistenceException
*/
void marshallAsXml(final ModelNode model, final OutputStream output) throws ConfigurationPersistenceException;
/**
* Load the configuration model, returning it as a list of updates to be
* executed by the controller.
*/
List<ModelNode> load() throws ConfigurationPersistenceException;
/**
* Called once the xml has been successfully parsed, translated into updates, executed in the target controller
* and all services have started successfully
*/
void successfulBoot() throws ConfigurationPersistenceException;
/**
* Take a snapshot of the current configuration
*
* @return the location of the snapshot
* @return the file location of the snapshot
* @throws ConfigurationPersistenceException if a problem happened when creating the snapshot
*/
String snapshot() throws ConfigurationPersistenceException;
/**
* Gets the names of the snapshots in the snapshots directory
*
* @return the snapshot info. This will never return null
*/
SnapshotInfo listSnapshots();
/**
* Deletes a snapshot using its name.
*
* @param name the name of the snapshot (as returned by {@link SnapshotInfo#names()} returned from {@link #listSnapshots()}. The whole name is not
* needed, just enough to uniquely identify it.
* @throws IllegalArgumentException if there is no snapshot with the given name, or if the name resolves to more than one snapshot.
*/
void deleteSnapshot(String name);
/**
* Contains the info about the configuration snapshots
*/
public interface SnapshotInfo {
/**
* Gets the snapshots directory
*
* @return the snapshots directory
*/
String getSnapshotDirectory();
/**
* Gets the names of the snapshot files in the snapshots directory
*
* @return the snapshot names. If there are none, an empty list is returned
*/
List<String> names();
}
SnapshotInfo NULL_SNAPSHOT_INFO = new SnapshotInfo() {
@Override
public List<String> names() {
return Collections.emptyList();
}
@Override
public String getSnapshotDirectory() {
return "";
}
};
}