Fields Summary |
---|
protected com.sun.corba.se.spi.orb.ORB | orb |
protected com.sun.corba.se.spi.transport.CorbaContactInfoList | contactInfoList |
protected com.sun.corba.se.spi.transport.CorbaContactInfo | successContactInfo |
protected com.sun.corba.se.spi.transport.CorbaContactInfo | failureContactInfo |
protected RuntimeException | failureException |
protected Iterator | effectiveTargetIORIterator |
protected com.sun.corba.se.spi.transport.CorbaContactInfo | previousContactInfo |
protected boolean | isAddrDispositionRetry |
protected com.sun.corba.se.spi.transport.IIOPPrimaryToContactInfo | primaryToContactInfo |
protected com.sun.corba.se.pept.transport.ContactInfo | primaryContactInfo |
protected List | listOfContactInfos |
Methods Summary |
---|
public com.sun.corba.se.pept.transport.ContactInfoList | getContactInfoList()
return contactInfoList;
|
public java.lang.RuntimeException | getFailureException()
if (failureException == null) {
return
ORBUtilSystemException.get( orb,
CORBALogDomains.RPC_TRANSPORT )
.invalidContactInfoListIteratorFailureException();
} else {
return failureException;
}
|
public boolean | hasNext()
// REVISIT: Implement as internal closure iterator which would
// wraps sticky or default. Then hasNext and next just call
// the closure.
if (isAddrDispositionRetry) {
return true;
}
boolean result;
if (primaryToContactInfo != null) {
result = primaryToContactInfo.hasNext(primaryContactInfo,
previousContactInfo,
listOfContactInfos);
} else {
result = effectiveTargetIORIterator.hasNext();
}
return result;
|
public java.lang.Object | next()
if (isAddrDispositionRetry) {
isAddrDispositionRetry = false;
return previousContactInfo;
}
// We hold onto the last in case we get an addressing
// disposition retry. Then we use it again.
// We also hold onto it for the sticky manager.
if (primaryToContactInfo != null) {
previousContactInfo = (CorbaContactInfo)
primaryToContactInfo.next(primaryContactInfo,
previousContactInfo,
listOfContactInfos);
} else {
previousContactInfo = (CorbaContactInfo)
effectiveTargetIORIterator.next();
}
return previousContactInfo;
|
public void | remove()
throw new UnsupportedOperationException();
|
public void | reportAddrDispositionRetry(com.sun.corba.se.spi.transport.CorbaContactInfo contactInfo, short disposition)
previousContactInfo.setAddressingDisposition(disposition);
isAddrDispositionRetry = true;
|
public boolean | reportException(com.sun.corba.se.pept.transport.ContactInfo contactInfo, java.lang.RuntimeException ex)
this.failureContactInfo = (CorbaContactInfo)contactInfo;
this.failureException = ex;
if (ex instanceof COMM_FAILURE) {
SystemException se = (SystemException) ex;
if (se.completed == CompletionStatus.COMPLETED_NO) {
if (hasNext()) {
return true;
}
if (contactInfoList.getEffectiveTargetIOR() !=
contactInfoList.getTargetIOR())
{
// retry from root ior
updateEffectiveTargetIOR(contactInfoList.getTargetIOR());
return true;
}
}
}
return false;
|
public void | reportRedirect(com.sun.corba.se.spi.transport.CorbaContactInfo contactInfo, com.sun.corba.se.spi.ior.IOR forwardedIOR)
updateEffectiveTargetIOR(forwardedIOR);
|
public void | reportSuccess(com.sun.corba.se.pept.transport.ContactInfo contactInfo)
this.successContactInfo = (CorbaContactInfo)contactInfo;
|
public void | updateEffectiveTargetIOR(com.sun.corba.se.spi.ior.IOR newIOR)
contactInfoList.setEffectiveTargetIOR(newIOR);
// If we report the exception in _request (i.e., beginRequest
// we cannot throw RemarshalException to the stub because _request
// does not declare that exception.
// To keep the two-level dispatching (first level chooses ContactInfo,
// second level is specific to that ContactInfo/EPT) we need to
// ensure that the request dispatchers get their iterator from the
// InvocationStack (i.e., ThreadLocal). That way if the list iterator
// needs a complete update it happens right here.
((CorbaInvocationInfo)orb.getInvocationInfo())
.setContactInfoListIterator(contactInfoList.iterator());
|