Search in sources :

Example 1 with ProgressEvent

use of javax.enterprise.deploy.spi.status.ProgressEvent in project Payara by payara.

the class ProgressObjectSink method handleProgressEvent.

/**
 * receives notification of a progress event from one of our
 * registered interface.
 */
public void handleProgressEvent(ProgressEvent progressEvent) {
    ProgressEvent forwardedEvent;
    DeploymentStatus forwardedDS = progressEvent.getDeploymentStatus();
    // we intercept all events...
    if (!forwardedDS.isRunning()) {
        // this mean we are either completed or failed...
        if (forwardedDS.isFailed()) {
            /*
                 *Once at least one operation fails, we know that the aggregate state will have
                 *to be failed.
                 */
            finalStateType = StateType.FAILED;
        }
        // since this is the completion event
        // we are done with that progress listener;
        Object source = progressEvent.getSource();
        if (source instanceof ProgressObject) {
            ProgressObject po = (ProgressObject) source;
            po.removeProgressListener(this);
            sources.remove(source);
            if (forwardedDS.isCompleted()) {
                TargetModuleID[] ids = po.getResultTargetModuleIDs();
                for (int i = 0; i < ids.length; i++) {
                    targetModuleIDs.add(ids[i]);
                }
            }
        } else {
            throw new RuntimeException(localStrings.getLocalString("enterprise.deployment.client.noprogressobject", "Progress event does not contain a ProgressObject source"));
        }
        /*
             *Update the completionStatus by adding a stage to it and recording the completion
             *of this event as the newest stage.
             */
        updateCompletedStatus(forwardedDS);
        // now we change our event state to running.  We always forward every event from a
        // source to the listeners with "running" status because the sink is not yet completely
        // finished.  We will also send a final aggregate completion event
        // if this is a completion event from our last source (see below).
        DeploymentStatusImpl forwardedStatus = new DeploymentStatusImpl();
        forwardedStatus.setState(StateType.RUNNING);
        forwardedStatus.setMessage(forwardedDS.getMessage());
        forwardedStatus.setCommand(forwardedDS.getCommand());
        forwardedEvent = new ProgressEvent(this, progressEvent.getTargetModuleID(), forwardedStatus);
    } else {
        // This is a "running" event from one of our sources, so we just need to swap the source...
        forwardedEvent = new ProgressEvent(this, progressEvent.getTargetModuleID(), forwardedDS);
    }
    // we need to fire the received event to our listeners
    Collection clone;
    ProgressEvent finalEvent = null;
    synchronized (registeredPL) {
        clone = (Collection) registeredPL.clone();
        deliveredEvents.add(forwardedEvent);
        /*
             *If we are done with all of our sources, let's wrap up by creating a final event that will
             *be broadcast to the listeners along with the forwarded event.  Also create the completed status
             *that meets the requirements of the JESProgressObject interface.
             */
        if (sources.isEmpty()) {
            prepareCompletedStatus();
            DeploymentStatusImpl status = new DeploymentStatusImpl();
            status.setState(finalStateType);
            if (finalStateType.equals(StateType.FAILED)) {
                status.setMessage(localStrings.getLocalString("enterprise.deployment.client.aggregatefailure", "At least one operation failed"));
            } else {
                status.setMessage(localStrings.getLocalString("enterprise.deployment.client.aggregatesuccess", "All operations completed successfully"));
            }
            finalEvent = new ProgressEvent(this, progressEvent.getTargetModuleID(), status);
            deliveredEvents.add(finalEvent);
        }
    }
    for (Iterator itr = clone.iterator(); itr.hasNext(); ) {
        ProgressListener pl = (ProgressListener) itr.next();
        pl.handleProgressEvent(forwardedEvent);
    }
    /*
         *Send the final event if there is one.
         */
    if (finalEvent != null) {
        for (Iterator itr = clone.iterator(); itr.hasNext(); ) {
            ProgressListener pl = (ProgressListener) itr.next();
            pl.handleProgressEvent(finalEvent);
        }
    }
}
Also used : ProgressListener(javax.enterprise.deploy.spi.status.ProgressListener) TargetModuleID(javax.enterprise.deploy.spi.TargetModuleID) Iterator(java.util.Iterator) Collection(java.util.Collection) DFProgressObject(org.glassfish.deployment.client.DFProgressObject) ProgressObject(javax.enterprise.deploy.spi.status.ProgressObject) ProgressEvent(javax.enterprise.deploy.spi.status.ProgressEvent) DFProgressObject(org.glassfish.deployment.client.DFProgressObject) ProgressObject(javax.enterprise.deploy.spi.status.ProgressObject) DFDeploymentStatus(org.glassfish.deployment.client.DFDeploymentStatus) DeploymentStatus(javax.enterprise.deploy.spi.status.DeploymentStatus)

Example 2 with ProgressEvent

use of javax.enterprise.deploy.spi.status.ProgressEvent in project Payara by payara.

the class SunDeploymentManager method prepareErrorProgressObject.

/**
 *Prepare a ProgressObject that reflects an error, with a related Throwable cause.
 *@param commandType being processed at the time of the error
 *@param throwable that occurred
 *@return ProgressObject set to FAILED with linked cause reporting full error info
 */
private ProgressObject prepareErrorProgressObject(CommandType commandType, Throwable thr) {
    DeploymentStatus ds = new DeploymentStatusImplWithError(CommandType.DISTRIBUTE, thr);
    SimpleProgressObjectImpl progressObj = new SimpleProgressObjectImpl(ds);
    ProgressEvent event = new ProgressEvent(progressObj, null, /*targetModuleID */
    ds);
    progressObj.fireProgressEvent(event);
    return progressObj;
}
Also used : ProgressEvent(javax.enterprise.deploy.spi.status.ProgressEvent) DeploymentStatus(javax.enterprise.deploy.spi.status.DeploymentStatus)

Example 3 with ProgressEvent

use of javax.enterprise.deploy.spi.status.ProgressEvent in project Payara by payara.

the class ProgressObjectImpl method fireProgressEvent.

/**
 * Notifies all listeners that have registered interest for ProgressEvent notification.
 */
protected void fireProgressEvent(StateType state, String message, TargetImpl aTarget) {
    StateType stateToBroadcast = (state != null) ? state : deploymentStatus.getState();
    /* new copy of DeploymentStatus */
    DeploymentStatusImpl depStatus = new DeploymentStatusImpl(this);
    depStatus.setState(stateToBroadcast);
    depStatus.setMessage(message);
    /*
         *Update this progress object's status before notifying listeners.
         */
    if (state != null) {
        deploymentStatus.setMessage(message);
        // retain current state
        deploymentStatus.setState(state);
    }
    /* send notification */
    TargetModuleIDImpl tmi = new TargetModuleIDImpl(aTarget, moduleID);
    fireProgressEvent(new ProgressEvent(this, tmi, depStatus));
}
Also used : StateType(javax.enterprise.deploy.shared.StateType) ProgressEvent(javax.enterprise.deploy.spi.status.ProgressEvent)

Example 4 with ProgressEvent

use of javax.enterprise.deploy.spi.status.ProgressEvent in project Payara by payara.

the class ProgressObjectSink method addProgressListener.

/**
 * Register a new ProgressListener
 * @param the new listener instance
 */
public void addProgressListener(ProgressListener progressListener) {
    Collection clone;
    synchronized (registeredPL) {
        registeredPL.add(progressListener);
        // now let's deliver all the events we already received.
        clone = (Collection) deliveredEvents.clone();
    }
    for (Iterator itr = clone.iterator(); itr.hasNext(); ) {
        ProgressEvent pe = (ProgressEvent) itr.next();
        progressListener.handleProgressEvent(pe);
    }
}
Also used : Iterator(java.util.Iterator) Collection(java.util.Collection) ProgressEvent(javax.enterprise.deploy.spi.status.ProgressEvent)

Aggregations

ProgressEvent (javax.enterprise.deploy.spi.status.ProgressEvent)4 Collection (java.util.Collection)2 Iterator (java.util.Iterator)2 DeploymentStatus (javax.enterprise.deploy.spi.status.DeploymentStatus)2 StateType (javax.enterprise.deploy.shared.StateType)1 TargetModuleID (javax.enterprise.deploy.spi.TargetModuleID)1 ProgressListener (javax.enterprise.deploy.spi.status.ProgressListener)1 ProgressObject (javax.enterprise.deploy.spi.status.ProgressObject)1 DFDeploymentStatus (org.glassfish.deployment.client.DFDeploymentStatus)1 DFProgressObject (org.glassfish.deployment.client.DFProgressObject)1