/* * RHQ Management Platform * Copyright (C) 2005-2009 Red Hat, Inc. * All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation version 2 of the License. * * 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ package org.rhq.enterprise.server.plugin.pc; import java.io.Serializable; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import org.rhq.enterprise.server.xmlschema.ScheduledJobDefinition; /** * <p> * A scheduled job's invocation method can take a single argument of this type. * If this is the case, the scheduled job's method will be passed an object of this type enabling * the job being invoked to be given information about the invocation. * </p> * <p> * When a job is <strong>not</strong> marked for concurrent execution, it can store data in the context in the form of * key/value properties. These properties will be persisted across invocations of the job. If the job is marked to as * clustered, the job data will persist across server restarts as well. Lastly, if the job is marked to run * concurrently, the methods for accessing/updating properties will throw an exception. * </p> * * @author John Mazzitelli */ public class ScheduledJobInvocationContext { private final ScheduledJobDefinition jobDefinition; private final ServerPluginContext serverPluginContext; private final ServerPluginComponent serverPluginComponent; public ScheduledJobInvocationContext(ScheduledJobDefinition jobDefinition, ServerPluginContext pluginContext, ServerPluginComponent serverPluginComponent) { this.jobDefinition = jobDefinition; this.serverPluginContext = pluginContext; this.serverPluginComponent = serverPluginComponent; } /** * The definition of the triggered job that owns this context object. * * @return the triggered job's definition */ public ScheduledJobDefinition getJobDefinition() { return this.jobDefinition; } /** * General information for the job's plugin. * * @return the triggered job's plugin context */ public ServerPluginContext getServerPluginContext() { return this.serverPluginContext; } /** * If the job's plugin has a plugin component defined, this will return the instance of that component. * This is helpful for stateless jobs to obtain information from the plugin component, which is stateful. * * @return the plugin component instance from the triggered job's plugin, or <code>null</code> if * there is no plugin component for the plugin */ public ServerPluginComponent getServerPluginComponent() { return serverPluginComponent; } /** * Adds a property to the context that is persisted across invocations of the job. The property is persisted across * server restarts <strong>only if</strong> the scheduled job is declared to run as clustered. Note that method * will throw an exception if the job is declared for concurrent execution. * * @param key The property name * @param value The property value * @throws UnsupportedOperationException if the job is marked for concurrent execution */ public void put(String key, String value) { throw new UnsupportedOperationException("This operation is only supported for stateful jobs."); } /** * Retrieves a property value from the context. * * @param key The property key * @return The property value or <code>null<code> if the key is not found * @throws UnsupportedOperationException if the job is marked for concurrent execution */ public String get(String key) { throw new UnsupportedOperationException("This operation is only supported for stateful jobs."); } /** * Removes the property value associated with the specified key * * @param key The property key * @return The value previously associated with the key or <code>null</code> if the key is present in the context * @throws UnsupportedOperationException if the job is marked for concurrent execution */ public String remove(String key) { throw new UnsupportedOperationException("This operation is only supported for stateful jobs."); } /** * Checks to see whether or not the property key is stored in the context. * @param key The property key * @return <code>true</code> if the key is found, <code>false</code> otherwise. * @throws UnsupportedOperationException if the job is marked for concurrent execution */ public boolean containsKey(String key) { throw new UnsupportedOperationException("This operation is only supported for stateful jobs."); } /** * Returns a <strong>read-only</strong> view of the properties stored in the context. * * @return A <strong>read-only</strong> view of the properties stored in the context. * @throws UnsupportedOperationException if the job is marked for concurrent execution */ public Map<String, String> getJobData() { throw new UnsupportedOperationException("This operation is only supported for stateful jobs."); } }