/* * RHQ Management Platform * Copyright (C) 2005-2008 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.cloud.instance; import java.util.List; import javax.ejb.Local; import javax.ejb.Timer; import org.rhq.core.domain.cloud.Server; import org.rhq.core.domain.resource.Agent; /** * @author Joseph Marques * @author Jay Shaughnessy */ @Local public interface ServerManagerLocal { /** * The system property (defined in the startup properties file) that indicates * if we need to put the server into MM upon startup. */ String MAINTENANCE_MODE_ON_STARTUP_PROPERTY = "rhq.server.maintenance-mode-at-startup"; void scheduleServerHeartbeat(); void handleHeartbeatTimer(Timer timer); /** * Persist the fully defined <server>. * * @param server * * @return The internal Id of the new Server */ int create(Server server); /** * Determine the identity (i.e. Server Name) of this server by inspecting the configures system property. This is * the mechanism used for a server to determine which server it is in the registered cloud servers. * * @return The server name for this server. */ String getIdentity(); /** * At any time an active agent is communicating (either registered with, or connected to) a server in the cloud. Note * that an agent that went down unexpectedly may still be referencing a server although it is not actively communicating. * * @return The list of Agents referencing this server. */ List<Agent> getAgents(); /** * An Agent can have various status settings {@link Agent}. The Status, when set, indicates * that this agent has some necessary work pending, typically processed by a periodic job. * * @return The subset of agents referencing this server that currently have some Status set. */ List<Integer> getAndClearAgentsWithStatus(); /** * A Server can have various status settings {@link Server}. The Status, when set, indicates * that this server has some necessary work pending, typically processed by a periodic job. * * @return whether or not this server had its Status set. */ boolean getAndClearServerStatus(); /** * Returns an object representing this server as it is known within the registered cloud of servers. * * @return object representing this server * * @throws ServerNotFoundException * * @see {@link #getIdentity()} */ Server getServer() throws ServerNotFoundException; /** * Checks current server mode against previous serverMode and takes any state change actions necessary. Note that * a server can not be DOWN after this call since the call itself is evidence of the server running. So, this * can take care of a server starting up. */ void establishCurrentServerMode(); /** * Synchronizes the endpoint address of this server with the host name or address found on the host machine. If the * host name or address of this machine differs from {@link Server#getAddress()} then this server will be updated * with the value of this machine's host name/address. * * @throws SyncEndpointAddressException */ void syncEndpointAddress() throws SyncEndpointAddressException; /** * Updates server mtime to register active heart beat */ void beat(); }