throbber
(12) United States Patent
`Madany et al.
`
`I lllll llllllll Ill lllll lllll lllll lllll lllll 111111111111111111111111111111111
`US006493870Bl
`US 6,493,870 Bl
`*Dec. 10, 2002
`
`(10) Patent No.:
`(45) Date of Patent:
`
`(54) METHODS AND APPARATUS FOR
`PACKAGING A PROGRAM FOR REMOTE
`EXECUTION
`
`(75)
`
`Inventors: Peter W. Madany, Fremont, CA (US);
`Richard Tuck, San Francisco, CA
`(US); Nedim Fresko, San Francisco,
`CA (US); Hania Gajewska, Woodside,
`CA(US)
`
`(73) Assignee: Sun Microsystems, Inc., Palo Alto, CA
`(US)
`
`( *) Notice:
`
`Subject to any disclaimer, the term of this
`patent is extended or adjusted under 35
`U.S.C. 154(b) by 0 days.
`
`This patent is subject to a terminal dis(cid:173)
`claimer.
`
`(21) Appl. No.: 09/044,900
`
`(22) Filed:
`
`Mar. 20, 1998
`
`Int. Cl.7 .................................................. G06F 9/44
`(51)
`(52) U.S. Cl. ....................... 717/165; 717/166; 717/107;
`709/332; 709/217; 709/219
`(58) Field of Search ................................. 709/328, 332,
`709/217, 219; 717/165, 166, 167, 107,
`106
`
`(56)
`
`References Cited
`
`U.S. PATENT DOCUMENTS
`5,519,866 A * 5/1996 Lawrence et al.
`.......... 717/162
`5,553,290 A * 9/1996 Calvert et al. .............. 717/121
`5,590,331 A * 12/1996 Lewis et al. ................ 717/114
`5,603,031 A
`2/1997 White et al.
`5,619,710 A * 4/1997 Travis et al. ................ 709/203
`5,630,066 A * 5/1997 Gosling ...................... 709/221
`5,666,501 A * 9/1997 Jones et al. ................. 345/748
`5,727,147 A * 3/1998 van Hoff .................... 709/200
`5,790,796 A * 8/1998 Sadowsky ................... 709/221
`
`5,835,777 A * 11/1998 Staelin ....................... 717/175
`5,845,119 A * 12/1998 Kozuka et al.
`............. 717/107
`5,901,314 A * 5/1999 Boehme et al. ............. 707/100
`5 ,911,071 A * 6/1999 Jordan ........................ 709 /315
`5,950,010 A * 9/1999 Hesse et al. ................ 717/178
`5,966,702 A * 10/1999 Fresko et al. .................. 707/1
`5,991,535 A * 11/1999 Fowlow et al. ............. 717/107
`6,029,207 A * 2/2000 Heninger .................... 709/331
`6,065,046 A * 5/2000 Feinberg et al. ............ 709/216
`6,083,277 A * 7/2000 Fowlow et al. ............. 345/769
`6,105,074 A * 8/2000 Yokote ....................... 709/328
`6,112,025 A * 8/2000 Mulchandani et al. ...... 709/331
`6,141,724 A * 10/2000 Butler et al. ................ 717/107
`6,199,196 Bl * 3/2001 Madany et al. ............. 717/165
`6,247,175 Bl * 6/2001 Ledford et al. ............. 717/107
`6,279,030 Bl * 8/2001 Britton et al.
`................ 707/10
`6,336,122 Bl * 1/2002 Lee et al.
`................... 707/204
`6,339,841 Bl * 1/2002 Merrick et al. ............. 717/166
`6,349,344 Bl * 2/2002 Sauntry et al.
`............. 709/332
`
`OTHER PUBLICATIONS
`
`IBM. "Java Dynamic Class Loader". Nov. 1, 1996.*
`Adele Goldberg and David Robson, "Smalltalk-80---The
`Language and
`its Implementation", Xerox Palo Alto
`Research Center, 1983 (reprinted with corrections, Jul.
`1985) pp. 1-720.
`
`(List continued on next page.)
`
`Primary Examiner-St. John Courtenay, III
`Assistant Examiner-Lewis A Bullock, Jr.
`(74) Attorney, Agent, or Firm-Finnegan, Henderson,
`Farabow, Garrett & Dunner, L.L.P.
`
`(57)
`
`ABSTRACT
`
`A task executing at a server receives a request to package
`program code for remote execution on a client, and deter(cid:173)
`mines the software components that already reside at the
`client. The task uses this information to formulate a set of
`instructions to another task that creates the package. The
`created package is transmitted to the client, and program
`execution begins.
`
`30 Claims, 8 Drawing Sheets
`
`(--~]RT )-
`
`INITIALIZECOMPONENTLIST
`WITH PROGRAM START
`POINT
`
`605
`
`IPR2017-00184
`UNIFIED EX1016
`
`

`
`US 6,493,870 Bl
`Page 2
`
`OIBER PUBLICATIONS
`
`Eric Jul, "Object Mobility in a Distributed Object-Oriented
`System", a Dissertation, University of Washington, 1989,
`pp. 1-154 (1 page Vita).
`Eric Jul, Henry Levy, Norman Hutchinson, and Andrew
`Black, "Fine-Grained Mobility in the Emerald System",
`University of Washington, ACM Transactions on Computer
`Systems, vol. 6, No. 1, Feb. 1988, pp. 109-133.
`
`Felix Samson Hsu, "Reimplementing Remote Procedure
`Calls", University of Washington, Thesis, Mar. 22, 1985, pp.
`1-106.
`
`Liquid Common LISP™, available at URL-http://harle(cid:173)
`quin.com/products/ads/lcl/lcl.html (Date printed Jun. 18,
`1998).
`
`* cited by examiner
`
`

