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);
}
}
}
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;
}
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));
}
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);
}
}
Aggregations