\relax \@writefile{toc}{\contentsline {chapter}{List of Figures}{vi}} \@writefile{toc}{\contentsline {chapter}{Abstract}{viii}} \@writefile{toc}{\contentsline {chapter}{Acknowledgments}{x}} \@writefile{toc}{\contentsline {chapter}{\numberline {1}Introduction}{1}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} \@writefile{toc}{\contentsline {section}{\numberline {1.1}Thesis Structure}{2}} \citation{Wil96} \citation{Mey88} \@writefile{toc}{\contentsline {chapter}{\numberline {2}Garbage Collection}{4}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} \newlabel{gc}{{2}{4}} \@writefile{toc}{\contentsline {section}{\numberline {2.1}Principle}{4}} \@writefile{toc}{\contentsline {subsection}{\numberline {2.1.1}Motivation for Garbage Collection}{4}} \citation{Str94} \@writefile{toc}{\contentsline {subsection}{\numberline {2.1.2}Definitions}{5}} \citation{Wil96} \@writefile{lof}{\contentsline {figure}{\numberline {2.1}{\ignorespaces System elements}}{6}} \newlabel{defineFig}{{2.1}{6}} \@writefile{toc}{\contentsline {subsection}{\numberline {2.1.3}The Two Phase Abstraction}{6}} \@writefile{toc}{\contentsline {subsection}{\numberline {2.1.4}Collector Completeness}{6}} \newlabel{techniques}{{2.2}{7}} \@writefile{toc}{\contentsline {section}{\numberline {2.2}Garbage Collection Techniques}{7}} \newlabel{counting}{{2.2.1}{7}} \@writefile{toc}{\contentsline {subsection}{\numberline {2.2.1}Reference Counting}{7}} \@writefile{lof}{\contentsline {figure}{\numberline {2.2}{\ignorespaces Create two new objects, and add a reference to one}}{8}} \newlabel{refCountStep1Fig}{{2.2}{8}} \@writefile{lof}{\contentsline {figure}{\numberline {2.3}{\ignorespaces All references to object {\em a} are deleted}}{8}} \newlabel{refCountStep3Fig}{{2.3}{8}} \@writefile{lof}{\contentsline {figure}{\numberline {2.4}{\ignorespaces Object {\em a} no longer has any references, and is therefore garbage}}{8}} \newlabel{refCountStep5Fig}{{2.4}{8}} \@writefile{toc}{\contentsline {subsubsection}{The Problem with Reference Counting}{9}} \@writefile{lof}{\contentsline {figure}{\numberline {2.5}{\ignorespaces Reference Counting with cyclic garbage}}{9}} \newlabel{refCountGarbageFig}{{2.5}{9}} \newlabel{tracing}{{2.2.2}{10}} \@writefile{toc}{\contentsline {subsection}{\numberline {2.2.2}Tracing Algorithms}{10}} \citation{Wil96} \@writefile{lof}{\contentsline {figure}{\numberline {2.6}{\ignorespaces Start marking from the root set}}{11}} \newlabel{markSweepStep1Fig}{{2.6}{11}} \@writefile{lof}{\contentsline {figure}{\numberline {2.7}{\ignorespaces Then sweep and remove unwanted objects}}{11}} \newlabel{markSweepStep3Fig}{{2.7}{11}} \@writefile{toc}{\contentsline {subsubsection}{The Problem with Tracing}{11}} \@writefile{toc}{\contentsline {subsection}{\numberline {2.2.3}Copy Collection}{12}} \citation{Orn96} \@writefile{lof}{\contentsline {figure}{\numberline {2.8}{\ignorespaces Start flipping objects into the other half of memory...}}{13}} \newlabel{copyCollectStep1Fig}{{2.8}{13}} \@writefile{lof}{\contentsline {figure}{\numberline {2.9}{\ignorespaces And ignore the rest when you are done}}{13}} \newlabel{copyCollectStep3Fig}{{2.9}{13}} \newlabel{SmallTalkGC}{{2.2.4}{13}} \@writefile{toc}{\contentsline {subsection}{\numberline {2.2.4}Smalltalk Garbage Collection}{13}} \@writefile{toc}{\contentsline {subsubsection}{Scavenger}{14}} \@writefile{toc}{\contentsline {subsubsection}{Incremental Garbage Collector}{14}} \citation{JVM97} \citation{JavaPL96} \@writefile{toc}{\contentsline {subsubsection}{Compacting Garbage Collector}{15}} \@writefile{toc}{\contentsline {subsubsection}{Global Garbage Collector}{15}} \@writefile{toc}{\contentsline {subsection}{\numberline {2.2.5}Java Garbage Collection}{15}} \@writefile{toc}{\contentsline {subsubsection}{The {\tt finalize} Method}{15}} \@writefile{toc}{\contentsline {subsubsection}{Running the Collection Mechanism}{16}} \@writefile{toc}{\contentsline {subsubsection}{Conclusion}{16}} \@writefile{toc}{\contentsline {chapter}{\numberline {3}Distributed Systems}{17}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} \newlabel{distSys}{{3}{17}} \@writefile{toc}{\contentsline {section}{\numberline {3.1}Remote Procedure Calls}{17}} \@writefile{lof}{\contentsline {figure}{\numberline {3.1}{\ignorespaces Remote Procedure Calls}}{18}} \newlabel{rpcFig}{{3.1}{18}} \citation{CORBA95} \citation{Vinoski97} \@writefile{toc}{\contentsline {section}{\numberline {3.2}The OMG's Distributed Computing Solution}{19}} \@writefile{toc}{\contentsline {subsection}{\numberline {3.2.1}Object Management Architecture}{19}} \@writefile{toc}{\contentsline {subsubsection}{Object Model}{19}} \@writefile{toc}{\contentsline {subsubsection}{Reference Model}{19}} \@writefile{lof}{\contentsline {figure}{\numberline {3.2}{\ignorespaces OMG Reference Model Architecture}}{20}} \newlabel{omgOmaFig}{{3.2}{20}} \citation{Vinoski97} \citation{x3h7} \newlabel{omgidl}{{3.2.2}{21}} \@writefile{toc}{\contentsline {subsection}{\numberline {3.2.2}OMG Interface Definition Language}{21}} \@writefile{toc}{\contentsline {subsubsection}{Modules}{21}} \newlabel{interfaces}{{3.2.2}{21}} \@writefile{toc}{\contentsline {subsubsection}{Interfaces}{21}} \citation{CORBA95} \citation{CORBA95} \@writefile{toc}{\contentsline {subsubsection}{Constructed Types}{22}} \@writefile{lof}{\contentsline {figure}{\numberline {3.3}{\ignorespaces An example of using the struct type in IDL}}{23}} \newlabel{structexample}{{3.3}{23}} \@writefile{lof}{\contentsline {figure}{\numberline {3.4}{\ignorespaces An example of using the union type in IDL}}{23}} \newlabel{unionexample}{{3.4}{23}} \@writefile{lof}{\contentsline {figure}{\numberline {3.5}{\ignorespaces An example of using the enumeration type in IDL}}{23}} \newlabel{enumexample}{{3.5}{23}} \@writefile{toc}{\contentsline {subsubsection}{Template Types}{23}} \citation{CORBA95} \@writefile{toc}{\contentsline {subsubsection}{Array Type}{24}} \newlabel{limitations}{{3.2.3}{24}} \@writefile{toc}{\contentsline {subsection}{\numberline {3.2.3}Limitations of OMG IDL}{24}} \citation{dsouza96,exton96,tai96} \citation{dsouza96} \@writefile{toc}{\contentsline {subsubsection}{Method overloading}{25}} \@writefile{lof}{\contentsline {figure}{\numberline {3.6}{\ignorespaces Illegal IDL code due to overloaded methods}}{25}} \newlabel{badIdl}{{3.6}{25}} \@writefile{toc}{\contentsline {subsubsection}{Behavioural Specification}{25}} \citation{dsouza96} \@writefile{lof}{\contentsline {figure}{\numberline {3.7}{\ignorespaces Illegal IDL code due to inheriting multiple methods with the same name}}{26}} \newlabel{badInheritedIdl}{{3.7}{26}} \@writefile{lof}{\contentsline {figure}{\numberline {3.8}{\ignorespaces Postconditions in ADL}}{26}} \newlabel{adl}{{3.8}{26}} \@writefile{lof}{\contentsline {figure}{\numberline {3.9}{\ignorespaces A simple, yet misleading interface definition}}{27}} \newlabel{idlshape}{{3.9}{27}} \@writefile{toc}{\contentsline {subsubsection}{Exceptions}{27}} \citation{schmidt97a} \@writefile{lof}{\contentsline {figure}{\numberline {3.10}{\ignorespaces A more complete interface definition}}{28}} \newlabel{newidlshape}{{3.10}{28}} \@writefile{toc}{\contentsline {subsubsection}{Quality of Service}{28}} \citation{schmidt97a} \@writefile{lof}{\contentsline {figure}{\numberline {3.11}{\ignorespaces Catching a derived exception}}{29}} \newlabel{propFig}{{3.11}{29}} \@writefile{lof}{\contentsline {figure}{\numberline {3.12}{\ignorespaces The primary interface for specifying CPU requirements using TAO}}{30}} \newlabel{tao}{{3.12}{30}} \@writefile{toc}{\contentsline {subsubsection}{Object Definition}{30}} \citation{CORBA95} \citation{Vinoski97} \@writefile{lof}{\contentsline {figure}{\numberline {3.13}{\ignorespaces Object definition in TINA-C's ODL}}{31}} \newlabel{odl}{{3.13}{31}} \@writefile{toc}{\contentsline {subsubsection}{Static Non-Blocking Requests}{31}} \@writefile{lof}{\contentsline {figure}{\numberline {3.14}{\ignorespaces Possible IDL support for static non-blocking calls}}{32}} \newlabel{didl}{{3.14}{32}} \@writefile{toc}{\contentsline {subsection}{\numberline {3.2.4}Evaluation of OMG IDL}{32}} \citation{CORBA95} \@writefile{toc}{\contentsline {subsection}{\numberline {3.2.5}Common Object Request Broker Architecture}{33}} \@writefile{lof}{\contentsline {figure}{\numberline {3.15}{\ignorespaces Common Object Request Broker Architecture}}{33}} \newlabel{corbaStructureFig}{{3.15}{33}} \@writefile{toc}{\contentsline {subsubsection}{Object Request Broker}{33}} \citation{Orb97} \@writefile{toc}{\contentsline {subsubsection}{Language Mappings}{34}} \@writefile{toc}{\contentsline {subsubsection}{Interface Repository}{34}} \@writefile{toc}{\contentsline {subsubsection}{Stubs And Skeletons}{34}} \newlabel{dii}{{3.2.5}{35}} \@writefile{toc}{\contentsline {subsubsection}{Dynamic Invocation Interface}{35}} \@writefile{toc}{\contentsline {subsubsection}{Object Adapter}{35}} \@writefile{toc}{\contentsline {section}{\numberline {3.3}Microsoft's Distributed Component Object Model}{35}} \@writefile{toc}{\contentsline {subsection}{\numberline {3.3.1}Component Object Model}{36}} \@writefile{toc}{\contentsline {subsection}{\numberline {3.3.2}Globally Unique Indentifiers}{36}} \@writefile{toc}{\contentsline {subsection}{\numberline {3.3.3}Microsoft's Interface Definition Language}{36}} \@writefile{lof}{\contentsline {figure}{\numberline {3.16}{\ignorespaces A basic MIDL interface}}{37}} \newlabel{midl}{{3.16}{37}} \@writefile{toc}{\contentsline {section}{\numberline {3.4}Java's Remote Method Invocation}{37}} \@writefile{lof}{\contentsline {figure}{\numberline {3.17}{\ignorespaces Java's Remote Method Invocation System}}{38}} \newlabel{javaRmiFig}{{3.17}{38}} \citation{Sha94} \@writefile{toc}{\contentsline {chapter}{\numberline {4}Distributed Garbage Collection}{39}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} \newlabel{distGC}{{4}{39}} \@writefile{toc}{\contentsline {section}{\numberline {4.1}Reference Counting}{39}} \@writefile{lof}{\contentsline {figure}{\numberline {4.1}{\ignorespaces Remote object {\em c} creates a reference to {\em a}}}{40}} \newlabel{distRefCountStep1Fig}{{4.1}{40}} \@writefile{lof}{\contentsline {figure}{\numberline {4.2}{\ignorespaces Then {\em c} sends {\em a} an increment message, and {\em b} sends it a decrement message soon after}}{40}} \newlabel{distRefCountStep3Fig}{{4.2}{40}} \@writefile{lof}{\contentsline {figure}{\numberline {4.3}{\ignorespaces The decrement message arrives first, and {\em c} has a reference to a non-existant object}}{41}} \newlabel{distRefCountStep5Fig}{{4.3}{41}} \@writefile{toc}{\contentsline {section}{\numberline {4.2}Reference Listing}{41}} \@writefile{toc}{\contentsline {section}{\numberline {4.3}Distributed Tracing}{42}} \newlabel{dcomgarbage}{{4.4}{42}} \@writefile{toc}{\contentsline {section}{\numberline {4.4}DCOM Garbage Collection}{42}} \citation{Digital116} \@writefile{toc}{\contentsline {section}{\numberline {4.5}The Soul Object Support System}{43}} \citation{CorbaGarbageRFP97} \citation{CorbaGarbageRFP97} \@writefile{toc}{\contentsline {section}{\numberline {4.6}Java's Remote Method Invocation}{44}} \@writefile{toc}{\contentsline {section}{\numberline {4.7}Garbage Collection in CORBA}{44}} \citation{Mey88} \citation{JavaLS96} \@writefile{toc}{\contentsline {chapter}{\numberline {5}Collecting Garbage in a CORBA Environment}{46}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} \newlabel{design}{{5}{46}} \@writefile{toc}{\contentsline {section}{\numberline {5.1}The Research Problem}{46}} \@writefile{lof}{\contentsline {figure}{\numberline {5.1}{\ignorespaces The ORB always maintains the reference}}{47}} \newlabel{corbaGarbageSteps}{{5.1}{47}} \@writefile{toc}{\contentsline {section}{\numberline {5.2}Objectives}{48}} \@writefile{toc}{\contentsline {section}{\numberline {5.3}Technical Design}{48}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.3.1}Overview}{48}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.3.2}A CORBA Garbage Collector}{48}} \@writefile{lof}{\contentsline {figure}{\numberline {5.2}{\ignorespaces An registered object is {\em checked} periodically, but will eventually have no references}}{50}} \newlabel{corbaCollectGarbageStep1Fig}{{5.2}{50}} \@writefile{lof}{\contentsline {figure}{\numberline {5.3}{\ignorespaces The collector calls {\tt dispose}, and the object can then be collected by it's language dependant collector}}{50}} \newlabel{corbaCollectGarbageStep2Fig}{{5.3}{50}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.3.3}Designing the Interfaces}{50}} \@writefile{lof}{\contentsline {figure}{\numberline {5.4}{\ignorespaces Checkable Object Interface}}{51}} \newlabel{CheckableInterface}{{5.4}{51}} \@writefile{lof}{\contentsline {figure}{\numberline {5.5}{\ignorespaces Collectable Object Interface}}{51}} \newlabel{CollectableInterface}{{5.5}{51}} \@writefile{lof}{\contentsline {figure}{\numberline {5.6}{\ignorespaces Garbage Collector Object Interface}}{52}} \newlabel{GarbageCollectorInterface}{{5.6}{52}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.3.4}IDL Support For Garbage Collection}{52}} \@writefile{lof}{\contentsline {figure}{\numberline {5.7}{\ignorespaces The processing of a GCIDL compiler}}{53}} \newlabel{gcidlCompiler}{{5.7}{53}} \@writefile{lof}{\contentsline {figure}{\numberline {5.8}{\ignorespaces Extended IDL Sample Code}}{54}} \newlabel{IDL-Example-GC}{{5.8}{54}} \@writefile{toc}{\contentsline {section}{\numberline {5.4}Implementing a Collector}{54}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.4.1}Transparency To The Programmer}{54}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.4.2}A Collection Scenario}{55}} \@writefile{lof}{\contentsline {figure}{\numberline {5.9}{\ignorespaces Clients referencing an account}}{55}} \newlabel{bankScenarioFig}{{5.9}{55}} \@writefile{toc}{\contentsline {subsubsection}{The Server}{56}} \@writefile{toc}{\contentsline {subsubsection}{The Client}{56}} \@writefile{toc}{\contentsline {subsubsection}{The Garbage Collector}{56}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.4.3}Testing The System}{57}} \@writefile{lof}{\contentsline {figure}{\numberline {5.10}{\ignorespaces Output of the sample program on the client side}}{57}} \newlabel{clientOutput}{{5.10}{57}} \@writefile{lof}{\contentsline {figure}{\numberline {5.11}{\ignorespaces Output of the sample program on the OrbixWeb daemon}}{57}} \newlabel{serverOutput}{{5.11}{57}} \@writefile{lof}{\contentsline {figure}{\numberline {5.12}{\ignorespaces Output when garbage collection runs}}{58}} \newlabel{gcOutput}{{5.12}{58}} \@writefile{toc}{\contentsline {chapter}{\numberline {6}Conclusion}{59}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} \newlabel{conclusion}{{6}{59}} \@writefile{toc}{\contentsline {section}{\numberline {6.1}Future Work}{60}} \@writefile{toc}{\contentsline {chapter}{Appendix\ A\ Sample Program Code}{61}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} \newlabel{appendix}{{A}{61}} \@writefile{toc}{\contentsline {section}{\numberline {A.1}Collector.idl}{61}} \@writefile{toc}{\contentsline {section}{\numberline {A.2}GarbageCollectorImp.java}{63}} \@writefile{toc}{\contentsline {section}{\numberline {A.3}AccountImp.java}{66}} \newlabel{tieAccount}{{A.4}{69}} \@writefile{toc}{\contentsline {section}{\numberline {A.4}\_tie\_Account.java}{69}} \@writefile{toc}{\contentsline {section}{\numberline {A.5}BankImp.java}{73}} \@writefile{toc}{\contentsline {section}{\numberline {A.6}BankServer.java}{74}} \@writefile{toc}{\contentsline {section}{\numberline {A.7}Client.java}{76}} \bibstyle{chicago} \bibdata{thesis} \bibcite{allen94}{\citeauthoryear {Allen and Garlan}{Allen and Garlan}{1994}} \bibcite{JavaPL96}{\citeauthoryear {Arnold and Gosling}{Arnold and Gosling}{1996}} \bibcite{auerbach94}{\citeauthoryear {Auerbach and Russell}{Auerbach and Russell}{1994}} \bibcite{Digital116}{\citeauthoryear {Birrell, Evers, Nelson, Oswicki, and Wobber}{Birrell et\penalty \@M \ al.}{1993}} \bibcite{Digital115}{\citeauthoryear {Birrell, Nelson, Oswicki, and Wobber}{Birrell et\penalty \@M \ al.}{1994}} \bibcite{bloomer92}{\citeauthoryear {Bloomer}{Bloomer}{1992}} \bibcite{DCOM96}{\citeauthoryear {Brown and Kindel}{Brown and Kindel}{1996}} \bibcite{dsouza96}{\citeauthoryear {D'Souza and Wills}{D'Souza and Wills}{1996}} \bibcite{exton96}{\citeauthoryear {Exton and Chen}{Exton and Chen}{1996}} \bibcite{watkins97}{\citeauthoryear {Exton, Watkins, and Thompson}{Exton et\penalty \@M \ al.}{1997}} \bibcite{freitag94}{\citeauthoryear {Freitag, Margaria, and Steffen}{Freitag et\penalty \@M \ al.}{1994}} \bibcite{JavaLS96}{\citeauthoryear {Gosling and Steele}{Gosling and Steele}{1996}} \bibcite{x3h7}{\citeauthoryear {{GTE Laboratories}}{{GTE Laboratories}}{1995}} \bibcite{hamilton94}{\citeauthoryear {Hamilton and Radia}{Hamilton and Radia}{1994}} \bibcite{Has97}{\citeauthoryear {Hasslinger}{Hasslinger}{1997}} \bibcite{Orb97}{\citeauthoryear {IONA Technologies}{IONA Technologies}{1997}} \bibcite{kande97}{\citeauthoryear {Kande, Wittig, and Tai}{Kande et\penalty \@M \ al.}{1997}} \bibcite{katyar94}{\citeauthoryear {Katiyar, Luckham, and Mitchell}{Katiyar et\penalty \@M \ al.}{1994}} \bibcite{kong90}{\citeauthoryear {Kong}{Kong}{1990}} \bibcite{Maffeis97}{\citeauthoryear {Landis and Maffeis}{Landis and Maffeis}{1997}} \bibcite{maffeis97b}{\citeauthoryear {Maffeis and Schmidt}{Maffeis and Schmidt}{1997}} \bibcite{Manola94}{\citeauthoryear {Manola and Mitchell}{Manola and Mitchell}{1994a}} \bibcite{x3h7b}{\citeauthoryear {Manola and Mitchell}{Manola and Mitchell}{1994b}} \bibcite{Mar96}{\citeauthoryear {Martin}{Martin}{1996}} \bibcite{Mey88}{\citeauthoryear {Meyer}{Meyer}{1988}} \bibcite{CORBA95}{\citeauthoryear {Object Management Group}{Object Management Group}{1997}} \bibcite{CorbaGarbageRFP97}{\citeauthoryear {{Object Management Group}}{{Object Management Group}}{1997}} \bibcite{OSF91}{\citeauthoryear {Open Software\penalty \@M \ Foundation}{Open Software\penalty \@M \ Foundation}{1991}} \bibcite{oracle96}{\citeauthoryear {{Oracle Corporation}}{{Oracle Corporation}}{1996}} \bibcite{Orn96}{\citeauthoryear {Ornstein}{Ornstein}{1996}} \bibcite{Pla94}{\citeauthoryear {Plainfoss^^e9}{Plainfoss^^e9}{1994}} \bibcite{Pla95}{\citeauthoryear {Plainfosse and Shapiro}{Plainfosse and Shapiro}{1995}} \bibcite{UML97}{\citeauthoryear {Rational Software Corporation}{Rational Software Corporation}{1997}} \bibcite{Roy97}{\citeauthoryear {Roy and Ewald}{Roy and Ewald}{1997}} \bibcite{sanker94}{\citeauthoryear {Sankar and Hayes}{Sankar and Hayes}{1994}} \bibcite{Sch97}{\citeauthoryear {Schmidt}{Schmidt}{1997}} \bibcite{Cleeland97}{\citeauthoryear {Schmidt and Cleeland}{Schmidt and Cleeland}{1997}} \bibcite{schmidt97a}{\citeauthoryear {Schmidt, Levine, and Mungee}{Schmidt et\penalty \@M \ al.}{1997}} \bibcite{schmidt95a}{\citeauthoryear {Schmidt and Vinoski}{Schmidt and Vinoski}{1995a}} \bibcite{schmidt95b}{\citeauthoryear {Schmidt and Vinoski}{Schmidt and Vinoski}{1995b}} \bibcite{Sha90}{\citeauthoryear {Shapiro, Gruber, and Plainfoss^^e9}{Shapiro et\penalty \@M \ al.}{1990}} \bibcite{Sha94}{\citeauthoryear {Shapiro, Plainfosse, Ferreira, and Amsaleg}{Shapiro et\penalty \@M \ al.}{1994}} \bibcite{Str94}{\citeauthoryear {Stroustrup}{Stroustrup}{1994}} \bibcite{JVM97}{\citeauthoryear {{Sun Microsystems, Inc.}}{{Sun Microsystems, Inc.}}{1995}} \bibcite{JavaRmiWhite97}{\citeauthoryear {{Sun Microsystems, Inc.}}{{Sun Microsystems, Inc.}}{1997}} \bibcite{tai96}{\citeauthoryear {Tai}{Tai}{1996}} \bibcite{tai97}{\citeauthoryear {Tai and Busse}{Tai and Busse}{1997}} \bibcite{tina96}{\citeauthoryear {{Telecommunications Information Networking Architecture Consortium}}{{Telecommunications Information Networking Architecture Consortium}}{1996}} \bibcite{Ven96}{\citeauthoryear {Venners}{Venners}{1996}} \bibcite{Vinoski97}{\citeauthoryear {Vinoski}{Vinoski}{1997}} \bibcite{wegner97}{\citeauthoryear {Wegner}{Wegner}{1997}} \bibcite{Wil96}{\citeauthoryear {Wilson}{Wilson}{1996}} \citation{*}