/* * 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.exec; import net.jini.id.Uuid; import org.rioproject.deploy.ServiceBeanInstance; import org.rioproject.deploy.ServiceBeanInstantiationException; import org.rioproject.opstring.OperationalStringManager; import org.rioproject.opstring.ServiceElement; import org.rioproject.system.ComputeResourceUtilization; import org.rioproject.system.capability.PlatformCapability; import org.rioproject.watch.Watchable; import java.rmi.Remote; import java.rmi.RemoteException; /** * Defines the interface for a utility that will fork a service into * it's own process * * @author Dennis Reedy */ public interface ServiceBeanExecutor extends Watchable, Remote { /** * Get the {@link org.rioproject.system.ComputeResourceUtilization} for the * service's JVM * * @return The ComputeResourceUtilization * * @throws RemoteException If communication errors happen */ ComputeResourceUtilization getComputeResourceUtilization() throws RemoteException; /** * If the forked service required provisioning of additional software, * apply the installed {@code PlatformCapability} objects. * * @param pCaps Array of {@link org.rioproject.system.capability.PlatformCapability} * to apply. If the array is null or empty, no action is taken. * * @throws RemoteException If communication errors happen */ void applyPlatformCapabilities(PlatformCapability[] pCaps) throws RemoteException; /** * This method is invoked by the Cybernode to activate a service in it's own * VM. The Cybernode sends the * {@link org.rioproject.deploy.ServiceProvisionEvent} it received * to the <tt>ServiceBeanExecutor</tt> * * @param sElem The ServiceElement * @param opStringMgr The {@link org.rioproject.opstring.OperationalStringManager} * that has deployed and is managing the service * @return ServiceBeanInstance- A ServiceBeanInstance object * * @throws org.rioproject.deploy.ServiceBeanInstantiationException if there are problems * loading or instantiating the ServiceBean * @throws RemoteException if communication errors occur */ ServiceBeanInstance instantiate(ServiceElement sElem, OperationalStringManager opStringMgr) throws ServiceBeanInstantiationException, RemoteException; /** * Invoked to update an instantiated service instance of changes in the * {@link org.rioproject.opstring.ServiceElement}, and {@link * org.rioproject.opstring.OperationalStringManager} reference. This method * invocation is typically triggered when the {@link * org.rioproject.opstring.OperationalString} has been updated, or the * {@code OperationalStringManager} has been changed. * <p/> * ServiceElement updates can trigger changes in running services. * ServiceElement attributes (and contained class attributes) which may * trigger behavior changes as follows: <ol> <li>Additions/removals or * changes to declared {@link org.rioproject.sla.SLA} instances * <li>Additions/removals or changes to declared {@code * org.rioproject.associations.Association} instances <li>Additions/removals to * declared parameters </ol> * * @param elem ServiceElement to update * @param opStringMgr The OperationalStringManager which is performing the * update * @throws RemoteException If communication errors happen */ void update(ServiceElement elem, OperationalStringManager opStringMgr) throws RemoteException; /** * Get the {@link ServiceBeanInstance} for a service that has been instantiated by the * {@code ServiceBeanExecutor} * * @return The {@link ServiceBeanInstance} for a service that has been instantiated by the * {@code ServiceBeanExecutor} * * @throws RemoteException If communication errors happen */ ServiceBeanInstance getServiceBeanInstance() throws RemoteException; /** * Get the {@code ID} for the JVM the forked service has been created in. * * @return The {{@code ID} for the JVM the forked service has been created in. * * @throws RemoteException If there are communication problems */ String getID() throws RemoteException; /** * Set the Uuid for the ServiceBeanExecutor. This will be used to create the * {@link org.rioproject.deploy.ServiceBeanInstance}, and points to the * Cybernode that is forking the service bean * * @param uuid the Uuid * @throws RemoteException If there are communication problems */ void setUuid(Uuid uuid) throws RemoteException; /** * Set the callback, allowing the ServiceBeanExecutor to notify the delegate * of lifecycle changes * * @param listener The ServiceBeanExecListener * @throws RemoteException If for some reason communication fails */ void setServiceBeanExecListener(ServiceBeanExecListener listener) throws RemoteException; }