`
`U.S. Patent
`
`Dec.10,2002
`
`Sheet 1 of 8
`
`US 6,493,870 Bl
`
`UJ
`__J
`u..
`Cf)
`Cf)
`<(
`__J
`(.)
`
`a:::
`UJ
`~
`UJ
`Cf)
`
`UJ
`Cl
`0
`(.)
`UJ
`I-
`>-
`ca
`
`,,.
`
`,,.
`
`/
`
`/
`
`/
`
`/
`
`LC")
`...-
`
`f\_~
`
`0
`c:o
`
`/
`
`I
`
`{
`
`I
`I
`I
`I
`I
`
`~
`•
`(!)
`Li:
`
`C>
`I.()
`...-
`
`I-
`:z:
`LU
`::::i
`(.)
`
`LC")
`I.()
`...-
`
`' ' ' ' '
`
`\
`
`\
`
`I-
`:z:
`UJ
`__J
`(.)
`
`........
`
`UJ
`Cl
`0
`(.)
`UJ
`I-
`>-
`ca
`
`I-
`:z:
`UJUJ
`~~
`-:z:
`1-o
`:z: a:::
`=::>_
`a::: >
`:z:
`UJ
`
`0
`...--
`...--
`
`LC")
`...-
`...-
`
`a:::
`0
`Cf)
`Cf)
`UJ
`(.)
`0
`a:::
`c....
`
`LC")
`C>
`...-
`
`C>
`C>
`..--
`
`

