*/
synchronized AdminEventResult forward() {
// AdminEventResult[] results = null;
AdminEventResult retResult = null;
try {
// results = new AdminEventResult[_info.length];
retResult = new AdminEventResult(_event.getSequenceNumber());
EndPointHandler[] handlers = new EndPointHandler[_info.length];
Thread[] eThreads = new Thread[_info.length];
AdminEvent[] cloneEvents = new AdminEvent[_info.length];
// make clones of the event
for (int i=0; i<_info.length; i++) {
cloneEvents[i] = (AdminEvent) _event.clone();
}
for (int i=0; i<_info.length; i++) {
assert(_info[i].getHost() != null);
cloneEvents[i].setEffectiveDestination( _info[i].getHost() );
handlers[i] = new EndPointHandler(cloneEvents[i], _info[i]);
eThreads[i] = new Thread(handlers[i], HANDLER_NAME+i);
eThreads[i].start();
}
int j =0;
for (int i=0; i<_info.length; i++) {
eThreads[i].join(DEFAULT_TIME_OUT);
retResult.addEventResult(_info[i].getHost(),
handlers[i].getResult());
AdminEventResult r = handlers[i].getResult();
if (( r == null) || (r != null &&
!r.getResultCode().equals(AdminEventResult.SUCCESS))) {
j++;
}
}
if ( j == 0 ) {
retResult.setResultCode(AdminEventResult.SUCCESS);