The present invention relates generally to data processing systems and, more particularly, to passing serialized versions of objects in a distributed system.
Distributed systems can be made up of various components, including both hardware and software. A distributed system (1) allows its users to share services and resources over a network of many devices; (2) provides programmers with tools and programming patterns that allow development of robust, secured distributed systems; and (3) simplifies the task of administering the distributed system.
A distributed system can be implemented using an object-oriented programming language, such as Java™. The Java™ programming language is typically compiled into a platform-independent format, using a bytecode instruction set, which can be executed on any platform supporting the Java™ virtual machine. The Java™ programming language is described in greater detail in The Java™ Language Specification by James Gosling, Bill Joy, and Guy Steele, Addison-Wesley, 1996, which is incorporated herein by reference. Java™ and Jave-based trademarks are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and other countries.
Distributed systems require that programs running in different address spaces be able to communicate with each other. In a system using an object-oriented programming language, such as the Java™ programming language, this communication can be achieved by passing an “object,” which represents an item or instance manipulated by the system, from one program to another. In such a system, a “class” provides a template for the creation of objects having characteristics of that class. The objects in each class share certain characteristics or attributes determined by the class. A class thus defines the type of an object. Objects are typically created dynamically during system operation. Methods associated with a class are generally invoked on the objects of the same class or subclass.
In a Java™ distributed system, an object is referred to as being remote when its methods can be invoked from another address space, typically a Java™ virtual machine on a different computer. A remote object is described by one or more remote interfaces, which are Java™ interfaces that declare the methods of the remote object. Remote Method Invocation (RMI) is used to invoke a method of a remote interface on a remote object. RMI is explained in, for example, the Remote Method Invocation Specification, Sun Microsystems, Inc. (1997), which is incorporated herein by reference.
As part of RMI, Java™ objects are passed between a client and a server. Before being passed, a Java™ object is converted into a serialized representation of itself. The serialized representation of the object contains enough information to enable the recipient to identify and verify the Java™ class from which the contents of the object were saved and to restore the contents to a new instance. A serialized object contains two main parts: the object data and a class descriptor. The class descriptor describes the content and format of the object data.
When a serialized object is passed, the object data and the class descriptor are transmitted across the network. Although the object data may change over time, the class descriptor remains the same. Therefore, multiple remote method calls can result in passing the same class descriptor multiple times to a recipient who already has a copy of the class descriptor. This is expensive in terms of processing time as well as wasted network bandwidth. It is therefore desirable to reduce the number of times that a class descriptor is sent to a recipient.
Systems and methods consistent with the present invention reduce the number of redundant class descriptors that are sent during remote method calls by using serialization contexts. “Serialization contexts” are dictionary objects that map a class descriptor to a corresponding integer handle and, on the receiving end, map the integer handle back to the class descriptor. When possible, the integer handle, rather than the full class descriptor, is passed, saving processing time in RMI calls.
A method consistent with the present invention passes a first object and a second object, both instances of a class, in distinct remote method calls in a distributed system. The first object is passed from a sender to a recipient with a descriptor of the class and a handle corresponding to the descriptor. The handle and the descriptor are stored by the recipient. The second object is then passed from the sender to the recipient with the handle, and the recipient uses the handle to determine the descriptor.
This invention is pointed out with particularity in the appended claims. The above and further advantages of this invention may be better understood by referring to the following description taken in conjunction with the accompanying drawings, in which:
A system consistent with the present invention reduces the number of redundant class descriptors that are sent during remote method calls by using serialization contexts. “Serialization contexts” are dictionary objects that map a class descriptor to a corresponding integer handle. When possible, the integer handle, rather than the full class descriptor, is passed, saving processing time in RMI calls.
Client computer 102 includes a memory 108, a secondary storage device 110, a central processing unit (CPU) 112, an input device 114, and a video display 116. The memory 108 includes a Java™ runtime system 118. The Java™ runtime system 118 includes a Java™ virtual machine 120, and a Java™ remote method invocation (RMI) system 122. The RMI system 122 contains one or more serialization contexts 124. Memory 108 also includes a program 126 running on client computer 102.
Server computer 104 includes a memory 128, a secondary storage device 130, a central processing unit (CPU) 132 an input device 134, and a video display 136. The memory 128 includes a Java™ runtime system 138. The Java™ runtime system 138 includes a Java™ virtual machine 140, and the Java™ remote method invocation (RMI) system 142. The RMI system 142 contains one or more serialization contexts 144. Memory 128 also includes a program 146 running on server computer 104, and one or more objects 148.
Using RMI, objects can be passed between client computer 102 and server computer 104. For example, a program 146 running on client computer 102 can invoke a method on an object 148 stored in the memory 130 of server computer 104. Client computer 102 would use RMI system 122 to convert the method call, including an identification of the remote method and any parameters, into a byte stream that is sent to server computer 104 via network 106. Server computer 104, upon receiving the byte stream, would use its RMI system to convert the byte stream into executable bytecode and initiate the invocation of the method on the remote object. If the method results in a return value, server computer 104 would convert the return value to a byte stream using its RMI system, and transmit the byte stream to the client computer 102.
The byte streams contain serialized versions of Java™ objects, e.g. parameters or return values. A serialized object contains two main parts: the object data and a class descriptor. The class descriptor describes the content and format of the object data. Object serialization is explained in, for example, the Java™ Object Serialization Specification, which is incorporated herein by reference.
Within a single remote method call, a class descriptor is sent with the first object of that type that is serialized, subsequent objects of that type in the same remote method call refer to the class descriptor with a “back reference” (i.e., an integer handle).
Serialization Contexts
In a serialized object, the class descriptor provides the full name of the class and its serialization ID, which uniquely identifies the class. The serialization ID is a 64-bit hash of the class name, interface class names, methods, and fields. Each class descriptor is an instance of the Java™ class ObjectStreamClass, defined as follows:
Serialization contexts can be used to pass the class descriptors of serialized objects. As explained above, serialization contexts are dictionary objects that map a class descriptor to a corresponding integer handle. When possible, the integer handle, rather than the full class descriptor, is passed, saving processing time in RMI calls.
RMI system 122 of client computer 102 contains serialization context 124, which consists of outgoing handle table 202 and incoming handle table 204, and RMI system 142 of server computer 104 contains serialization context 144, which consists of outgoing handle table 206 and incoming handle table 208. Each incoming handle table has one or more entries including a handle and a class descriptor. Each outgoing handle table has one or more entries, the entries including a flag, a handle, and a class descriptor. The flag in each outgoing handle table entry is a boolean value indicating whether the corresponding handle/class descriptor pair is “committed.” If a handle/class descriptor pair in an outgoing handle table is committed, it is known to be saved in the corresponding incoming handle table of the serialization context pair. For example, if the committed flag in an entry in outgoing handle table 202 is true, then the corresponding class descriptor/handle pair has been stored in incoming handle table 208. If the committed flag is false, incoming handle table 208 may or may not contain the corresponding class descriptor/handle pair. The use of the committed flag will be described in further detail below with reference to
When the sender wishes to send a class descriptor to the recipient, the sender checks to see if the descriptor is already defined in the outgoing handle table 202 of serialization context 124 (step 304). If so, and if the committed flag is true, as detailed with reference to one embodiment in
Handshake
If the recipient does not have the serialization context corresponding to the context ID received, or if the recipient receives a null ID, the recipient creates a new serialization context (step 414) and sends the new context ID to the sender (step 416). The sender then knows that, if it receives the same context ID that it sent, it can use the proposed serialization context. Otherwise, the sender should create a new serialization context with the new context ID and use that instead.
Using Committed Flags to Enhance Two-Way Communications
To use the committed flag in this way, the sender first checks to see if the class descriptor is in the outgoing handle table 202 of serialization context 124 (step 502). If so, then the sender checks the value of the corresponding committed flag (step 504). If the committed flag is true, the sender can send the handle, knowing that the class descriptor/handle pair is stored in the recipient's incoming handle table 208 (step 506).
If the class descriptor is not in the outgoing handle table 202 of serialization context 124, the sender creates a new entry, with a new handle and a committed flag set to false, in outgoing handle table 202 (step 508) and sends the new handle and class descriptor to the recipient (step 510). The recipient stores the new class descriptor/handle pair in incoming handle table 208 (step 512). The sender would also send both the class descriptor and the handle to the recipient if the class descriptor is in outgoing handle table 202, but the committed flag is false (steps 510 & 512). The recipient would simply discard any duplicate handle/class descriptor pairs received.
Handle Acknowledgment-Arguments
To rely on the committed flags as described above, there must be a way to update the flags in both the sender's outgoing handle table and the recipient's outgoing handle table. This updating can be done using the arguments sent from the sender to the recipient and the return values returned from the recipient to the sender.
When an argument, including data and a class descriptor/handle pair, is sent from a sender (e.g., program 126 running on client computer 102) to a recipient (e.g., program 146 running on server computer 104), the recipient uses the class descriptor or handled to recreate the argument data and carry out the method call.
As part of this process, the recipient enters any new handle/class descriptor pairs into the incoming handle table 208. In one embodiment, this updating occurs before the method call can return successfully to the client. Therefore, when the remote method call is successfully returned to the original sender, the handle/class descriptor pair is implicitly acknowledged, and the sender can set the corresponding committed flag in the outgoing handle table 202 to true.
Handle Acknowledgment-Return Values
Class descriptors used by the recipient (e.g., program 126 running on server computer 104) to send return values to the sender (e.g., program 146 running on client computer 102) require an explicit acknowledgment. The recipient has no way of knowing whether the sender successfully stored the handle/class descriptor pair sent with the return value in the incoming handle table 204. To acknowledge that the incoming handle table 204 has been updated, the sender sends an explicit acknowledgment of its successful receipt of the handle/class descriptor pair with its next call to the recipient. The acknowledgment can be delayed in this way because the recipient only needs the acknowledgment if there are future communications between the sender and the recipient.
Garbage Collection
Serialization contexts can get quite large. If a pair of tables is no longer needed, memory space can be saved by deleting the tables. Preferably, this “garbage collection” is made possible by using the globally unique ID codes corresponding to each serialization context pair. A table that maps serialization contexts to their unique ID codes can be maintained by, for example, RMI system 124 or RMI system 144. Space in this table is “leased,” meaning that after a set amount of time has passed, a serialization context/unique ID code pairing is deleted from the table. Each time a serialization context is accessed by an object, e.g., a program running on client computer 102 or server computer 104, the lease time is reset. Therefore, serialization contexts will automatically be available for a set amount of time between uses. After the set amount of time expires and a serialization context is deleted, a new table is created when a client wishes to communicate with the server, as described in
Other embodiments of the invention will be apparent to those skilled in the art from consideration of the specification and practice of the invention disclosed herein. It is intended that the specification and examples be considered as exemplary only, with a true scope and spirit of the invention being indicated by the following claims.
Number | Name | Date | Kind |
---|---|---|---|
4430699 | Segarra et al. | Feb 1984 | A |
4491946 | Kryskow, Jr. et al. | Jan 1985 | A |
4558413 | Schmidt et al. | Dec 1985 | A |
4567359 | Lockwood | Jan 1986 | A |
4713806 | Oberlander et al. | Dec 1987 | A |
4800488 | Agrawal et al. | Jan 1989 | A |
4809160 | Mahon et al. | Feb 1989 | A |
4819233 | Delucia et al. | Apr 1989 | A |
4823122 | Mann et al. | Apr 1989 | A |
4939638 | Stephenson et al. | Jul 1990 | A |
4956773 | Saito et al. | Sep 1990 | A |
4992940 | Dworkin | Feb 1991 | A |
5088036 | Ellis et al. | Feb 1992 | A |
5101346 | Ohtsuki | Mar 1992 | A |
5109486 | Seymour | Apr 1992 | A |
5187787 | Skeen et al. | Feb 1993 | A |
5218699 | Brandle et al. | Jun 1993 | A |
5253165 | Leiseca et al. | Oct 1993 | A |
5257369 | Skeen et al. | Oct 1993 | A |
5293614 | Ferguson et al. | Mar 1994 | A |
5297283 | Kelly, Jr. et al. | Mar 1994 | A |
5303042 | Lewis et al. | Apr 1994 | A |
5307490 | Davidson et al. | Apr 1994 | A |
5311591 | Fischer | May 1994 | A |
5319542 | King, Jr. et al. | Jun 1994 | A |
5327559 | Priven et al. | Jul 1994 | A |
5339430 | Lundin et al. | Aug 1994 | A |
5339435 | Lubkin et al. | Aug 1994 | A |
5341477 | Pitkin et al. | Aug 1994 | A |
5386568 | Wold et al. | Jan 1995 | A |
5390328 | Frey et al. | Feb 1995 | A |
5392280 | Zheng | Feb 1995 | A |
5423042 | Jalili et al. | Jun 1995 | A |
5440744 | Jacobson et al. | Aug 1995 | A |
5446901 | Owicki et al. | Aug 1995 | A |
5448740 | Kiri et al. | Sep 1995 | A |
5452459 | Drury et al. | Sep 1995 | A |
5455952 | Gjovaag | Oct 1995 | A |
5459837 | Caccavale | Oct 1995 | A |
5471629 | Risch | Nov 1995 | A |
5475792 | Stanford et al. | Dec 1995 | A |
5475817 | Waldo et al. | Dec 1995 | A |
5475840 | Nelson et al. | Dec 1995 | A |
5481721 | Serlet et al. | Jan 1996 | A |
5491791 | Glowny et al. | Feb 1996 | A |
5504921 | Dev et al. | Apr 1996 | A |
5506984 | Miller | Apr 1996 | A |
5511196 | Shackelford et al. | Apr 1996 | A |
5511197 | Hill et al. | Apr 1996 | A |
5524244 | Robinson et al. | Jun 1996 | A |
5544040 | Gerbaulet | Aug 1996 | A |
5548724 | Akizawa et al. | Aug 1996 | A |
5548726 | Pettus | Aug 1996 | A |
5553282 | Parrish et al. | Sep 1996 | A |
5555367 | Premerlani et al. | Sep 1996 | A |
5555427 | Aoe et al. | Sep 1996 | A |
5557798 | Skeen et al. | Sep 1996 | A |
5560003 | Nilsen et al. | Sep 1996 | A |
5561785 | Blandy et al. | Oct 1996 | A |
5577231 | Scalzi et al. | Nov 1996 | A |
5592375 | Salmon et al. | Jan 1997 | A |
5594921 | Pettus | Jan 1997 | A |
5603031 | White et al. | Feb 1997 | A |
5617537 | Yamada et al. | Apr 1997 | A |
5628005 | Hurvig | May 1997 | A |
5640564 | Hamilton et al. | Jun 1997 | A |
5644720 | Boll et al. | Jul 1997 | A |
5644768 | Periwal et al. | Jul 1997 | A |
5652888 | Burgess | Jul 1997 | A |
5655148 | Richman et al. | Aug 1997 | A |
5659751 | Heninger | Aug 1997 | A |
5664110 | Green et al. | Sep 1997 | A |
5664111 | Nahan et al. | Sep 1997 | A |
5664191 | Davidson et al. | Sep 1997 | A |
5666493 | Wojcik et al. | Sep 1997 | A |
5671225 | Hooper et al. | Sep 1997 | A |
5671279 | Elgamal | Sep 1997 | A |
5675796 | Hodges et al. | Oct 1997 | A |
5675797 | Chung et al. | Oct 1997 | A |
5680573 | Rubin et al. | Oct 1997 | A |
5680617 | Gough et al. | Oct 1997 | A |
5682534 | Kapoor et al. | Oct 1997 | A |
5684955 | Meyer et al. | Nov 1997 | A |
5689709 | Corbett et al. | Nov 1997 | A |
5694551 | Doyle et al. | Dec 1997 | A |
5706435 | Barbara et al. | Jan 1998 | A |
5706502 | Foley et al. | Jan 1998 | A |
5710887 | Chelliah et al. | Jan 1998 | A |
5715314 | Payne et al. | Feb 1998 | A |
5721825 | Lawson et al. | Feb 1998 | A |
5721832 | Westrope et al. | Feb 1998 | A |
5724540 | Kametani | Mar 1998 | A |
5724588 | Hill et al. | Mar 1998 | A |
5727048 | Hiroshima et al. | Mar 1998 | A |
5727145 | Nessett et al. | Mar 1998 | A |
5729594 | Klingman | Mar 1998 | A |
5737607 | Hamilton et al. | Apr 1998 | A |
5742768 | Gennaro et al. | Apr 1998 | A |
5745678 | Herzberg et al. | Apr 1998 | A |
5745695 | Gilchrist et al. | Apr 1998 | A |
5745703 | Cejtin et al. | Apr 1998 | A |
5745755 | Covey | Apr 1998 | A |
5748897 | Katiyar | May 1998 | A |
5754849 | Dyer et al. | May 1998 | A |
5754977 | Gardner et al. | May 1998 | A |
5757925 | Faybishenko | May 1998 | A |
5758077 | Danahy et al. | May 1998 | A |
5758328 | Giovannoli | May 1998 | A |
5758344 | Prasad et al. | May 1998 | A |
5761507 | Govett | Jun 1998 | A |
5761656 | Ben-Shachar | Jun 1998 | A |
5764897 | Khalidi | Jun 1998 | A |
5764915 | Heimsoth et al. | Jun 1998 | A |
5764982 | Madduri | Jun 1998 | A |
5768532 | Megerian | Jun 1998 | A |
5774551 | Wu et al. | Jun 1998 | A |
5774729 | Carney et al. | Jun 1998 | A |
5778179 | Kanai et al. | Jul 1998 | A |
5778187 | Monteiro et al. | Jul 1998 | A |
5778228 | Wei | Jul 1998 | A |
5778368 | Hogan et al. | Jul 1998 | A |
5784560 | Kingdon et al. | Jul 1998 | A |
5787425 | Bigus | Jul 1998 | A |
5787431 | Shaughnessy | Jul 1998 | A |
5790548 | Sistanizadeh et al. | Aug 1998 | A |
5790677 | Fox et al. | Aug 1998 | A |
5794207 | Walker et al. | Aug 1998 | A |
5799173 | Gossler et al. | Aug 1998 | A |
5802367 | Held et al. | Sep 1998 | A |
5805805 | Civanlar et al. | Sep 1998 | A |
5806042 | Kelly et al. | Sep 1998 | A |
5808911 | Tucker et al. | Sep 1998 | A |
5809144 | Sirbu et al. | Sep 1998 | A |
5809507 | Cavanaugh, III | Sep 1998 | A |
5812819 | Rodwin et al. | Sep 1998 | A |
5813013 | Shakib et al. | Sep 1998 | A |
5815149 | Mutschler, III et al. | Sep 1998 | A |
5815709 | Waldo et al. | Sep 1998 | A |
5815711 | Sakamoto et al. | Sep 1998 | A |
5818448 | Katiyar | Oct 1998 | A |
5829022 | Watanabe et al. | Oct 1998 | A |
5832219 | Pettus | Nov 1998 | A |
5832529 | Wollrath et al. | Nov 1998 | A |
5832593 | Wurst et al. | Nov 1998 | A |
5835737 | Sand et al. | Nov 1998 | A |
5842018 | Atkinson et al. | Nov 1998 | A |
5844553 | Hao et al. | Dec 1998 | A |
5845090 | Collins, III et al. | Dec 1998 | A |
5845129 | Wendorf et al. | Dec 1998 | A |
5850442 | Muftic | Dec 1998 | A |
5860004 | Fowlow et al. | Jan 1999 | A |
5860153 | Matena et al. | Jan 1999 | A |
5864862 | Kriens et al. | Jan 1999 | A |
5864866 | Henckel et al. | Jan 1999 | A |
5872928 | Lewis et al. | Feb 1999 | A |
5872973 | Mitchell et al. | Feb 1999 | A |
5875335 | Beard | Feb 1999 | A |
5878411 | Burroughs et al. | Mar 1999 | A |
5884024 | Lim et al. | Mar 1999 | A |
5884079 | Furusawa | Mar 1999 | A |
5887134 | Ebrahim | Mar 1999 | A |
5889951 | Lombardi | Mar 1999 | A |
5890158 | House et al. | Mar 1999 | A |
5892904 | Atkinson et al. | Apr 1999 | A |
5915112 | Boutcher | Jun 1999 | A |
5925108 | Johnson et al. | Jul 1999 | A |
5933497 | Beetcher et al. | Aug 1999 | A |
5933647 | Aronberg et al. | Aug 1999 | A |
5935249 | Stern et al. | Aug 1999 | A |
5940827 | Hapner et al. | Aug 1999 | A |
5944793 | Islam et al. | Aug 1999 | A |
5946485 | Weeren et al. | Aug 1999 | A |
5946694 | Copeland et al. | Aug 1999 | A |
5951652 | Ingrassia, Jr. et al. | Sep 1999 | A |
5956509 | Kevner | Sep 1999 | A |
5961582 | Gaines | Oct 1999 | A |
5963924 | Williams et al. | Oct 1999 | A |
5966531 | Skeen et al. | Oct 1999 | A |
5969967 | Aahlad et al. | Oct 1999 | A |
5974201 | Chang et al. | Oct 1999 | A |
5978484 | Apperson et al. | Nov 1999 | A |
5978773 | Hudetz et al. | Nov 1999 | A |
5982773 | Nishimura et al. | Nov 1999 | A |
5987506 | Carter et al. | Nov 1999 | A |
5991808 | Broder et al. | Nov 1999 | A |
5996075 | Matena | Nov 1999 | A |
5999179 | Kekic et al. | Dec 1999 | A |
5999988 | Pelegri-Llopart et al. | Dec 1999 | A |
6003050 | Silver et al. | Dec 1999 | A |
6003065 | Yan et al. | Dec 1999 | A |
6003763 | Gallagher et al. | Dec 1999 | A |
6009103 | Woundy | Dec 1999 | A |
6009413 | Webber et al. | Dec 1999 | A |
6009464 | Hamilton et al. | Dec 1999 | A |
6014686 | Elnozahy et al. | Jan 2000 | A |
6016496 | Roberson | Jan 2000 | A |
6016516 | Horikiri | Jan 2000 | A |
6018619 | Allard et al. | Jan 2000 | A |
6023586 | Gaisford et al. | Feb 2000 | A |
6026414 | Anglin | Feb 2000 | A |
6031977 | Pettus | Feb 2000 | A |
6032151 | Arnold et al. | Feb 2000 | A |
6034925 | Wehmeyer | Mar 2000 | A |
6044381 | Boothby et al. | Mar 2000 | A |
6052761 | Hornung et al. | Apr 2000 | A |
6055562 | Devarakonda et al. | Apr 2000 | A |
6058381 | Nelson | May 2000 | A |
6058383 | Narasimhalu et al. | May 2000 | A |
6061699 | DiCecco et al. | May 2000 | A |
6067575 | McManis et al. | May 2000 | A |
6078655 | Fahrer et al. | Jun 2000 | A |
6085255 | Vincent et al. | Jul 2000 | A |
6092194 | Touboul | Jul 2000 | A |
6093216 | Adl-Tabatabai et al. | Jul 2000 | A |
6101528 | Butt | Aug 2000 | A |
6104716 | Crichton et al. | Aug 2000 | A |
6108346 | Doucette et al. | Aug 2000 | A |
6134603 | Jones et al. | Oct 2000 | A |
6154844 | Touboul et al. | Nov 2000 | A |
6157960 | Kaminsky et al. | Dec 2000 | A |
6182083 | Scheifler et al. | Jan 2001 | B1 |
6185602 | Bayrakeri | Feb 2001 | B1 |
6185611 | Waldo et al. | Feb 2001 | B1 |
6189046 | Moore et al. | Feb 2001 | B1 |
6192044 | Mack | Feb 2001 | B1 |
6199068 | Carpenter | Mar 2001 | B1 |
6199116 | May et al. | Mar 2001 | B1 |
6212578 | Racicot et al. | Apr 2001 | B1 |
6216158 | Luo et al. | Apr 2001 | B1 |
6219675 | Pal et al. | Apr 2001 | B1 |
6226746 | Scheifler | May 2001 | B1 |
6243716 | Waldo et al. | Jun 2001 | B1 |
6243814 | Matena | Jun 2001 | B1 |
6247091 | Lovett | Jun 2001 | B1 |
6253256 | Wollrath et al. | Jun 2001 | B1 |
6263350 | Wollrath et al. | Jul 2001 | B1 |
6263379 | Atkinson et al. | Jul 2001 | B1 |
6272559 | Jones et al. | Aug 2001 | B1 |
6282295 | Young et al. | Aug 2001 | B1 |
6282568 | Sondur et al. | Aug 2001 | B1 |
6282581 | Moore et al. | Aug 2001 | B1 |
6292934 | Davidson et al. | Sep 2001 | B1 |
6301613 | Ahlstrom et al. | Oct 2001 | B1 |
6321275 | McQuistan et al. | Nov 2001 | B1 |
6327677 | Garg et al. | Dec 2001 | B1 |
6339783 | Horikiri | Jan 2002 | B1 |
6343308 | Marchesseault | Jan 2002 | B1 |
6351735 | Deaton et al. | Feb 2002 | B1 |
6360266 | Pettus | Mar 2002 | B1 |
6363409 | Hart et al. | Mar 2002 | B1 |
6385643 | Jacobs et al. | May 2002 | B1 |
6408342 | Moore et al. | Jun 2002 | B1 |
6418468 | Ahlstrom et al. | Jul 2002 | B1 |
6564174 | Ding et al. | May 2003 | B1 |
6578074 | Bahlmann | Jun 2003 | B1 |
6603772 | Moussavi et al. | Aug 2003 | B1 |
6604127 | Murphy et al. | Aug 2003 | B2 |
6604140 | Beck et al. | Aug 2003 | B1 |
6654793 | Wollrath et al. | Nov 2003 | B1 |
6704803 | Wilson et al. | Mar 2004 | B2 |
6757262 | Weisshaar et al. | Jun 2004 | B1 |
6757729 | Devarakonda et al. | Jun 2004 | B1 |
6801940 | Moran et al. | Oct 2004 | B1 |
6801949 | Bruck et al. | Oct 2004 | B1 |
6804711 | Dugan et al. | Oct 2004 | B1 |
20010011350 | Zabetian | Aug 2001 | A1 |
20020059212 | Takagi | May 2002 | A1 |
20020073019 | Deaton | Jun 2002 | A1 |
20020111814 | Barnett et al. | Aug 2002 | A1 |
20030005132 | Nguyen et al. | Jan 2003 | A1 |
20030084204 | Wollrath et al. | May 2003 | A1 |
20030191842 | Murphy et al. | Oct 2003 | A1 |
20030191984 | Flaherty et al. | Oct 2003 | A1 |
Number | Date | Country |
---|---|---|
0 300 516 | Jan 1989 | EP |
0 351 536 | Jan 1990 | EP |
0 384 339 | Aug 1990 | EP |
0 472 874 | Mar 1992 | EP |
0 474 340 | Mar 1992 | EP |
497 022 | Aug 1992 | EP |
0 555 997 | Aug 1993 | EP |
0 565 849 | Oct 1993 | EP |
0 569 195 | Nov 1993 | EP |
0 625 750 | Nov 1994 | EP |
0 635 792 | Jan 1995 | EP |
0 651 328 | May 1995 | EP |
0 660 231 | Jun 1995 | EP |
0 697 655 | Feb 1996 | EP |
0 718 761 | Jun 1996 | EP |
0 767 432 | Apr 1997 | EP |
0 778 520 | Jun 1997 | EP |
0 794 493 | Sep 1997 | EP |
0 803 810 | Oct 1997 | EP |
0 803 811 | Oct 1997 | EP |
0 805 393 | Nov 1997 | EP |
0 810 524 | Dec 1997 | EP |
0 817 020 | Jan 1998 | EP |
0 817 022 | Jan 1998 | EP |
0 817 025 | Jan 1998 | EP |
0 836 140 | Apr 1998 | EP |
2 253 079 | Aug 1992 | GB |
2 262 825 | Jun 1993 | GB |
2 305 087 | Mar 1997 | GB |
11-45187 | Feb 1999 | JP |
WO9207335 | Apr 1992 | WO |
WO 9209948 | Jun 1992 | WO |
WO9325962 | Dec 1993 | WO |
WO 9403855 | Feb 1994 | WO |
WO 9603692 | Feb 1996 | WO |
WO9610787 | Apr 1996 | WO |
WO9618947 | Jun 1996 | WO |
WO9624099 | Aug 1996 | WO |
WO9802814 | Jan 1998 | WO |
WO9804971 | Feb 1998 | WO |
WO9917194 | Apr 1999 | WO |
WO0113228 | Feb 2001 | WO |
WO0186394 | Nov 2001 | WO |
WO0190903 | Nov 2001 | WO |
Number | Date | Country | |
---|---|---|---|
20020124118 A1 | Sep 2002 | US |