`
`U.S. Patent
`
`Dec.10,2002
`
`Sheet 2 of 8
`
`US 6,493,870 Bl
`
`(\I
`
`• Cl
`il:
`
`I-:z
`w
`Z<(
`0...--
`0...(.)
`:::2:
`0 u
`
`C>
`00
`N
`
`1-:z:
`w
`:z o...-
`0... c:o
`:::2:
`0
`(.)
`
`1-:z:
`w
`:z
`0
`...-(cid:173)
`a.. U
`:::2:
`0
`(.)
`
`C>
`r-(cid:173)
`N
`
`<(
`
`I-:z
`w
`:z:
`0 a..
`:::2:
`0
`(.)
`
`I\_ C>
`......-
`N
`
`c:o
`I-:z
`LU
`:z
`0 a..
`:::2:
`0
`(.)
`
`u
`I-:z
`LU
`:z
`0 a..
`:::2:
`0 u
`
`0
`I-:z
`LU
`:z
`0 a..
`:::2:
`0
`(.)
`
`[\_
`
`C>
`C>
`N
`
`

`
`USER
`ISSUES
`REQUEST
`TO
`EXECUTE
`PROGRAM
`
`DETERMINE
`WHAT
`COMPONENTS
`AND
`DEPENDENCIES
`ARE NEEDED
`
`310
`~
`
`320
`:£
`
`BEGIN
`EXECUTION
`
`340
`

`
`/\.
`
`COMPONENT A
`REFERENCED
`
`END
`EXECUTION
`
`;\,
`
`360
`
`i
`
`/\,
`
`370
`
`1
`
`330
`LOAD ALL
`NEEDED
`COMPONENTS
`
`350
`COMPONENT A
`REFERENCED
`
`FIG. 3
`
`d •
`\JJ.
`•
`~
`~ ......
`~ = ......
`
`~
`~
`ri
`'"""' ~=
`N c c
`
`N
`
`'Jl =(cid:173)~
`~ .....
`
`~
`0 .....,
`00
`
`e
`
`rJ'J.
`O'I
`~
`~
`~
`""-l
`Q
`~
`lo-"
`
`

`
`U.S. Patent
`U.S. Patent
`
`Dec.10,2002
`Dec. 10, 2002
`
`00f04teehS
`Sheet 4 of 8
`
`US 6,493,870 Bl
`US 6,493,870 B1
`
`r--
`00
`-.::t"
`
`0 c.o
`..--
`
`N
`00
`-.::t"
`
`w c::::
`
`moézs
`moca
`~~ :zO
`
`_Jw
`
`5::
`Eozmz
`0
`~ w
`~
`
`c::::
`w
`~
`w
`en
`
`~
`en
`~
`w
`(.)
`~ c::::
`w
`I-:z
`
`itm_o<&Ez_
`
`-.::t"
`00
`-.:1'"
`
`1-:z
`:,m_d
`w _J
`
`(.)
`
`

`
`U.S. Patent
`
`Dec.10,2002
`
`Sheet 5 of 8
`
`US 6,493,870 Bl
`
`(
`
`START
`
`)
`
`RECEIVE REQUEST
`TO PACKAGE
`JAVA CODE
`
`v
`510
`
`IDENTIFY STARTING POINT v
`515
`OF PROGRAM
`
`IDENTIFY ANY AVAILABLE v
`520
`CLASS
`
`IDENTIFY ANY
`SUPPLEMENTAL CLASS
`
`v 530
`
`IDENTIFY PLACES TO LOOK .J 540
`FOR FILES
`
`SEND INSTRUCTION TO
`LINKAGE EDITOR
`
`.J 550
`
`RECEIVE OUTPUT FILE AND v 560
`SEND TO CLIENT
`
`,,
`END
`
`(
`
`)
`
`FIG. 5
`
`

`
`U.S. Patent
`
`Dec.10,2002
`
`Sheet 6 of 8
`
`US 6,493,870 Bl
`
`FIG. 6
`
`START
`
`INITIALIZE COMPONENT LIST
`WITH PROGRAM START
`POINT
`
`SELECT NEXT ITEM
`IN COMPONENT LIST
`
`NO
`
`LOCATE CLASS
`CONTAINING COMPONENT
`
`EXTRACT COMPONENT
`FROM CLASS AND ADD TO
`OUTPUT FILE
`
`655
`SEND OUTPUT
`FILE TO
`INTERFACE TASK
`
`(
`
`END
`
`)
`
`605
`
`610
`
`625
`
`630
`
`634
`ADD NECESSARY
`METHODS TO
`COMPONENT LIST
`
`ANALYZE COMPONENT
`FOR DEPENDENCIES
`
`635
`
`645
`ADD DEPENDENCIES
`TO COMPONENT LIST
`
`

`
`START
`
`)
`
`NO
`
`c END
`
`)
`
`NO
`
`~--·-·-~--------
`
`NO
`
`SEARCH EXTRACTED
`COMPONENT'S CLASS FOR
`NON-STATIC METHODS
`
`I r 725
`
`I
`
`YES
`
`NO
`
`c END
`
`)
`
`OVERRIDING METHOD TO I r 735
`BE ADDED TO
`COMPONENT LIST
`
`END
`
`CHECK SUBCLASSES FOR
`I OVERRIDING METHODS TO
`BE ADDED TO
`COMPONENT LIST
`
`720
`
`END
`
`FIG. 7
`
`d •
`\JJ.
`•
`~
`~ ......
`~ = ......
`
`~
`~
`ri
`'"""' ~=
`N c c
`
`N
`
`'Jl =-~
`~ .....
`-..J
`0 .....,
`00
`
`e
`
`rJ'J.
`O'I
`~
`~
`~
`""-l
`Q
`~
`lo-"
`
`

`
`U.S. Patent
`
`Dec. 10, 2002
`
`Sheet 8 of 8
`
`US 6,493,870 Bl
`
`810
`
`820
`
`830
`
`840
`
`START
`
`ISSUE REQUEST TO
`EXECUTE PROGRAM
`
`RECEIVE PACKAGED
`FILE FROM SERVER
`
`ADD PACKAGED
`COMPONENTS TO
`PREEXISTING
`COMPONENTS
`
`BEGIN PROGRAM
`EXECUTION
`
`END
`
`FIG. 8
`
`

`
`US 6,493,870 Bl
`
`1
`METHODS AND APPARATUS FOR
`PACKAGING A PROGRAM FOR REMOTE
`EXECUTION
`
`RELATED APPLICATIONS
`
`The following U.S. patent application is relied upon and
`is incorporated by reference in this application: U.S. patent
`application Ser. No. 09/044,904, entitled "Methods and
`Apparatus for Linking a Program for Remote Execution,"
`filed on the same date herewith.
`
`BACKGROUND OF THE INVENTION
`
`10
`
`2
`Specification," by Tim Lindholm and Frank Yellin, Addison
`Wesley, 1996. The Java VM acts as an interpreter between
`the bytecode and the particular computer system being used.
`By use of platform-independent bytecode and the Java VM,
`5 a program written in the Java programming language can be
`executed on any computer system. This is particularly useful
`in networks such as the Internet that interconnect heteroge(cid:173)
`neous computer systems.
`Before a Java program can be executed, certain requisite
`classes must be loaded into the memory of the computer
`executing the program. These classes may be loaded from
`the computer's disk, but are more commonly transferred
`across a network from a server. Customarily, these classes
`are loaded as late during the program's execution as pos(cid:173)
`sible; in other words, they are loaded on-demand, when first
`15 referenced during the program's execution. When such
`loading occurs, it is also customary to load an entire class
`whenever any part of that class is necessary.
`According to a conventional approach, when a user on a
`machine issues a request to execute the program resident on
`20 a remote server, the class file containing the main method is
`loaded from the server to the client across the network. This
`class file contains the program bytecode. The virtual
`machine then begins execution by invoking the main method
`of the program.
`Execution continues until the program references a com(cid:173)
`ponent, for example a component referred to as "F." In
`response to this reference, the entire class that contains
`component F is transferred from class files on the server to
`the client via the network. The referenced component F is
`used and execution then continues until another component,
`for example a component referred to as "G," is referenced.
`In response to this reference, the entire class containing
`component G is transferred from class files on the server to
`the client via the network. Execution then continues to
`35 completion. Once the execution has completed, the series of
`connections between the client and the server over the
`network may finally be terminated.
`This description demonstrates two significant disadvan(cid:173)
`tages with the conventional approach. First, it requires
`40 repeated connections between the client and the server
`throughout the course of program execution. Such a lengthy
`period during which connections must be made may be
`problematic for situations such as mobile computing. Sec(cid:173)
`ond, whenever a component is referenced, for example,
`45 component F, this approach requires that the entire class
`containing that referenced component be loaded from the
`server. If, however, only a few of the components within the
`class are ultimately used, the bandwidth required to transfer
`the unused components from the server to the client has been
`50 wasted. This is problematic in situations involving limited
`bandwidth, i.e., slow connection speeds or high-latency
`connections, between the client and the server.
`There is therefore a need for a system that alleviates these
`problems by packaging together only the necessary compo-
`55 nents of an entire program and delivering it to the client
`before execution begins. Prepackaging software for remote
`execution has been employed using other compiled com(cid:173)
`puter languages requiring machine compatibility, such as
`Cobol, C and Fortran. It has not, however, been employed
`60 using an object-oriented languages, such as the Java pro(cid:173)
`gramming language, which provide additional benefits, such
`as extracting necessary components from their parent
`classes.
`
`A Field of the Invention
`Embodiments of the invention generally relate to distrib(cid:173)
`uted computer systems and, more particularly, to methods
`and apparatus for packaging a computer program for remote
`execution.
`B. Description of the Related Art
`In today's society, the Internet has become an important
`medium for information exchange. Although the Internet is
`now very popular among the general public, it initially
`began as a system (or network) of interconnected computers
`used by government and academic researchers. An early
`problem of this network stemmed from the fact that the 25
`interconnected computers were not the same; they employed
`different hardware as well as different operating systems.
`Information exchange on such a heterogeneous network
`posed a communication problem. This problem was
`resolved through agreement on common standards, includ- 30
`ing protocols such as Transmission Control Protocol/
`Internet Protocol (TCP/IP) and HyperText Transfer Protocol
`(HTIP). These protocols enabled varied interconnected
`machines to share information in the form of static text or
`graphic documents.
`These protocols, however, represented only two steps in
`the evolution of the Internet. Although users can exchange
`information documents among varied computers connected
`to the Internet, they cannot exchange executable application
`programs written in conventional languages such as C or
`C++, which are designed to interface with a particular
`processor (e.g., the Intel Pentium processor) and/or a par(cid:173)
`ticular operating system (e.g., Windows 95 or DOS). This
`problem was solved with the advent of the Java TM program(cid:173)
`ming language and its related runtime system.
`The Java programming language is an object-oriented
`programming language that is described, for example, in a
`text entitled "The Java TM Tutorial" by Mary Campione and
`Kathy Walrath, Addison-Wesley, 1996. 1 Importantly, the
`Java programming language is an interpreted language that
`is platform-independent-that is, its utility is not limited to
`one particular computer system. Using the Java program(cid:173)
`ming language, a software developer writes programs in a
`form commonly called Java source code. When the devel(cid:173)
`oper completes authoring the program, he then compiles it
`with a Java compiler into an intermediate form called
`bytecode. Both the Java source code and the bytecode are
`platform-independent.
`1 Sun, Sun Microsystems, the Sun Logo, Java, the Java Virtual Machine, and
`the Java Runtime Environment are trademarks or registered trademarks of
`Sun Microsystems, Inc. in the United States and other countries.
`The compiled bytecode can then be executed on any
`computer system that employs a compatible runtime system
`that includes a virtual machine (VM), such as the Java
`Runtime Environment (JRE) that includes the Java Virtual 65
`Machine (JVM) and Java class libraries. The JVM is
`described in a text entitled "The Java Virtual Machine
`
`SUMMARY OF THE INVENTION
`In accordance with the present invention, a method for
`packaging a program component for execution in a distrib-
`
`

`
`US 6,493,870 Bl
`
`4
`
`3
`uted system comprises the steps of receiving a request to
`package a program for remote execution on a client, iden(cid:173)
`tifying any class referenced in the program that is available
`to the client, and providing an instruction to a linkage editor
`including at least one reference to the identified class.
`In accordance with the present invention, a computer(cid:173)
`readable medium contains instructions for packaging a pro(cid:173)
`gram component for execution in a distributed system by
`receiving a request to package a program for remote execu(cid:173)
`tion on a client, identifying any class referenced in the
`program that is available to the client, and providing an
`instruction to a linkage editor including at least one refer(cid:173)
`ence to the identified class.
`In accordance with the present invention, an apparatus for
`packaging a program component for execution in a distrib(cid:173)
`uted system comprises means for receiving a request to
`package a program for remote execution on a client, means
`for identifying any class referenced in the program that is
`available to the client, and means for providing an instruc(cid:173)
`tion to a linkage editor including at least one reference to the
`identified class.
`In accordance with the present invention, a system com(cid:173)
`prises a client, a server, and a network. The client has a
`processor, a memory, and a runtime environment including
`a virtual machine task. The server has a processor, a
`memory, an interface task, a linkage editor task, and a
`component file. The network interconnects the client and the
`server.
`
`BRIEF DESCRIPTION OF THE DRAWINGS
`
`DETAILED DESCRIPTION
`
`Reference will now be made in detail to an implementa(cid:173)
`tion of the present invention as illustrated in the accompa(cid:173)
`nying drawings. Wherever possible, the same reference
`numbers will be used throughout the drawings and the
`following description to refer to the same or like parts.
`
`A. Overview
`Systems and methods consistent with the present inven(cid:173)
`tion operate in a distributed computer system, typically
`having multiple clients and one or more servers. As one
`5 example, a client seeking to execute a program requests a
`server to package together the software needed to run the
`program. In formulating this request, the client may specify
`certain components that should be included in the package.
`A task executing at the server (the "interface task")
`10 receives this request, and determines the software compo(cid:173)
`nents that already reside at the client machine. The interface
`task uses this information to formulate a set of instructions
`to another task called the linkage editor. These instructions
`may include: the name of the program to be executed, the
`15 components that need not be packaged because they already
`reside at the client machine, and the names of any software
`components that the client machine may have specified to
`include in the package.
`The linkage editor receives this information and generates
`20 an output file that contains all software components that
`reside at the server and are necessary for program execution.
`This output file is generated by iteratively analyzing the
`program for references to other software components and
`extracting those components from their parent classes. The
`25 linkage editor sends the completed output file to the inter(cid:173)
`face task, which transmits it to the client that requested it,
`and program execution begins.
`B. Terminology
`For the sake of explanation, the detailed description
`30 below is based upon the Java programming language. For
`that reason, there follows a brief section defining terminol(cid:173)
`ogy as used hereinafter. One of skill in the art, however, will
`recognize that the same principles explained below apply to
`other programming languages.
`A Java application program consists of one or more class
`definitions, each of which has been compiled into its own
`class file that contains bytecode and other information. A
`"class," in turn, is a collection of data ("fields"), "methods"
`that operate on the data, and ancillary information. The
`40 ancillary information may include, for example, shared data
`structures, names of superclasses, and interfaces imple(cid:173)
`mented. As used herein, the term "component" refers to
`either a method or a field or both. An "object" is something
`created by using the blueprint provided by a class, i.e., it is
`45 an "instance" of the class. A Java application program must
`contain one class that defines the main method, which
`represents the point at which the Java interpreter starts
`executing the program. Such an application program may be
`executed by the Java interpreter, i.e. the Java VM.
`In contrast to a stand-alone application program, a Java
`applet does not contain a main method, and consequently
`cannot be executed directly by the Java interpreter. Instead,
`a Java applet is a class that is loaded by an already executing
`Java application such as a Web browser. The Java applica-
`55 tion invokes the various methods of the applet at the
`appropriate times.
`As used herein, the term "program," when used alone,
`may refer to either an application program, a Java applet, a
`process, or other software code. The term "task" may refer
`60 to a program executing on a computer processor. The term
`"package" may include components, ancillary information,
`or other data required for program execution.
`For the sake of simplicity, the examples contained herein
`assume that an application program is being executed. Those
`65 of skill in the art, however, will recognize that the claimed
`invention may encompass execution of an applet and other
`software code.
`
`50
`
`The accompanying drawings, which are incorporated in
`and constitute a part of this specification, illustrate an
`embodiment of the invention and, together with the
`description, serve to explain the advantages and principles 35
`of the invention. In the drawings,
`FIG. 1 is a block diagram of a typical client-server
`configuration used to explain remote program execution
`using a runtime environment that includes a virtual machine;
`FIG. 2 is a block diagram depicting a typical executable
`object-oriented program along with its referenced compo(cid:173)
`nents and their dependencies;
`FIG. 3 is a timeline used to explain the timing of linking
`and execution consistent with the present invention;
`FIG. 4 is a block diagram depicting typical interface and
`linkage editor tasks in relation to a server and a client;
`FIG. 5 is a flow diagram of the steps performed by an
`interface task in a packaging process consistent with the
`present invention;
`FIG. 6 is a flow diagram of the steps performed by the
`linkage editor in packaging an output file, in an embodiment
`consistent with the present invention; and
`FIG. 7 is a flow diagram of steps performed to add
`necessary methods, in an embodiment consistent with the
`present invention; and
`FIG. 8 is a flow diagram of the steps performed by the
`client to execute a program, in an embodiment consistent
`with the present invention.
`
`

`
`US 6,493,870 Bl
`
`5
`
`C. Architecture
`FIG. 1 shows the use of the Java programming language
`in a distributed computing system. The system consists of
`one or more servers such as server 160 and one or more
`clients, such as clients 100 and 155, interconnected by a
`network 150. The software developer creates a program
`using the Java programming language and compiles it into
`bytecode 115 that is stored on server 160. Typically, server
`160 also contains numerous class files 125 that are employed
`by Java programs. When a client 100 wishes to execute a
`Java program, it issues a request to server 160. In response,
`server 160 transmits the bytecode version of program 115 to
`client 100. At client 100, bytecode 115 executes on a runtime
`environment 110, which interprets between bytecode 115
`and a processor residing on client 100.
`FIG. 2 is an exemplary block diagram showing compo(cid:173)
`nent references within a typical executable program. In this
`example, a program 200 references four components, shown
`here as component A 210, component B 220, component C
`230, and component D 240. These referenced components, 20
`in turn, reference other components. For example, compo(cid:173)
`nent B 220 references component Bl 250. Similarly, com(cid:173)
`ponent C 230 references component A 210 and component
`Cl 270. In turn, component Cl 270 references component
`ClA 280. Such a reference by one component of another 25
`component is commonly referred to as a dependency. Each
`referenced component must be loaded because it may be
`used during program execution.
`D. Timeline
`FIG. 3 is a timeline used to explain the timing of linking 30
`and execution consistent with the present invention. The
`process begins when a user issues a request to execute a
`program (point 310) on client 100. In response, server 160
`determines what components and dependencies are needed
`for the program to execute (point 320). Each of these needed 35
`components, along with ancillary class information, is then
`transferred from server 160 to client 100 via network 150
`(point 330). At this point, all components and classes
`required for program execution have been transferred from
`server 160 to client 100 and, therefore, the connection 40
`between the two may be terminated.
`Program execution then begins (point 340), and compo(cid:173)
`nent A 210 is referenced (point 350). Because that compo(cid:173)
`nent has already been loaded onto client 100 (at point 330),
`however, there need be no separate transfer of that compo- 45
`nent from server 160 to client 100. Similarly, when compo(cid:173)
`nent B 220 is referenced (point 360), it need not be trans(cid:173)
`ferred because it has already been transferred from server
`160 to client 100. Execution therefore proceeds to comple(cid:173)
`tion (point 370) uninterrupted.
`FIG. 3 demonstrates that a process consistent with the
`present invention requires client 100 to remain connected to
`server 160 only until program loading ends (from point 300
`to point 330). Once the necessary components and ancillary
`class information have been loaded (at point 330), client 100 55
`may disconnect from server 160. Then, for the entire dura(cid:173)
`tion of program execution (point 340 to point 370), client
`100 and server 160 need not be connected. Moreover, server
`160 only transfers to client 100 those components and the
`ancillary class information that are essential to program 60
`execution (point 330). By eliminating the transfer of unused
`components, bandwidth is used more efficiently.
`E. Architecture of Interface Task and Linkage Editor
`FIG. 4 is a block diagram depicting an interface task and
`a linkage editor in relation to a server and a client. Client 100 65
`is interconnected to server 160 via network 150. Server 160
`contains a memory 482, which may contain Java class files.
`
`6
`Examples of memory 482 include random access memory
`(RAM), read only memory (ROM), a hard disk drive, or a
`compact disc based ROM (CD-ROM). Executing on server
`160 are two tasks: an interface task 484, and a linkage editor
`5 487. A request is issued to server 160 to package the
`necessary Java code to execute a program on client 100. At
`server 160, this request is received by interface task 484.
`Interface task 484, in turn, formulates a set of packaging
`instructions and sends them to linkage editor 487. Linkage
`10 editor 487 creates a package containing any components
`necessary for execution that reside on server 160, and sends
`the package to interface task 484. Interface task 484 receives
`this package and sends it to client 100, which uses the
`package to execute the program.
`15 F. Interface Task
`FIG. 5 is a flow diagram of the steps performed by an
`interface task in a packaging process consistent with the
`present invention. At the beginning of the process, interface
`task 484 (executing on server 160) receives a request to
`package a Java program for execution on a named client, for
`example client 100 (step 510). The Java program is typically
`specified as a collection of Java classes and components.
`The location of some class files is predefined. The location
`of other, necessary classes is included in the request to
`package the Java program.
`In response to this request, interface task 484 formulates
`a set of instructions for a linkage editor. As part of these
`instructions, the interface task notifies linkage editor 487 of
`the starting point of the program (step 515). This gives
`linkage editor 487 a starting point for determining which
`components are needed.
`Interface task 484 also notifies linkage editor 487 of any
`class that is already present on client 100 (step 520). By
`providing this information, the interface task avoids unnec(cid:173)
`essary packaging: linkage editor 487 need not package
`components that already exist on client 100. This conserves
`bandwidth usage by minimizing the size of the output file.
`This information may be provided to the interface task as
`part of the request to package components (step 510).
`Alternatively, this information may be stored within
`memory 482 of server 160, from having been previously
`provided. For this step to operate correctly, the classes
`already present on client 100 must be consistent with those
`on server 160.
`Interface task 484 also notifies linkage editor 487 of any
`supplemental component that should be added to the pro(cid:173)
`gram package (step 530). This may be necessary for
`example, if a component has been excluded from the linkage
`step because the class containing that component already
`50 exists on client 100; that excluded component, however,
`may reference other components that are not available on
`client 100, and therefore may be need to be added to the
`package by linkage editor 487. In addition to components
`that are excluded because their class already exists on client
`100, there may also be some dependencies that cannot be
`discovered programmatically. Interface task 484 typically is
`informed (at step 510) of any supplemental components as
`part of the request to package components.
`For example, the method quicksort may be excluded from
`the linkage step because the class containing that method,
`sun.misc.Sort, is already loaded on client 100. When the
`method quicksort is invoked, one of its parameters is an
`object having the method doCompare. Quicksort will invoke
`doCompare, which may not already be loaded on client 100.
`Accordingly, interface task 484 must notify linkage editor
`487 that the method doCompare must be loaded as a
`supplemental component.
`
`

