All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonj.work.RemoteWorkItem Maven / Gradle / Ivy

There is a newer version: 1.1.1
Show newest version
/* WorkManager for Application Servers
 * Version 1.1
 * Licensed Materials - Property of BEA and IBM
 *
 * ? Copyright BEA Systems, Inc. and International Business Machines Corp 2003-2004. All rights reserved.
 */

package commonj.work;

/**
 * If a Work instance is serializable and the WorkManager implementation supports Remoteable
 * WorkManager then the Work can be sent to a remote member of the application cluster for execution. 
 * This allows serializable Works to be executed on any member of the J2EE cluster containing the application. Subsequent scheduleWork
 * calls will result in the Works being load balanced over the available members in the cluster using a vendor specific algorithm. 

* Clearly, if this is the case then the Work object supplied to scheduleWork cannot be used to interrogate the result when the * Work completes as it was a copy that was executed on the remote JVM. The Work instance is copied and marshalled to the remote JVM * where it is executed and then a copy * of the Work instance is send back to the JVM that called scheduleWork. This returned copy is then available using the * {@link WorkItem#getResult()} method.

* * If the application wants to send multiple Work objects to the same remote JVM then it * should schedule Work on a resource-ref obtained WorkManager and then * schedule subsequent Work objects using the WorkManager obtained from the * {@link RemoteWorkItem#getPinnedWorkManager} method. This is called a pinned WorkManager. * This provides affinity to the same remote JVM to be maintained. * If the remote JVM fails then subsequent calls to scheduleWork on the pinned * WorkManager will fail with a {@link WorkRejectedException} once the failure has been detected.

* * If a remote JVM containing pending Works fails then these Works are marked as complete with a status of rejected. * @since 1.0 * @version 1.1 */ public interface RemoteWorkItem extends WorkItem { /** * Calls the remote Work object's {@link Work#release()} method. * It instructs the Work associated with this RemoteWorkItem to 'stop' voluntarily. If * the work has already stopped then this has no effect. The {@link WorkItem#getStatus()} can be * used to determine whether it has stopped or not but the Work can always stop * just after getStatus returns 'still working'. * The best way to wait for such Works to release is using the * {@link WorkManager#waitForAll(java.util.Collection, long)} API. * @since 1.0 */ void release(); /** * This returns a pinned WorkManager which represents the JVM that was used to execute this Work. This allows subsequent * remote Works to be sent to the same JVM as the one that was used to execute this * WorkItem. If the remote JVM fails then subsequent scheduleWorks on this * WorkManager will fail with a rejected exception even if the remote JVM restarts. The pinned WorkManager is associated with * the JVM instance that was running as opposed to any future JVM instance. * @return the WorkManager associated with the JVM that was used to execute this RemoteWorkItem * @since 1.0 */ WorkManager getPinnedWorkManager(); }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy