< prev index next >
src/java.corba/share/classes/com/sun/corba/se/spi/oa/ObjectAdapter.java
Print this page
*** 87,97 ****
* <ol>
* <li>A remote invocation, where the dispatch is handled in the server subcontract.</li>
* <li>A local invocation, where the dispatch is handled in the client subcontract.</li>
* <li>A cached local invocation, where the servant is cached when the IOR is established
* for the client subcontract, and the dispatch is handled in the client subcontract
! * to the cached subcontract.<li>
* </ol>
* <p>
* Each of these 3 cases is handled a bit differently. On each request, assume as known
* ObjectId and ObjectAdapterId, which can be obtained from the object key.
* The ObjectAdaptorFactory is available in the subcontract registry, where it is
--- 87,97 ----
* <ol>
* <li>A remote invocation, where the dispatch is handled in the server subcontract.</li>
* <li>A local invocation, where the dispatch is handled in the client subcontract.</li>
* <li>A cached local invocation, where the servant is cached when the IOR is established
* for the client subcontract, and the dispatch is handled in the client subcontract
! * to the cached subcontract.</li>
* </ol>
* <p>
* Each of these 3 cases is handled a bit differently. On each request, assume as known
* ObjectId and ObjectAdapterId, which can be obtained from the object key.
* The ObjectAdaptorFactory is available in the subcontract registry, where it is
*** 111,123 ****
* <li>oa.returnServant()</li>
* <li>oa.exit()</li>
* <li>pop info</li>
* </ol>
* </li>
! * REVISIT: Is this the required order for exit/pop? Cna they be nested instead?
* Note that getInvocationServant and returnServant may throw exceptions. In such cases,
! * returnServant, exit, and pop must be called in the correct order.
* <li>The local pattern:
* <ol>
* <li>oa = oaf.find( oaid )</li>
* <li>oa.enter()</li>
* <li>info = oa.makeInvocationInfo( oid )</li>
--- 111,123 ----
* <li>oa.returnServant()</li>
* <li>oa.exit()</li>
* <li>pop info</li>
* </ol>
* </li>
! * <!-- REVISIT: Is this the required order for exit/pop? Cna they be nested instead?
* Note that getInvocationServant and returnServant may throw exceptions. In such cases,
! * returnServant, exit, and pop must be called in the correct order. -->
* <li>The local pattern:
* <ol>
* <li>oa = oaf.find( oaid )</li>
* <li>oa.enter()</li>
* <li>info = oa.makeInvocationInfo( oid )</li>
*** 126,139 ****
* <li>oa.getInvocationServant( info )</li>
* <li>dispatch to servant</li>
* <li>oa.returnServant()</li>
* <li>oa.exit()</li>
* <li>pop info</li>
! * <ol>
* </li>
! * This is the same as the remote case, except that setExecuteReturnServantInResponseConstructor
! * is not needed (or possible, since there is no server request).
* <li>The fast local pattern: When delegate is constructed,
* first extract ObjectKey from IOR in delegate,
* then get ObjectId, ObjectAdapterId, and ObjectAdapterFactory (oaf). Then:
* <ol>
* <li>oa = oaf.find( oaid )</li>
--- 126,139 ----
* <li>oa.getInvocationServant( info )</li>
* <li>dispatch to servant</li>
* <li>oa.returnServant()</li>
* <li>oa.exit()</li>
* <li>pop info</li>
! * </ol>
* </li>
! * <!-- This is the same as the remote case, except that setExecuteReturnServantInResponseConstructor
! * is not needed (or possible, since there is no server request). -->
* <li>The fast local pattern: When delegate is constructed,
* first extract ObjectKey from IOR in delegate,
* then get ObjectId, ObjectAdapterId, and ObjectAdapterFactory (oaf). Then:
* <ol>
* <li>oa = oaf.find( oaid )</li>
*** 141,158 ****
* <li>push info (needed for the correct functioning of getInvocationServant)</li>
* <li>oa.getInvocationServant( info )</li>
* <li>pop info
* </ol>
* The info instance (which includes the Servant) is cached in the client subcontract.
! * <p>Then, on each invocation:</p>
* <ol>
* <li>newinfo = copy of info (clone)</li>
* <li>info.setOperation( operation )</li>
* <li>push newinfo</li>
* <li>oa.enter()</li>
* <li>dispatch to servant</li>
! * <li>oa.returnServant()</li> // XXX This is probably wrong: remove it.
* <li>oa.exit()</li>
* <li>pop info</li>
* </ol>
* </li>
* </ol>
--- 141,158 ----
* <li>push info (needed for the correct functioning of getInvocationServant)</li>
* <li>oa.getInvocationServant( info )</li>
* <li>pop info
* </ol>
* The info instance (which includes the Servant) is cached in the client subcontract.
! * <p>Then, on each invocation:
* <ol>
* <li>newinfo = copy of info (clone)</li>
* <li>info.setOperation( operation )</li>
* <li>push newinfo</li>
* <li>oa.enter()</li>
* <li>dispatch to servant</li>
! * <li>oa.returnServant()</li> <!-- XXX This is probably wrong: remove it. -->
* <li>oa.exit()</li>
* <li>pop info</li>
* </ol>
* </li>
* </ol>
< prev index next >