`
`US 6,493,870 Bl
`
`5
`
`7
`Interface task 484 also notifies linkage editor 487 of a list
`of places to look for the required Java class files (step 540).
`Interface task 484 sends these instructions to linkage editor
`487 (step 550), which generates an output file as described
`below in reference to FIG. 5. Interface task 484 receives the
`output file and sends it to client 100 (step 560), and the
`process ends.
`G. Linkage Editor
`FIG. 6 is a detailed flow diagram, consistent with the
`present invention, of the steps performed by linkage editor
`487 in packaging an output file. For explanatory purposes,
`the following description of the flow is based upon the
`example in FIG. 2.
`In the beginning of the process, linkage editor 487
`(typically executing on server 160) receives a set of instruc- 15
`tions from interface task 484. Linkage editor 487 then
`creates and initializes a list with the starting point of the
`program to be executed (step 605). This list, referred to as
`the "component list," contains a reference to each necessary
`component that must be loaded by linkage editor 487.
`Linkage editor 487 then selects the next item in the
`component list, which initially will be the main method (step
`610). Linkage editor 487 checks to see if the selected
`component is on the list of items to exclude from the linkage
`step (step 615). The component may be on the list of items
`to exclude because, for example, the component is more
`readily available from another source, such as client 100 or
`another server. Because the main method will not be on the
`list of things to exclude, linkage editor 487 checks to
`determine if the selected component has previously been
`loaded in the linkage process (step 620). Because the main
`method will not have been previously loaded, linkage editor
`487 then locates the class file that contains the component to
`be loaded, using the list of file locations provided by the
`server in its instructions to linkage editor 487 (step 625).
`Linkage editor 487 reads that class file, extracts any ancil(cid:173)
`lary information associated with that class file, extracts the
`selected component from the class file, and adds the
`extracted ancillary information and component to an output
`file (step 630). Note that by doing so, linkage editor 487 only
`extracts necessary components and ancillary information,
`rather than loading the entire class.
`After loading the extracted component, linkage editor 487
`checks for overridden methods (step 632). This step is
`further described in reference to FIG. 7, below. Next, linkage
`editor 487 analyzes the extracted component to determine if
`it references other components (step 635). In other words,
`linkage editor 487 analyzes the extracted component for
`dependencies. In this ex

This document is available on Docket Alarm but you must sign up to view it.


Or .

Accessing this document will incur an additional charge of $.

After purchase, you can access this document again without charge.

Accept $ Charge
throbber

Still Working On It

This document is taking longer than usual to download. This can happen if we need to contact the court directly to obtain the document and their servers are running slowly.

Give it another minute or two to complete, and then try the refresh button.

throbber

A few More Minutes ... Still Working

It can take up to 5 minutes for us to download a document if the court servers are running slowly.

Thank you for your continued patience.

This document could not be displayed.

We could not find this document within its docket. Please go back to the docket page and check the link. If that does not work, go back to the docket and refresh it to pull the newest information.

Your account does not support viewing this document.

You need a Paid Account to view this document. Click here to change your account type.

Your account does not support viewing this document.

Set your membership status to view this document.

With a Docket Alarm membership, you'll get a whole lot more, including:

  • Up-to-date information for this case.
  • Email alerts whenever there is an update.
  • Full text search for other cases.
  • Get email alerts whenever a new case matches your search.

Become a Member

One Moment Please

The filing “” is large (MB) and is being downloaded.

Please refresh this page in a few minutes to see if the filing has been downloaded. The filing will also be emailed to you when the download completes.

Your document is on its way!

If you do not receive the document in five minutes, contact support at support@docketalarm.com.

Sealed Document

We are unable to display this document, it may be under a court ordered seal.

If you have proper credentials to access the file, you may proceed directly to the court's system using your government issued username and password.


Access Government Site

We are redirecting you
to a mobile optimized page.





Document Unreadable or Corrupt

Refresh this Document
Go to the Docket

We are unable to display this document.

Refresh this Document
Go to the Docket