US20010010053A1 - Service framework for a distributed object network system - Google Patents

Service framework for a distributed object network system Download PDF

Info

Publication number
US20010010053A1
US20010010053A1 US09/816,282 US81628201A US2001010053A1 US 20010010053 A1 US20010010053 A1 US 20010010053A1 US 81628201 A US81628201 A US 81628201A US 2001010053 A1 US2001010053 A1 US 2001010053A1
Authority
US
United States
Prior art keywords
service
worker
computer
workers
client
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Abandoned
Application number
US09/816,282
Inventor
Ofer Ben-Shachar
Vijay Anand
Ken Ebbs
Yarden Malka
David Brewster
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Individual
Original Assignee
Individual
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Individual filed Critical Individual
Priority to US09/816,282 priority Critical patent/US20010010053A1/en
Publication of US20010010053A1 publication Critical patent/US20010010053A1/en
Abandoned legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/465Distributed object oriented systems

Definitions

  • This invention relates to programmed computers and, more particularly, to an improved method and apparatus for providing a service framework for a distributed object network system.
  • a client-server system represents a common paradigm for providing shared access to a limited resource such as a computer database on a server.
  • the typical client-server system includes a computer (the “server”) in which one or more limited resources reside (e.g., are stored) and one or more satellite computers (the “clients”) which access the limited resources.
  • the access is generally performed over an electronic communication system.
  • the clients access the limited resources on an as needed basis.
  • a server typically includes a computer or multiple computers connected via an electronic communication system, services (e.g., a data service that provides access to a database residing in a computer or a distributed service residing in multiple computers connected via an electronic communication system), and a storage for storing the services.
  • the storage typically includes some combination of random access memory (“RAM”) and magnetic media, such as tapes and disks or optical media, and other storage devices.
  • RAM random access memory
  • the server may be a personal desktop computer that includes a hard-disk, a large mainframe computer that includes multiple tape drives, or some other kind of computer.
  • a client may be a personal computer, a workstation, or some other kind of computer.
  • a client may be either remote from the server (i.e., the client accesses the server via an electronic communication system) or local to the server (e.g., the client accesses the server via a local bus).
  • a client may include one or more “applications” such as a word processor, a web browser, or database interface software to access information from a database on a server. Some of the applications may be under the control of a human operator and others may run automatically or under the control of another application.
  • An electronic communication system may include commercial telephone lines as well as dedicated communication lines to carry data signals between the server and the client.
  • Prior client-server approaches allow a limited number of clients to access limited resources residing in a server.
  • the workload characteristics are predictable and well known because of the predetermined limit on the number of clients and the well known nature of the clients.
  • CORBA Common Object Request Broker Architecture
  • OMG Object Management Group
  • CORBA defines an implementation-independent component-based middleware.
  • CORBA allows intelligent components to discover each other and interoperate on an object bus called an Object Request Bus (ORB).
  • CORBA objects can reside anywhere on a network. Remote clients can access a CORBA object via method invocations. Clients do not need to know where a CORBA object resides or on which operating system the CORBA object is executed. Thus, a client can access a CORBA object that resides in the same process or on a machine in another country connected via the Internet.
  • CORBA uses an Interface Definition Language (IDL) to define a CORBA object's interface, and the IDL also allows for specifying a component's attributes such as the parent classes it inherits from and the methods its interface supports.
  • IDL Interface Definition Language
  • a CORBA object provides an implementation for the CORBA object's IDL interface using a language for which an IDL mapping exists.
  • CORBA defines a standard mapping from the IDL to other implementation languages such as C++, JAVA, ADA, etc.
  • a CORBA IDL compiler generates client-side stubs and server-side skeletons for the CORBA object's IDL interface.
  • CORBA also specifies bus-related services for creating and deleting objects, accessing them by name, storing them in persistent stores, externalizing their states, and defining ad hoc relationships between them. Accordingly, CORBA provides a flexible distributed-object middleware that provides client-server interoperability. CORBA and JAVA are both further described in “Client/Server Programming with JAVATM and CORBA” by Robert Orfali and Dan Harkey (John Wiley & Sons: New York, N.Y., 1997).
  • FIG. 1 shows a typical CORBA environment 38 .
  • a client 40 connects to a server 54 via a network 44 (e.g., via the Internet).
  • a client 42 connects to the server 54 via a network 46 (e.g., via the Internet).
  • a client 50 connects to the server 54 via a network 48 (e.g., via the Internet).
  • CORBA provides local/remote transparency in a distributed object network as shown in FIG. 1 by providing Internet Inter-ORB Protocol (IIOP) services 52 .
  • IIOP Internet Inter-ORB Protocol
  • An ORB service represents a standard CORBA service that can broker inter-object calls within a single process, multiple processes running within the same machine, or multiple processes running within different machines that may be across multiple networks and operating systems.
  • the client 42 includes an application that uses client-side stubs to obtain an object reference (e.g., a handle) to a remote CORBA object and to dispatch method invocations to the remote CORBA object.
  • object reference e.g., a handle
  • the communication between the client and the server-side object uses the IIOP.
  • the server 54 includes a relational database management systems (RDBMS) 60 (e.g., residing in a storage of the server 54 ).
  • RDBMS relational database management systems
  • the server 54 also includes a data service 56 , which can be implemented as a collection of CORBA objects, that encapsulates the limited resource, the RDBMS 60 .
  • the data service 56 may provide a set of operations that can execute SQL queries, stored procedures, and perform connection management.
  • the data service 56 can be used by standard applications (e.g., a database interface) that reside in the clients 40 , 42 , and 50 .
  • the clients 40 , 42 , and 50 obtain a handle (e.g., an object reference) to bind to the data service 56 .
  • CORBA's object location mechanism includes the CORBA client stubs which offer a bind mechanism to locate a remote object and obtain an object reference for the remote object.
  • the server 54 provides various services such as the data service 56 .
  • the server 54 also includes standard CORBA support services in a CORBA layer 58 for activating the data service 56 and administering the data service 56 .
  • the present invention provides an improved method and apparatus for providing a service framework for a distributed object network system.
  • the service framework includes a service proxy that encapsulates the operation of requesting a service from a server.
  • the service framework also includes a load balancing manager for balancing workloads among workers in a worker pool of a service.
  • the service framework may include a service locator for balancing workloads among clones of a service.
  • the service framework may include a service locator proxy for balancing workloads among clones of service locators that provide handles (e.g., object references) to a service.
  • the present invention is used to deploy scalable applications (e.g., enterprise applications) over the World Wide Web (WWW).
  • scalable applications e.g., enterprise applications
  • WWW World Wide Web
  • a method for providing client-side service request encapsulation.
  • the method may also include balancing workloads among clones of service locators, clones of services, and workers in a worker pool.
  • the method may also include improving fault tolerance in a distributed object network system.
  • FIG. 1 shows a typical CORBA environment.
  • FIG. 2 shows a framework model that includes a service framework in accordance with some embodiments of the present invention.
  • FIG. 3 shows a service framework for a distributed object network system in accordance with some embodiments of the present invention.
  • FIG. 4 is a flow diagram illustrating the operation of a service proxy in accordance with some embodiments of the present invention.
  • FIG. 5 shows the service proxy of the client of FIG. 3 in greater detail in accordance with some embodiments of the present invention.
  • FIG. 6 is a flow diagram illustrating the operation of the client of FIG. 3 during a service request in accordance with some embodiments of the present invention.
  • FIG. 7 shows a service object of the server of FIG. 3 in accordance with another embodiment of the present invention.
  • FIG. 8 provides a call to allocateWorker on a service object in accordance with some embodiments of the present invention.
  • FIG. 9 provides reservation properties in accordance with some embodiments of the present invention.
  • FIG. 10 provides a reservation context in accordance with some embodiments of the present invention.
  • FIG. 11 provides service properties in accordance with some embodiments of the present invention.
  • FIG. 12 provides a reservation interface of the service object of FIG. 3 in accordance with some embodiments of the present invention.
  • FIG. 13 is a flow diagram illustrating the reservation revocation operation in accordance with some embodiments of the present invention.
  • FIG. 14 is a flow diagram illustrating the operation of reserving a previously reserved worker in accordance with some embodiments of the present invention.
  • FIG. 15 provides a reservation revocation call back interface in accordance with some embodiments of the present invention.
  • FIG. 16 provides worker properties in accordance with some embodiments of the present invention.
  • FIG. 17 is a flow diagram illustrating the operation of pinging workers in accordance with some embodiments of the present invention.
  • FIG. 18 shows a server in accordance with another embodiment of the present invention.
  • FIG. 19 shows an out-of-process worker factory and an in-process worker factory in accordance with some embodiments of the present invention.
  • FIG. 20 shows clone factories in accordance with some embodiments of the present invention.
  • FIG. 21 provides an object factory interface in accordance with some embodiments of the present invention.
  • FIG. 22 provides service locator properties in accordance with some embodiments of the present invention.
  • FIG. 23 provides a service locator interface in accordance with some embodiments of the present invention.
  • FIG. 24 provides a load balancing manager (LBM) interface in accordance with some embodiments of the present invention.
  • LBM load balancing manager
  • FIG. 25 shows a fully capable LBM in accordance with some embodiments of the present invention.
  • FIGS. 26 A- 26 B are a flow diagram illustrating the call sequence operation in accordance with some embodiments of the present invention.
  • FIG. 27 shows a client wait queue and an idle queue of the LBM of FIG. 25 in accordance with another embodiment of the present invention.
  • FIG. 28 shows a service object and an LBM in accordance with another embodiment of the present invention.
  • FIG. 29 shows the scalability of the service framework in accordance with some embodiments of the present invention.
  • FIG. 30 is a flow diagram illustrating the fault tolerance operation for when a service object becomes unavailable in accordance with some embodiments of the present invention.
  • FIG. 31 shows an administrative interface in a server in accordance with some embodiments of the present invention.
  • FIG. 32 provides an interface of the administrative interface in accordance with some embodiments of the present invention.
  • the present invention provides an improved method and apparatus for providing a service framework for a distributed object network system.
  • a client-server system in which a significant number of clients access distributed objects on a server (e.g., a distributed enterprise application deployed over the global Internet) would significantly benefit from this improved method and apparatus.
  • an application e.g., a web browser
  • a data service e.g., a service for a database such as an RDBMS
  • the data service often must be made accessible to a significant and unpredictable number of clients. Moreover, a significant number of clients may attempt to simultaneously access the data service, but some users may have higher priority than other users. Accordingly, a service framework should provide significant client-side encapsulation for requesting a service, ensure efficient workload balancing, offer a variety of access modes, provide significant scalability, and maintain robust fault tolerance.
  • FIG. 2 shows a framework model 70 that includes a service framework 76 in accordance with some embodiments of the present invention.
  • the service framework 76 is implemented on top of a Common Object Request Broker Architecture (CORBA) bus 78 .
  • the service framework 76 provides a platform of services which extend the CORBA support services in the CORBA bus 78 .
  • the service framework 76 includes services that support and encapsulate enterprise resources (i.e., a service represents an encapsulation of a resource) such as a data service 72 or other services 74 (e.g., an Email service, a document management service, etc.).
  • the data service 72 includes a service CORBA object and a pool of worker CORBA objects.
  • an object represents a set of computer instructions that can be executed by a computer.
  • the service framework 76 provides improved access to services, manages the life cycle of services, and provides administrative capabilities to manage a group of services.
  • the service framework 76 is implemented as a collection of objects written in JAVA and C++, and the architecture of the service framework 76 is the definition of the collection of objects and the interaction among objects in the collection.
  • the service framework 76 supports services implemented using C++, JAVA, etc. Accordingly, the service framework 76 provides a variety of methods to access services, and the service framework 76 also provides an architecture that is scalable, modular, fault tolerant, and easily extendible (i.e., new services are easy to plug in).
  • the service framework includes an object (e.g., a CORBA object) called a service locator that maintains the name space of service instances.
  • the service locator repository may contain an entry for an RDBMS service instance with the name “RDBMS service”, a handle to the RDBMS service's service object, and a set of properties for the service (e.g., database types supported).
  • the service locator exports a service lookup interface that provides a findService operation.
  • the findService operation takes a service name and, or a set of properties for a service, and the findService operation returns a set of service object handles that match the name and, or the set of properties.
  • FIG. 3 shows a service framework for a distributed object network system in accordance with some embodiments of the present invention.
  • a client 80 includes a service proxy 82 residing in client storage.
  • a service locator 84 includes a registry of services.
  • the service locator 84 provides the location (e.g., an object reference) of a particular service in the distributed object network system in which there may be a large number of services at any one time.
  • Each service residing in a server 88 is managed by a service manager (SM) 86 .
  • the SM 86 performs several tasks. For example, the SM 86 starts a service and starts a service locator. The SM 86 then registers the services under its control with all known service locators in the distributed object network system.
  • each service locator contains the same set of services accessible over the entire distributed object network system.
  • services can be grouped logically, as discussed further below with respect to FIG. 18.
  • the service locator 84 exports a registerService method that is used by the SM 86 to register its services with the service locator 84 .
  • the registerService call simply registers a collection of services managed by a SM such as the SM 86 and the properties of each service. However, not all properties of a service may be registered by the SM 86 . In some embodiments, only those properties that would have an impact on the clients are registered by the SM 86 .
  • the SM 86 also periodically updates the repository of all the services registered with the service locator 84 along with any changes in the set of services that it manages.
  • the service locator 84 assumes that the SM 86 and all its contained services have died and quietly removes the set of services from its repository. Also, if the parent of the service locator 84 (the service manager that launched the service locator, for example, the SM 86 ) does not ping in time, the service locator 84 assumes that the parent exited due to an error and terminates itself. These operations are part of the fault tolerance capabilities of the service framework of the present invention.
  • the SM 86 essentially represents an administrative object and does not perform a direct role in executing requests for services. For example, the SM 86 manages the life cycle and other administrative issues of the services. The SM 86 may also collect the statistics of the services and pass the statistics to the service locator 84 for workload balancing purposes. These operations may be performed automatically by the SM 86 . Further, the SM 86 may be responsible for instantiating the service locator 84 and all of the services residing in the server 88 . The SM 86 exports an administrative interface (as discussed further below with respect to FIG.
  • the SM 86 may instantiate a service object such as the service object 90 .
  • the service object 90 is responsible for instantiating a worker pool which may include workers 92 , 94 , and 96 (e.g., the workers 92 , 94 , and 96 may include different worker properties as discussed further below with respect to FIG. 16).
  • the service object 90 may also be responsible for reserving a worker as discussed further below.
  • the workers 92 , 94 , and 96 support the operations of the service (e.g., a DataService includes operations that provide access to a database).
  • the workers 92 , 94 , and 96 may be distributed among different address spaces, which provides fault tolerance in the event of an abnormal failure of a particular address space.
  • the service object 90 manages the workers 92 , 94 , and 96 and, in some embodiments, provides a reservation mechanism for clients. The reservation mechanism is discussed in further detail below.
  • the service proxy 82 supports the methods exported by the IDL interfaces of the workers 92 , 94 , and 96 .
  • a worker method that is encapsulated in the service proxy 82 uses an object reference to the worker 92 to dispatch the worker method to the remote worker 92 and obtain results from the worker method.
  • the communication between the service proxy 82 and the worker 92 is performed using the IIOP.
  • the service framework as shown in FIG. 3 represents a collection of objects (e.g., the service proxy 82 , the service locator 84 , the SM 86 , the service object 90 , the workers 92 , 94 , and 96 , etc.)
  • the architecture of the service framework is the definition of the objects and the interaction mechanism between the objects.
  • the service locator 84 , the SM 86 , the service object 90 , and the workers 92 , 94 , and 96 all represent CORBA objects. Each of these objects exports a CORBA interface in the form of an IDL (Interface Definition Language) interface.
  • the client 80 includes the service proxy 82 that can bind to the service locator 84 by name (e.g., using CORBA's object location mechanism). Other objects such as the service object 90 and the workers 92 , 94 , and 96 represent transient objects.
  • the service proxy 82 can get a handle (e.g., an object reference) to transient objects such as the service object 90 through the getService operation of the service locator 84 .
  • the communication between the service proxy 82 and the service object 90 may be a direct CORBA invocation over IIOP.
  • most of the service framework is implemented in JAVA.
  • the SM 86 , the service object 90 , and the service locator 84 are all implemented in JAVA, but the service proxy 82 and the workers 92 , 94 , and 96 are implemented in both JAVA and C++.
  • C++ clients can use a C++ service proxy to bind to the service locator 84 , obtain a CORBA object reference to a service object, and reserve a worker by obtaining an object reference to a worker.
  • services can be built using C++.
  • an RDBMS service can be implemented in C++ and use native client libraries to access the database.
  • the service proxy 82 as shown in FIG. 3 encapsulates various operations such as executeRequest, allocateWorker, and getService, and these operations are further discussed below with respect to FIG. 4.
  • the server 88 may include, for example, a SolarisTM operating system, an HP-UXTM operating system, or a Windows NTTM operating system.
  • the server 88 includes a data service which provides a relational database system, a standard type of commercial data management technology.
  • the service object 90 is a service object for a data service.
  • a service is a logical term that represents an encapsulation of a resource.
  • the resource is a relational database management system (RDBMS)
  • RDBMS relational database management system
  • an RDBMS service encapsulates the RDBMS by providing, for example, a set of operations that can execute SQL queries, stored procedures, and perform connection management.
  • Client applications that require access to the RDBMS can use the RDBMS service.
  • the RDBMS service is implemented as a collection of objects that collectively perform the functions of the RDBMS service.
  • the service object 90 provides the workers 92 , 94 , and 96 that encapsulate a resource on the server 88 .
  • the workers 92 , 94 , and 96 each export an interface of operations that includes executing an SQL statement or a stored procedure.
  • the workers 92 , 94 , and 96 also manage the connections to the RDBMS resource.
  • the workers 92 , 94 , and 96 encapsulate any connection state, cache execution results, and perform cursor-based lookups (e.g., maintain state on behalf of the connection).
  • the workers 92 , 94 , and 96 are implemented as a class in C++ or JAVA that derives directly from a class of the service framework that provides all the capabilities of the service framework (e.g., workload balancing, fault tolerance, etc.).
  • the workers 92 , 94 , and 96 may use the object-oriented inheritance mechanism to inherit all the capabilities of the service framework, and the workers 92 , 94 , and 96 may provide an interface (e.g., an IDL interface) for export.
  • Each worker is independent of the other workers (i.e., each worker is unaware of the other workers). Hence, the implementation of the worker needs to consider the resource logic only, not the service framework itself.
  • the service object 90 (in some embodiments, there is only one service object per service) is responsible for handing out a handle of a worker in a worker pool (i.e., a worker handle) to clients that are, using the RDBMS example, interested in executing an SQL statement or stored procedure (i.e., interested in performing an RDBMS transaction).
  • the service object 90 in deciding which worker from the pool to allocate, performs workload balancing among the workers and may also offer a variety of access modes from clients (e.g., transactional access, exclusive access, shared access, priority based access, etc.) as discussed further below.
  • the service object 90 exports a worker reservation interface that includes allocateWorker and releaseWorker operations (e.g., methods) to allocate a worker and release a previously allocated worker, respectively, as discussed further below with respect to FIG. 12.
  • the service locator 84 which maintains the name space of service instances (i.e., the set of services registered in the service locator of the cell, and in some embodiments, every service in the cell is registered with the service locator, and services in a different cell are not registered with the service locator), a repository of service objects, service names, and a set of properties associated with each service (service properties are discussed further below with respect to FIG. 11), has a local repository that contains an entry for the RDBMS service with the name “RDBMS service”, a handle to the service object 90 for the RDBMS service, and a set of properties for the RDBMS service.
  • the service locator 84 exports a service lookup interface that contains a findService operation.
  • the findService operation takes a service name and, or a set of properties for a service and returns a set of service object handles that match the name and, or properties.
  • the client 80 if it is interested in obtaining a handle to a particular service in which it intends to execute an operation, executes a findService operation on the service locator 84 with the name of the service it is interested in (in this example, “RDBMS service”).
  • the service locator 84 also provides a level of workload balancing in the service framework, which is discussed further below.
  • the service locator 84 periodically updates and loads existing services.
  • FIG. 3 illustrates the service framework that provides significant extensions to CORBA-based distributed object network system in accordance with some embodiments of the present invention.
  • the service framework can also be provided in a system with multiple servers with multiple (distributed) services and (distributed) clones of services.
  • a WWW (world wide web) or web application is provided using the service framework of the present invention.
  • the client 80 includes a client application such as a web browser (e.g., Netscape Navigator) that is capable of rendering HTML (hyper-text markup language) or hosting JAVA applets or ActiveX controls.
  • a web server (not shown) that supports HTTP requests from the web browser and launches a thin CGI/ISAPI/NSAPI to deliver HTTP requests to the application server (e.g., the server 88 ) is provided.
  • a web browser in the client 80 dispatches an HTTP request to the web server which launches a CGI, NSAPI, or ISAPI plug-in that is a client to the application server (e.g., the server 88 ).
  • the plug-in represents a CORBA client that issues a call to the service locator 84 to locate an appropriate service (e.g., a web service).
  • the application server may be completely isolated from the web server.
  • the plug-in then dispatches the web event to the web service.
  • the application server may provide a service implemented using CORBA objects that are activated (i.e., instantiated) prior to the incoming call for the service provided by the application server.
  • the web service executes the application logic, interacts with one or more data services in the application server, and stores session and state information.
  • the web service returns the result of the web event which is an HTML page back to the web browser in the client 80 .
  • the web browser can host a JAVA applet or an ActiveX control that connects directly to the application server using the IIOP.
  • the JAVA applet bypasses the web server and interacts directly with the application server using the IIOP, which may provide improved performance.
  • the service framework of the present invention provides a distributed, fault tolerant, scalable, and object-oriented architecture that supports a variety of services that can be accessed over the web (e.g., enterprise web applications). Further, the service framework of the present invention provides a reservation mechanism (as discussed below) that supports web applications that can efficiently and fairly manage a collection of resources that are accessed by clients across the Internet. Also, the dynamic scalability and fault tolerance of the present invention is particularly advantageous for enterprise applications that can afford little or no downtime.
  • FIG. 4 is a flow diagram illustrating the operation of a service proxy in accordance with some embodiments of the present invention.
  • FIG. 4 shows the stages of operation that must be performed by a client that wishes to execute, in the RDBMS example, an SQL request.
  • a service proxy object is provided, and the service proxy object performs the necessary steps to encapsulate the process of obtaining a worker for a particular service.
  • the client simply requests execution of an operation on a service, and the process of obtaining a worker is transparent to the client, because the service proxy performs the necessary steps to obtain the worker.
  • This approach is advantageous, because this approach encapsulates the framework internals so that clients are not required to know anything about the framework internals, and clients do not have to perform the task of handling any errors encountered when executing the steps for obtaining a worker. Moreover, this approach advantageously allows the framework to support fault tolerant features such as automatically retrying the request if the original request fails (e.g., error handling).
  • the service proxy is an object that resides in the client and encapsulates a particular service in its entirety.
  • the service proxy intercepts every call from the client to the worker, and the service proxy includes the same set of methods as the worker.
  • the service proxy then reserves a worker (e.g., if a worker is not already reserved, then allocateWorker is called on the service to obtain a worker object reference) and dispatches the method (e.g., the execute SQL call) to the worker using a CORBA/IIOP call.
  • the service proxy obtains the result of the method from the worker and then passes the result back to the client.
  • the service proxy is aware of every method invocation on a worker.
  • each service in the service framework has a corresponding service proxy.
  • a service proxy encapsulates a service, because from the client's perspective the service proxy implements all the operations of the service itself.
  • the service proxy is responsible for insuring that a worker handle has been obtained before invoking the operation on the worker.
  • the task of locating the appropriate service and obtaining a worker is encapsulated within the service proxy.
  • Each client instantiates a service proxy and invokes the “execute SQL” operation on the service proxy.
  • All the instantiated service proxies (in each client) simply invoke the corresponding “execute SQL” operation on the service itself.
  • the client can instantiate a service and execute an operation on the service.
  • the service proxy actually obtains a handle to a worker and forwards all requests to the allocated worker.
  • FIG. 4 illustrates the stages of operation performed by the service proxy in accordance with some embodiments of the present invention.
  • Reference numeral 100 refers to a first stage in this embodiment.
  • the service proxy obtains a handle to the service locator.
  • the service locator object is registered with the ORB by providing a unique object name (e.g., using the obj_is_ready call).
  • the client can use the ORB-provided bind call and supply the name of the service locator object to obtain an object reference to the service locator.
  • the service framework provides a first level of workload balancing.
  • the findService operation returns the handle of a particular service locator instance selected among multiple instances of the service locator (e.g., service locator clones).
  • the service proxy calls findService on the service locator with a service name “RDBMS service”, in the RDBMS example.
  • the service locator returns the handle of an available RDBMS service (e.g., an RDBMS service that is currently up and running).
  • the service framework provides a second level of workload balancing.
  • the service locator periodically requests and loads statistics from all the services (e.g., across machines in a distributed configuration) and then can provide the handle of the least busy instance of the requested service based on the statistics.
  • security checks may be performed to insure that the client ID, as discussed further below, is valid for the requested service access (e.g., license restrictions).
  • a third level of workload balancing is provided.
  • reservations are requested based on some level of access or some class of access specified by the service proxy.
  • the requested worker access must be valid relative to the client ID of the client of the requesting service proxy. For example, a specific duration of reservation may be requested, exclusive access may be requested, or access that chooses to wait or not to wait may be requested as discussed further below with respect to FIG. 9.
  • the reservation mechanism is implemented in the service object and is discussed further below.
  • the allocateWorker operation returns an appropriate worker as determined by the service object's load balancing manager (LBM) based on runtime workload statistics of each worker as discussed further below with respect to FIG. 25.
  • the service proxy uses the worker handle to execute the SQL request on the worker, and the worker returns the output from the execution to the service proxy of the client.
  • the service proxy calls releaseWorker on the service object to release the reservation on the worker.
  • FIG. 4 illustrates the advantages of providing a service proxy that encapsulates the process of requesting a service.
  • the service proxy implements fault tolerance.
  • a client requests a service (e.g., in a wait mode as described further below with respect to FIG. 9) and there are no available workers for the service
  • the service proxy can request access to a worker for the service and the request is queued (e.g., in a first in, first out (FIFO) queue).
  • FIFO first in, first out
  • the service proxy can implement a fairly sophisticated system of retrying. For example, if the service proxy requested a worker for a service and the worker was not available, the service proxy can retry by re-requesting the service from the service locator.
  • the fault tolerance mechanisms performed by the service proxy are completely transparent to the client.
  • FIG. 5 shows the service proxy 82 of the client 80 of FIG. 3 in greater detail in accordance with some embodiments of the present invention.
  • the service proxy 82 encapsulates the complex logic involved in requesting a service.
  • each service has a service proxy that has the same set of operations as the service itself (i.e., the service proxy interface is identical to the interface of the service's workers).
  • the client uses the service proxy by simply instantiating the service proxy and executing an operation on the service proxy.
  • the service proxy is simply the service (i.e., the back-end resource).
  • the service proxy 82 has the following responsibilities: bind to the service locator, find an appropriate service using the service locator, obtain a worker using the service object, and execute the service request using the allocated worker.
  • the service proxy 82 can bind to the service locator by using the service locator's instance name. After binding to the service locator, the service proxy 82 caches the reference of the service locator for subsequent lookup.
  • Each service has a property called the instance name, which represents the name of the service which does not change for a particular service. Because the service proxy 82 has a one-to-one correspondence with a particular service, the service proxy 82 knows the instance name of the service it represents.
  • the service locator includes a repository of handles to services that have been instantiated by the SM.
  • the service proxy 82 uses the getService operation, passing the name of the service instance, to obtain a service handle. These operations will return the handle to a suitable service if available. Once it obtains a handle to a service, the service proxy 82 caches the reference for subsequent lookup.
  • the service proxy 82 uses a default set of reservation properties when reserving a worker.
  • a client is allowed to change the reservation properties before issuing any operations on the service proxy 82 and at any subsequent time.
  • the worker ID e.g., handle to the worker
  • the reservation context is passed automatically by the service proxy 82 on each outgoing call.
  • the service proxy 82 also hides the internal details such as reservation properties, reservation context, etc.
  • the service proxy 82 may perform invalidation of cached references periodically in order to detect any changes in the configuration (e.g., new service locators, new service clones, new workers).
  • Invalidating the cache periodically also forces the service proxy 82 to talk to the service locator periodically and therefore improves the effectiveness of the service locator and the service object in performing dynamic workload balancing.
  • the client may also be allowed to, at any time, invalidate the cached worker service and the cached service locator handles.
  • FIG. 6 is a flow diagram illustrating the operation of the client 80 of FIG. 3 during a service request in accordance with some embodiments of the present invention.
  • FIG. 6 illustrates the operation of performing a service request from the perspective of the client 80 of FIG. 3.
  • Reference numeral 140 refers to a first stage in this embodiment.
  • the client 80 requests a service, and the appropriate service proxy intercepts the service request (as discussed above).
  • the client executes the execute SQL request on the instantiated service proxy (e.g., the service proxy includes the same methods included in the workers of the requested service, and the service proxy executes the request on the allocated worker).
  • stage 144 the worker returns the output from the execution of the execute SQL request to the service proxy of the client, and) the service proxy forwards the output to the client. Accordingly, the service proxy 82 encapsulates the requested service operation, which significantly simplifies the operation from the perspective of the client.
  • FIG. 7 shows a service object 160 of the server 88 of FIG. 3 in accordance with another embodiment of the present invention.
  • the service object 160 allocates a worker from its worker pool, workers 162 and 164 , to the service proxy so that the service proxy can issue work requests.
  • the service object 160 may use an LBM (load balancing manager), as discussed further below with respect to FIG. 25, to select a worker for the service proxy, then the service object 160 calls newClient on the selected worker 162 to notify the worker of the reservation.
  • LBM load balancing manager
  • each service object (in some embodiments, there is only one service object per service) controls its own pool of workers.
  • the service object 160 controls the pool of workers including workers 162 and 164 .
  • worker allocation is implemented to support a variety of modes of access to workers, provide fast response time, and balance the workload from client requests across all workers in the worker pool.
  • the workers 162 and 164 encapsulate a limited resource such as an RDBMS.
  • the service object 160 provides access to the limited resource and ensures that all clients get their fair share of access to the limited resource. For example, worker should be relatively equally loaded at all times to ensure reasonably predictable throughput and linear scalability. Ignoring hardware and operating system scalability limitations, adding more workers may increase throughput. Accordingly, to handle these requirements, the service object 160 may include a worker reservation mechanism as discussed further below.
  • FIG. 8 provides a call to allocateWorker on a service object in accordance with some embodiments of the present invention.
  • the call to allocateWorker on a service object includes parameters for specifying the service, the service properties, and the reservation context.
  • the reservation context provides some history of the client. For example, any particular workers that have performed work for the client may be provided in the reservation context.
  • the service can allocate the same worker to a client that had previously done work for the client.
  • a worker may cache work results and worker hints respecting a particular client ID so that if the same worker is reallocated to the client, then the worker has this information already cached with respect to the client.
  • caching work results and worker hints would be particularly advantageous for a data service or any other service in which the client would benefit by returning to the same worker that cached previous work results.
  • the reservation context may include a client ID and security credentials for clients.
  • the service can actually recognize a client using the client ID.
  • the client ID is discussed further below with respect to FIG. 10.
  • FIG. 9 provides reservation properties 166 in accordance with some embodiments of the present invention.
  • a client can reserve a worker in the mode that is most suitable to the task to be performed by the client.
  • some or all of the reservation properties 166 provided in FIG. 9 may be implemented.
  • the service object 160 of FIG. 7 implements a reservation interface, as discussed further below with respect to FIG. 12. During the period that the worker is reserved for a particular client the client is allowed access to the worker. Once the reservation expires the client is no longer allowed access to the worker. Accordingly, to reserve a worker, the client issues a request specifying the reservation properties that apply to the reservation and any worker hints that the client would like to pass on to the service object.
  • the reservation properties 166 include a client priority, an access mode, a wait mode, and a reservation time.
  • the reservation properties 166 control the type of reservation that the client would like to obtain before the worker attempts to perform the desired action. Reserving the worker in the appropriate mode is critical. For example, if the worker allows multiple clients for read access, but a single client for write access, the client performing a write operation must reserve the worker in exclusive mode.
  • the reservation duration can be passed as a hint (e.g., a parameter provided in a call or method invocation) by the client for worker scheduling purposes.
  • the service object may prefer a short duration client over a long duration client. In some embodiments, there is no fixed time duration that classifies a request as short or long, and thus, this is simply up to the client's discretion.
  • the client priority determines how quickly the client can obtain a worker.
  • the worker pool that is instantiated by the service object contains workers of high, medium, and low priority as discussed further below with respect to FIG. 27.
  • the properties of the worker pool determine how many workers are instantiated and how many of each priority.
  • a high priority worker can only be used by a high priority client, a medium priority worker can be used by high and medium priority clients, and a low priority worker can be used by clients of any priority.
  • a high priority client waits only for any existing high priority clients. Hence, it is up to the client to decide its priority level before issuing the request.
  • the access mode determines how many concurrent reservations can be given out on a particular worker.
  • the maxClients property is a property of the workers that determines the number of concurrent reservations in shared mode that may be allocated to the worker (i.e., workers with maxClients greater than one represent multi-threaded workers). In exclusive mode, only one reservation is permitted. Accordingly, the access mode facilitates the maximum number of concurrent accesses to a limited resource.
  • the wait mode specifies the appropriate action if a suitable worker is not available.
  • the client can elect to wait in a queue indefinitely until a suitable worker is available (e.g., indefinite_wait), the client can elect to wait for a limited time period before re-obtaining control (e.g., timed_wait), or the client may simply choose not to wait at all (e.g., no_wait).
  • the reservation time specifies the duration of the reservation (in msec).
  • the client obtains a reservation for a worker.
  • the reservation is guaranteed for the reservation time (i.e., the reservation cannot be revoked during this time period).
  • choosing a long time period has its consequences. For example, if the client were to disappear or exit due to an error, the worker is locked for this time period. This is undesirable in situations in which the worker is transient (e.g., JAVA applets).
  • a more stable client e.g., a transaction manager
  • choosing too short of a reservation time may cause frequent revocations and interruptions in the work being performed.
  • FIG. 10 provides a reservation context 168 in accordance with some embodiments of the present invention.
  • the client 80 of FIG. 3 passes a reservation context 168 on each call to the service object 90 of FIG. 3.
  • the reservation context 168 contains information about the client, the service, and the last worker that was reserved.
  • the service object 90 of FIG. 3 uses the reservation context as a hint when allocating a worker. Once a worker is allocated, the service object 90 of FIG. 3 modifies the worker key with the reserved worker ID.
  • the worker checks the reservation context 168 to make sure that the client key is present and keeps track of clients that have reserved the worker. The worker also verifies if the client has a valid reservation (e.g., the reservation has not been revoked).
  • the reservation context 168 as shown in FIG. 10 includes a client key, a service key, and a worker key.
  • the client key identifies the client
  • the service key identifies the service object that returned the previous reservation
  • the worker key identifies the previously reserved worker.
  • the client simply passes the worker key as a hint to the service object's reservation mechanism.
  • the service object will try to allocate the hinted worker if it is available. If not, the service object may allocate the next available worker in the worker pool.
  • the client can modify the reservation properties 168 using the setReservationProperties operation of the service object's reservation interface.
  • the setReservationProperties operation can be used to extend an existing reservation before the reservation expires or to change the mode of reservation from exclusive to shared once the critical updates in a database have been completed.
  • FIG. 11 provides service properties 180 in accordance with some embodiments of the present invention.
  • service.instanceName provides the instance name of the service.
  • Service.label provides the user visible name of the service.
  • Service.description provides a description of the service.
  • Service.serviceID uniquely identifies the service. Thus, multiple services with the same instance name and properties will have a different value for Service.serviceID.
  • Service.processLocation provides whether the service is in process or out of process (e.g., indicating whether or not the service will be launched in its own virtual machine (VM)).
  • VM virtual machine
  • a C++ object is preferably launched outside a JAVA VM.
  • Service.type provides the JAVA class name of the service.
  • Service.type indicates the class to instantiate to bring up the service.
  • Service.numWorkers provides the number of workers maintained by the service.
  • Service.numHighPriWorkers provides the number of high priority workers maintained by the service.
  • Service.maxWorkerRestarts provides the maximum number of times a service will attempt to restart a failed worker.
  • Service.launchSequence provides that the lower the number the earlier the SM will launch the service (e.g., the results may be ambiguous if there are two services with the same launch sequence).
  • Service.inactiveManagerInterval provides the minimum number of milliseconds before a service considers its parent SM dead and terminates itself.
  • FIG. 12 provides a reservation interface of the service object 90 of FIG. 3 in accordance with some embodiments of the present invention.
  • the reservation interface shown in FIG. 12 is written in standard Interface Definition Language (IDL).
  • IDL Interface Definition Language
  • FIG. 13 is a flow diagram illustrating a reservation revocation operation in accordance with some embodiments of the present invention.
  • the service object 90 of FIG. 3 may include a reservation mechanism that performs the reservation revocation operation (i.e., asynchronous reservation revocation).
  • a reservation mechanism that performs the reservation revocation operation (i.e., asynchronous reservation revocation).
  • a worker reservation has expired, the client whose reservation expired is not immediately denied access to the worker.
  • Reference numeral 200 refers to a first stage in this embodiment.
  • the reservation mechanism determines whether or not a client's reservation on a worker has expired. If the client's reservation on the worker has not expired, then as shown in stage 202 the client may continue to use the worker.
  • the reservation mechanism determines whether or not other workers are available. In particular, this allows the client to continue to use the worker until no workers are available for a new client.
  • the reservation mechanism revokes the client's reservation on the worker assuming that, at this time, there are no workers available for new clients, and a new client is requesting a worker (i.e., all the workers in the pool have been reserved by maxClients clients or clients in exclusive mode).
  • the reservation mechanism revokes a reservation of a client whose reservation period has expired.
  • a reservation is revoked only if there are no available workers (i.e., every worker has the maximum number of clients reserved), and there is at least one expired reservation. If there are no available workers, then the reservation mechanism will revoke the oldest-expired reservation on the least-loaded worker.
  • reservations can be revoked only if the period specified in the reservation properties has expired. Reservations cannot be revoked if the reservation time of FIG. 9 has not expired. Thus, the client can continue to use the worker until the worker is revoked. Once a reservation has been revoked, the worker now has room for at least one more client. This available slot is given to a new client that requested a worker. Such a revocation causes a call back notification to be sent to the client's service proxy. As discussed above, the client's service proxy for the service encapsulates the entire worker reservation logic. The service proxy uses the notification to invalidate any cached worker handles. Accordingly, any further request on the service proxy from the client will cause the service proxy to obtain a new reservation for a worker before proceeding with the request.
  • FIG. 14 is a flow diagram illustrating the operation of reserving a previously reserved worker in accordance with some embodiments of the present invention.
  • Reference numeral 220 refers to a first stage in this embodiment.
  • the client passes the worker ID of the previously reserved worker (e.g., in the worker key of the reservation context 168 of FIG. 10) as a worker hint to the reservation mechanism (e.g., of the service object 90 of FIG. 3).
  • the service object will attempt to allocate the previously reserved worker if it is available.
  • stage 224 if the previously reserved worker is available, then the service object allocates the previously reserved worker as provided in the hint. However, if not, then the service object simply allocates the next available worker, in stage 226 .
  • the reservation context 168 of FIG. 10 contains information about the client, the service, and the previously reserved worker.
  • the service object uses the reservation context as a hint when allocating a worker.
  • the service object fills in the reservation context with the reserved worker ID, as shown in stage 228 of FIG. 14.
  • the worker also may check the reservation context to make sure that the client ID is present and to keep track of clients that have reserved the worker. The worker may also verify if the client has a valid reservation (e.g., that the reservation has not been revoked).
  • FIG. 15 provides a reservation revocation call back interface in accordance with some embodiments of the present invention.
  • the reservation revocation call back interface as shown in FIG. 15 is written in IDL.
  • a call back notification mechanism increases scalability. For example, a client can continue to use an expired reservation until the concurrent load on the system increases to a level at which reservation revocations begin to occur. Thus, a client may not release a worker even after obtaining a new reservation, and still not cause new clients problems when trying to access a limited resource. Even if the call back notification fails to reach the client, the worker will still be notified of the revocation. If the service proxy issues a request to the worker using an expired reservation, the worker raises an exception indicating this problem. In particular, as discussed above with respect to FIG. 14, the worker checks the reservation context of each client that attempts to use the worker.
  • the service proxy upon receipt of the exception raised by the worker will obtain a new reservation and retry the request.
  • the service object is free to revoke the client's reservation and offer the reservation to some other client.
  • a notification is sent to the client's service proxy that holds the reservation.
  • the client's service proxy can then invalidate the worker reference immediately. Any new operations performed on the service proxy will force it to allocate a new worker before dispatching the operation.
  • a service proxy obtains a reservation on a worker object and may not release the worker until there is a lack of free workers and there are competing clients for the workers.
  • the service proxy may never release the worker.
  • the service proxy does not issue releaseWorker and allocateWorker requests to the service object, and the service proxy simply continues to use the worker object until no longer needed. If there is a worker contention and a reservation has to be revoked, then the reservation revocation callback interface is used and a callback is issued to the service proxy that is holding the worker (e.g., the reservation time of FIG. 9 has expired).
  • FIG. 16 provides worker properties 230 in accordance with some embodiments of the present invention.
  • the workers provide an encapsulation of a limited resource.
  • the worker interface derives from the administrative (admin) layer.
  • the service object 90 of FIG. 3 uses the worker's admin layer to activate and deactivate the workers 92 , 94 , and 96 .
  • the worker interface implements operations that allow the service to notify the worker about its reservations.
  • the worker uses the reservation information (e.g., reservation properties 166 of FIG. 9 and reservation context 168 of FIG. 10) to disallow unexpected or expired clients from accessing the worker.
  • the worker also keeps track of clients that have reserved the worker and ensures that the number of clients does not exceed maxClients.
  • the service instantiates the worker either in process or out of process as discussed further below with respect to FIG. 19.
  • the service object instantiates the workers into the worker registry, the service object calls setProperties to pass on the worker properties. Once the worker receives the properties and initializes the internal data structures such as the worker's client list, the worker is ready to receive client requests.
  • worker.numProcesses provides the number of processes to start up to support the number of workers supported when the workers are out of process. In some embodiments, the numWorkers divided by the numProcesses equals the numWorkersPerProcess.
  • Worker.processLocation is either in process or out of process indicating whether the workers will run in the same VM as the service.
  • Worker.type indicates, for example, the JAVA class that will be instantiated for JAVA workers (either in process or out of process).
  • Worker.javaVM specifies the JAVA VM used to launch worker.type for out of process JAVA workers.
  • Worker.javaDebugVM is the default command to run the JAVA VM in debug mode (e.g., JAVA_g-debug).
  • Worker.exe indicates the command line to launch (C++) out-of-process workers.
  • Worker.portNumber is the port number on which out of process workers receive requests.
  • a port number represents a numbered network connection.
  • a telephone number is a port number in the telecommunication network.
  • the Internet is based on the TCP/IP network protocol.
  • the port number is local to a server (i.e., unique within the server), and the port number is a unique integer that represents the IP address of the network connection to the server.
  • an allocated worker listens for an incoming request on the IP address of the network connection, and the incoming request may be an operation that is exported by the worker in the IDL interface of the worker.
  • Worker.maxClients is the maximum number of simultaneous clients that are allowed access to a single worker. If the maxClients value is greater than 1 , then the worker is thread safe (i.e., multi-threaded).
  • Worker.inactiveServiceInterval is the number of milliseconds before the worker considers its service dead and exits.
  • each worker is periodically pinged by the service object, and the pinging interval depends on the service's pingInterval property (i.e., the Service.pingInterval period is less than the Worker.inactiveServiceInterval period).
  • the pinging of workers may be used to obtain runtime workload statistics from the workers for workload balancing purposes and also to obtain the current state of the workers. For example, if a worker has failed for some reason, the state indication will help the service object restart the worker and bring the worker back online, which represents part of the fault tolerance aspects of the service framework of the present invention.
  • the worker assumes that the service object is no longer online, and the worker terminates itself.
  • the worker terminates itself, because the service object may have failed without terminating its workers. If the service object failed, then the SM that monitors the failed service will restart the failed service, and the restart of the failed service will cause the original worker pool to be stranded, and thus, the worker terminates itself to avoid being stranded.
  • ServiceType.XXX for each service is expected to have its own properties (prefixed by the service type), and there can be an arbitrary number of these properties.
  • the ServiceType.XXX property is a property of a service identified by ServiceType.
  • the “RDBMS Data Service” has a service type DataService and has a property pingInterval that defines how frequently the DataService will ping its workers.
  • this property has a name (e.g., DataService.pingInterval), and the property has a value (e.g., 200 seconds).
  • the properties are implemented in JAVA and stored in a properties file, and the service manager is responsible for reading and writing the stored properties.
  • FIG. 17 is a flow diagram illustrating the operation of pinging workers in accordance with some embodiments of the present invention.
  • Reference numeral 240 refers to a first stage in this embodiment.
  • each worker of a service is pinged by the service periodically.
  • Each worker also includes a service object ping interval timer.
  • a worker determines whether the service object has pinged the worker within a particular time interval. If not, then the worker considers the service object to be dead and the worker terminates itself as shown in stage 248 . Otherwise, the pinging operation repeats as shown in FIG. 17. Accordingly, the pinging operation provides fault tolerance in the service framework of the present invention.
  • FIG. 18 shows a server 280 in accordance with another embodiment of the present invention.
  • a server 280 includes an admin interface 282 , a SM 284 , a start/stop functionality 286 , and a configuration 288 .
  • the service framework is based on a distributed object model, and there can be many objects in the service framework that interact with each other, it is preferred to group objects together into a higher level entity so that the distributed objects can be more effectively managed.
  • the configuration 288 includes a collection of services and service locators along with their properties.
  • the configuration 288 is maintained by the SM 284 . In particular, when the SM 284 comes up, it comes up with a specified configuration of services and service locators, such as a service locator 290 .
  • a configuration may contain the following services: an RDBMS service with two clones, a session/state management service with one worker, and a service locator with three clones.
  • the configuration is then given a name, and the property files for each service instance in the configuration are stored within the configuration.
  • the configuration 288 includes a cell.
  • a cell represents a distributed configuration. Two hosts with the same configuration name but different contents can link up together to form a single cell.
  • the cell is designated by a list of hosts that the configuration spans.
  • the set of service locators and services is common to the entire cell (i.e., each service locator contains a list of all services in all hosts in the cell).
  • clients accessing any service locator in the cell can access any service in the cell.
  • the cell is maintained in a consistent manner by the SM managing the individual configurations. SM operations may include many different functions such as managing the service and service locator instances, providing fault tolerance by pinging as discussed above with respect to FIG. 17, and exporting a management interface to administer the services.
  • the management interface can be used by administrative tools to change the SM's configuration (e.g., add a new service, change service locator clones, etc.).
  • the management interface can be used to modify the operations of any of the entities in the configuration (e.g., change numWorkers for an RDBMS service).
  • the management interface offers mechanisms 286 to start/stop each instance of a service or service locator and obtain the current state of each of the instances in the configuration.
  • the service locators are linked to the configurations.
  • a service locator in a configuration on a particular server actually knows about services on another system, the distributed configuration or the cell.
  • a request for a service is made to the service locator 290 , then a client can actually get access to a service provided by the server 280 , but may also be provided access to a service instance in the cell which is residing on a server that may be anywhere on the network (e.g., the global Internet).
  • this entire process is transparent to the client, because the client's service proxy is simply returned a service handle.
  • the SM 284 is only responsible for services in its own configuration 288 .
  • the SM 284 is responsible to supply the information regarding its configuration 288 to all service locators in the cell.
  • the service locators in the cell are well known (i.e., they are actually embedded in the cell's description itself). Thus, given a cell, a connection can be made to service locators in the cell.
  • the SM 284 knows the list of services, loads this information and the properties of the service, and simply forwards such information periodically to the service locator 290 .
  • the service locator 290 can assume that the information provided from the SM 284 represents currently available services.
  • FIG. 19 shows an out-of-process factory 300 and an in-process factory 308 in accordance with some embodiments of the present invention.
  • the number of workers instantiated by the service is limited by the service property service.numWorkers. All the workers may be of the same type or of different types (e.g., high priority and low priority workers).
  • the workers are instantiated when the service is initialized by the SM (i.e., the properties of the service and the workers are passed to the service object). Workers can be instantiated in a separate process or within the same process as the service object as shown by out-of-process factory 300 and in-process factory 308 , respectively. Workers are instantiated by using worker object factories, as shown by an object factory 302 and an object factory 312 .
  • the object factory is an object that can instantiate or fabricate any number of objects of a given type.
  • an object-oriented language like JAVA or C++ to instantiate an object is to create a new object using the “new” syntax operator, and in CORBA, a CORBA object is instantiated using the “obj_is_ready” operation defined in CORBA.
  • a worker object factory such as the object factory 302 and the object factory 312 can instantiate any number of worker objects.
  • the object factory 312 is a CORBA object that can be in the same process (in process).
  • the service object e.g., the service object 90 of FIG.
  • type 1 workers 318 e.g., low priority workers
  • type 2 workers 320 e.g., high priority workers
  • the object factory 312 is a CORBA object implemented in JAVA.
  • the object factory can also be in a separate process (out of process), in which case, the service object spawns (forks) a separate process, and the process then instantiates an object factory and passes a handle to the object factory back to the creator.
  • the spawned process creates the object factory, registers the object 302 (i.e., the object factory) with the ORB, and passes a reference to the object back to the parent process using the standard I/O string.
  • the object and the parent process e.g., the service object 90 of FIG. 3
  • the service object can then use the object factory 302 to create type 1 workers 314 and type 2 workers 316 .
  • the object factory 302 is a CORBA object implemented in JAVA.
  • the object factory is a flexible mechanism to create and manage pools of similar objects (i.e., objects that have the same type and the same set of properties) such as worker pools.
  • object factories are used to create the service objects (in the SM), the worker pools (in the service), and other objects such as the service locator.
  • the object factory is a remote CORBA object that is implemented in JAVA and C++.
  • a JAVA-based factory can instantiate any CORBA object that is implemented in JAVA and instantiates the object in the same address space as the factory. Accordingly, if the factory object is in a separate address space, any objects created in the factory are in the separate address space of the factory object (i.e., in the separate process).
  • the same JAVA-based factory object can instantiate any JAVA-based CORBA object
  • the same JAVA-based factory may be used to instantiate a service locator (e.g., a JAVA-implemented CORBA object) or a service object (e.g., a JAVA-implemented CORBA object) and, thus, reside in the same address space.
  • a service locator e.g., a JAVA-implemented CORBA object
  • a service object e.g., a JAVA-implemented CORBA object
  • an object factory implemented in C++ is more limited in function than a JAVA-based object factory, because the object factory implemented in C++ can only instantiate similar objects (e.g., due to limitations of the C++ language).
  • the DataService workers are implemented in C++, and the DataService worker objects are instantiated in a separate process using the object factory implemented in C++.
  • the object factory implemented in C++ can only instantiate DataService worker objects.
  • the number-of workers can fluctuate dynamically using an object factory.
  • new workers can be added or the number of workers can be reduced, based on parameters such as the workload on the existing number of workers.
  • the configuration e.g., the configuration 288 of FIG. 18
  • the configuration may provide a minimum or maximum range of the number of workers for a service, and the number of workers can be implemented to fluctuate dynamically within the configured range depending on various parameters such as the workload on the present number of workers.
  • FIG. 20 shows clone factories in accordance with some embodiments of the present invention.
  • An object factory can instantiate basically any CORBA object.
  • the object factory instantiates a CORBA object using CORBA (and JAVA) introspection to determine the type of object to be created and its parameters (e.g., object name).
  • the SM uses this functionality to create clone factories.
  • a clone is another instance of an entity that behaves exactly like the original entity (i.e., the clone has the same properties or attributes as the original entity) but resides in a different address space.
  • a service locator clone is another instance of the service locator object in the same machine, and the service manager may instantiate a service locator clone in the same machine for fault tolerance purposes (e.g., if one service locator instance fails, the other service locator instance is still available).
  • a SM 320 has created clone factories 322 and 324 .
  • the SM 320 creates factories for each service and service locator.
  • Each clone of a service (or service locator) is located in a different clone factory. For example, if there are multiple clones for a service, the first may be located in the clone factory 322 , the second in the clone factory 324 , etc.
  • two service locator clones and two service clones may be provided.
  • Each clone has a clone ID.
  • one service locator clone instance may have a clone ID 0
  • the other service locator clone instance may have a clone ID 1 .
  • one DataService instance may have a clone ID 0
  • the other DataService instance may have a clone ID 1 .
  • the SM 320 instantiates these clones.
  • the SM 320 instantiates two object factories, one for clone 0 instances and the other for clone 1 instances.
  • the two clone factories may be in different address spaces (processes), which provides fault tolerance in the service framework of the present invention (e.g., insuring that no two clones are in the same address space provides fault tolerance).
  • the clone factory 0 instantiates the service locator clone 0 and the DataService clone 0 .
  • the clone factory 1 instantiates the service locator clone 1 and the DataService clone 1 .
  • a service can have any number of clones, and the SM 320 will instantiate the appropriate number of clone factories.
  • a process represents an operating system term that may also be used to refer to an address space.
  • operating systems such as HP-UXTM or Windows NTTM use the term process to refer to a region of computer memory that is separated from the rest of the computer's memory (e.g., allocated memory).
  • a region of memory is allocated to a program that is being executed.
  • the program is launched by executing an executable file (e.g., .exe in Windows NT).
  • an executable file e.g., .exe in Windows NT
  • the region of memory is deallocated and returned to the computer's memory pool.
  • a program needs a region of memory to maintain data that it has read from the terminal, file system, or from the network.
  • the program manipulates the data and performs its work all within the allocated region of memory.
  • a process is a program that is executing within a region of memory allocated by the operating system.
  • an out-of-process worker represents a worker object that is instantiated in a process that is separate from the process where the service object resides.
  • An out-of-process service object represents a service object that resides in a process that is separate from the process where the SM object resides.
  • Clone factories represent a set of factory objects with each factory residing in a separate process.
  • clone factories such as the clone factories 322 and 324 of FIG. 20 provide additional fault tolerance for the service framework of the present invention.
  • clone factories are located in different processes so that each clone provides additional fault tolerance and high availability.
  • the service object e.g., the service object 90 of FIG. 3
  • the service object pings the workers to make sure that the worker pool is alive and well, as discussed above with respect to FIG. 17. If a worker in the pool does not respond to the pings, the service object re-instantiates the failed worker using the appropriate factory.
  • two clones may be implemented on the same machine. Such an implementation would be useful for providing fault tolerance.
  • a clone provides basically an identical worker pool, thus, providing the same or nearly identical work as the original worker pool.
  • a process or VM is lost, the state that the clients have set up is not completely lost.
  • a loss of a process or VM on a particular server will affect some of the clients but not all of the clients attached to the server.
  • clones may advantageously provide for fault tolerance and high availability, because clones in different address spaces may not have been affected. Accordingly, the service framework of the present invention provides a fault tolerance architecture.
  • FIG. 21 provides an object factory interface in accordance with some embodiments of the present invention.
  • the object factory interface of FIG. 21 is written in IDL.
  • FIG. 22 provides service locator properties 330 in accordance with some embodiments of the present invention.
  • service locators may be cloned, but the service locator clones may not communicate with each other.
  • a service locator proxy keeps track of the various service locators in the network and can select the service locator with a minimum workload on which to perform its service lookups.
  • the service locator proxy is used by almost all the modules in the framework including the service proxy to encapsulate access to the service locator.
  • the service locator proxy provides another level of workload balancing management in the service framework of the present invention.
  • the service locator properties 330 are shown in FIG. 22.
  • sl.javaVM is the VM command line used to launch the out-of-process service locators
  • sl.javaDebugVM is the default command to run the JAVAVM in debug mode
  • sl.inactiveManagerInterval is the minimum number of milliseconds that can elapse before the service locator considers the VM out of service and unregisters its services
  • sl.locatorId is the unique identifier of the service locator (e.g., the service locator instance's object name)
  • sl.owningManagerId is the identifier of the owning manager (e.g., the SM 86 of FIG. 3 assuming that the SM 86 launched the service locator).
  • FIG. 23 provides a service locator interface in accordance with some embodiments of the present invention.
  • FIG. 23 provides a service locator interface written in IDL.
  • FIG. 24 provides a load balancing manager (LBM) interface in accordance with some embodiments of the present invention.
  • the LBM interface may be written in IDL as provided in FIG. 24.
  • the LBM is an entity of the service object.
  • the service object instantiates an LBM to manage the pool of workers.
  • the LBM may be a plug-in object that can be customized or entirely replaced.
  • the LBM provides a level of workload balancing in the service framework of the present invention.
  • the service object may use the LBM to perform workload balancing among its workers in the worker pool.
  • the service framework provides two managers, a fully capable LBM and a null LBM.
  • the fully capable LBM supports access modes (e.g., exclusive mode) and also provides a sophisticated scheduling scheme based on worker statistics.
  • the null LBM does not support access modes (i.e., the null LBM treats them all as the same and randomly selects a worker from the pool of workers). If a service encapsulates a limited resource, the fully capable LBM would be preferred. However, if the service encapsulates an abundant resource (e.g., provides more than one worker 92 per service), or if there is the constraint that there may be only one worker per service, then the null LBM would be sufficient and would improve performance.
  • an abundant resource e.g., provides more than one worker 92 per service
  • the null LBM would
  • the LBM acts as a repository of worker objects.
  • the service object creates the workers in the worker pool and registers each worker with the LBM.
  • each worker in the worker pool as soon as it is launched, is registered with the LBM using the registerWorker method.
  • the LBM is an entity of the service object, the worker is registered with the LBM, because the LBM may be a plug-in object, so it may be independent of the service object (i.e., does not share internal data with the service object).
  • the service object unregisters the worker from the LBM's registry using the unregisterWorker method, and the service object may terminate the worker pool.
  • FIG. 25 shows a fully capable LBM 360 in accordance with some embodiments of the present invention.
  • the fully capable LBM uses a sophisticated scheme of priority queues and a scheduler, an allocation manager 362 , to implement the allocateWorker and releaseWorker methods.
  • the service object e.g., the service object 90 of FIG. 3 simply forwards these requests to the registered LBM.
  • the fully capable LBM 360 includes five priority queues.
  • an idle queue 368 contains workers that have no client reservations. In the idle queue 368 , workers may be sorted in increasing order of workload.
  • the workload value of a worker is a floating point number computed by the worker that represents the load on the worker.
  • the workload value may be determined by a calculation based upon such factors as the ratio of time spent in executing a worker method to the elapsed time and the CPU load.
  • the elapsed time represents the time between pings from the service object to the worker (e.g., the value provided by the property Service.pingInterval).
  • the time spent in executing a method is calculated by summing the time spent in any operation in the worker.
  • the ratio of the elapsed time to the time spent in executing a worker method provides an indication of the ratio of time that was spent by the worker actually performing a worker method.
  • the CPU (central processing unit or processor) load is the time spent by the computer in performing work. Accordingly, the combination of these two factors provides a measure of the workload on the worker and the workload on the CPU.
  • the usable queue 370 contains workers that have some client reservations, but the number of clients for each worker is less than the maxClients.
  • workers may be sorted in increasing order of a combination of workload and available client reservation slots.
  • An unusable queue 374 contains workers that have client reservations with the number of clients equal to maxClients per worker (i.e., no more reservations are possible against such workers). In some embodiments, the unusable queue 374 , is not sorted.
  • a revocable queue 372 contains workers that have one or more reservations that have timed out and can be revoked if necessary.
  • workers may be sorted based on the time of reservation expiration (i.e., workers containing older revocations are higher in the queue).
  • a client wait queue 366 contains clients that are waiting for a worker to be allocated. In some embodiments, all workers are initially in the idle queue 368 , and as reservations are handed out, the workers are moved into the usable queue 370 , the unusable queue 374 , and the revocable queue 372 as appropriate.
  • the five queues are managed by two background threads, a queue manager 364 and an allocation manager 362 .
  • the queue manager 364 handles the tasks of maintaining a sorted order on each of the worker queues (except the unusable queue 374 which is not sorted), as described above.
  • the queue manager 364 periodically browses the unusable queue 374 and looks for expired reservations. If a worker in the unusable queue 374 has an expired reservation, the worker is moved to the revocable queue 372 , but the expired reservation is not yet revoked.
  • the allocation manager 362 is the scheduler that manages the client wait queue 366 .
  • the allocation manager 362 maintains the client wait queue 366 in first come first serve (FCFS) order, but maintains the discretion to move clients forward based on their declared duration (i.e., based on the reservation properties such as the access mode, the reservation time, etc., as discussed above with respect to FIG. 9). For example, shorter duration requests are generally moved ahead of longer duration requests.
  • the LBM may move workers into the revocable queue if the workers have clients holding reservations with them that have expired (e.g., based on the reservation timeout).
  • the allocation manager 362 handles various client wait modes such as no_wait, timed_wait, and indefinite_wait as discussed above with respect to FIG. 9. The allocation manager 362 also scans the worker queues waiting for an available worker.
  • the allocation manager 362 checks for any worker hints supplied in the waiting client's reservation context and first attempts to reserve the hinted worker. If the hinted worker is unusable, then the allocation manager 362 attempts to reserve the next available worker. If a worker is available in the idle queue 368 or the usable queue 370 , then the allocation manager 362 immediately allocates the available worker to the waiting client. If no workers are available in the idle queue 368 or the usable queue 370 , then the allocation manager 362 scans the revocable queue 372 waiting for new workers to appear.
  • the allocation manager 362 allocates the revocable worker to the waiting client after revoking the expired reservation (e.g., the first worker in the revocable queue 372 is selected for a revocation and the oldest expired reservation is revoked).
  • the revocation involves a notification to the affected worker using the clientRelease call and a callback to the client that holds the expired reservation using the reservationTimedOut call on the ServiceProxy callback interface.
  • FIGS. 26 A- 26 B are a flow diagram illustrating the call sequence operation in accordance with some embodiments of the present invention.
  • the service proxy obtains a service handle from the service locator.
  • the service proxy issues the allocateWorker call with a set of reservation properties and an uninitialized reservation context.
  • the service object forwards the request to the LBM 360 .
  • the LBM determines if any clients are waiting. If clients are waiting, then the LBM enqueues the request in the client wait queue in stage 408 . Otherwise, the LBM proceeds to stage 410 .
  • the LBM attempts to-allocate a worker from the idle queue or the usable queue, but if no workers are available, then the LBM attempts to allocate a worker from the revocable queue.
  • the reservation context is uninitialized, so that there are no worker hints available.
  • the LBM takes the first entry in the idle queue. If the idle queue is empty, then the LBM checks the usable queue. If the usable queue is empty, then the LBM checks the revocable queue. If no workers are available in the revocable queue, then the LBM checks the unusable queue to see if any workers have expired reservations. If so, the LBM moves a worker with an expired reservation to the revocable queue.
  • the LBM selects the first worker in the revocable queue for a revocation and revokes the oldest expired reservation.
  • the revocation involves a notification to the affected worker using the clientRelease call and a callback to the client that holds the expired reservation.
  • a worker with a free reservation is available (e.g., in the revocable queue, the usable queue, or the idle queue)
  • a new reservation is created for the client with the appropriate reservation properties.
  • the worker is notified of the new client and its reservation properties, and the reservation context is appropriately modified (e.g., the reservation context may include current information in the client key, the service key, and the worker key).
  • the affected worker moves to the appropriate queues (e.g., from the idle queue to the usable queue or the usable queue to the unusable queue, etc.).
  • the call to allocateWorker returns with a suitably filled reservation context.
  • the service proxy stores the reservation context and then issues the request to the worker with the reservation context.
  • the worker receives the request, verifies the request using the reservation context (e.g., checks whether the client has valid access to the worker, that is, the worker is notified by the service object of the reservation), and then executes the request.
  • the worker returns the result of the request to the client's service proxy which provides the result to the client.
  • FIG. 27 shows a client wait queue 430 and an idle queue 438 of the LBM 360 of FIG. 25 in accordance with another embodiment of the present invention.
  • the client wait queue 430 may include three internal queues, one for each priority level, high priority 432 , medium priority 434 , and low priority 436 .
  • the idle queue 438 may include three internal queues, one for each priority level, high priority 440 , medium priority 442 , and low priority 444 .
  • each queue of the LBM 360 of FIG. 25 may be similarly implemented to include priority sub-queues.
  • the allocation manager always services the high priority requests ahead of the lower priority requests.
  • workers are assigned a priority.
  • high priority workers only work for high priority clients, and the high priority workers are initially entered in the high priority idle queue 440 of the idle queue 438 . When workers are moved from one queue to another, they are moved into the appropriate priority sub-queue. Accordingly, this embodiment provides yet another level of workload balancing in the service framework of the present invention.
  • each reservation session has a specified durationTimeout attribute in the reservation properties.
  • the reservation session represents a particular reservation that a service proxy of a client holds on a worker.
  • the service object records the reservation session and uses the information in the session to control the reservation (e.g., revoke the reservation once the timeout expires).
  • the reservation may include reservation properties provided by the service proxy on the allocateWorker call, and the reservation context, which is sent back and forth between the proxy and the service on all calls.
  • the reservation context includes the client key (identifies the service proxy uniquely), the service key which identifies the service object itself, and the worker key which identifies the worker uniquely within the service.
  • Every service proxy has to supply a valid durationTimeout value when calling allocateWorker.
  • the durationTimeout determines the length of time (in milliseconds) that the service object (e.g., the service object 90 ) guarantees the worker to stay reserved for this client from the moment the worker has been allocated. If the client has a set of operations to be called that must be executed on the same worker instance, then this set of operations must be completed within the durationTimeout interval for that work to be guaranteed. Once this interval expires, the service object may revoke the reservation of this client and offer the worker to another client that is waiting for a worker to become available.
  • the client does not immediately lose the worker reservation (i.e., asynchronous reservation revocation).
  • the client loses the reservation only if there exists a contention. If there are other clients waiting for the worker, the client that has an expired durationTimeout may lose the worker. If there is no contention, the client's reservation is usually still valid, and the client can keep using the worker.
  • the service object decides to revoke the reservation, then the service object issues the reservationTimedOut call to notify the service proxy. The first subsequent operation on the service proxy will try to reserve a new worker before executing the requested operation.
  • an inactiveTimeout detects idle clients and revokes their reservation. If a service proxy that has reserved a worker has not used the worker within the inactiveTimeout interval, then the worker notifies the service object, and the service object may revoke the worker and assign it to another client that is waiting for the worker. If the worker is revoked, then the service proxy is notified of the revocation using the reservationTimedOut call. In some embodiments, such a revocation occurs only if there is contention for workers. In some embodiments, the difference between the durationTimeout and the inactiveTimeout is that the durationTimeout is handled by the service object whereas the inactiveTimeout is handled by the worker.
  • FIG. 28 shows a service object 450 and an LBM 454 according to another embodiment of the present invention.
  • the service object 450 periodically pings each worker in the worker pool to obtain worker statistics 452 such as the workload of each of the workers.
  • the service object 450 supplies the worker statistics 452 to the LBM 454 which uses the worker statistics 452 for workload balancing.
  • the LBM 454 may use the workload statistics 452 to sort the worker queues 458 , 460 , and 462 such as the idle queue, the usable queue, and the unusable queue.
  • the service object ping fails on a particular worker, then the worker is unregistered from the LBM's worker registry 456 by the service object, and all existing reservations on the worker are revoked by the service object 450 .
  • the service object 450 will then re-instantiate the worker and register the re-instantiated worker in the LBM's registry 456 .
  • the service object 450 maintains the runtime statistics of each worker and constructs representative service statistics based on the worker statistics 452 such as the average of the worker numbers for certain statistics (e.g., workload).
  • the service object 450 periodically forwards this information to the parent of the SM in response to the periodic pings from the SM (i.e., the parent of the SM is the SM that instantiated the service object).
  • the SM periodically passes the service statistics along with the service information to the service locators in the cell that are responsible for distributing the object references of the registered services. These periodic updates are responsible for keeping the service locator's repository up to date.
  • FIG. 29 shows the scalability of the service framework in accordance with some embodiments of the present invention.
  • the service framework of the present invention is based on a scalable architecture.
  • the service framework includes a variety of features that enhance scalability such as clones (e.g., service locator clones, service clones, etc.), multiple workers, multi-threaded workers (discussed above), asynchronous revocation callbacks (discussed above), and distributed configurations or cells (e.g., services that are part of the same administrative framework may be distributed across multiple machines as described above with respect to FIG. 18).
  • Scalability can improve throughput almost linearly, ideally, with the addition of resources. For example, in a SM that manages one instance of an RDBMS service, adding another instance of the service should double throughput, in the ideal case. Such an increase in throughput should be linear as additional service instances are added.
  • scalability does not increase linearly because of bottlenecks in the system that arise as the number of resources increase significantly. Also, the network bandwidth and the CPU power are limited and therefore inhibit a linear increase in scalability.
  • the service framework of the present invention can increase scalability by providing service locator clones and service clones.
  • a clone is another instance of an object that is essentially identical to the original instance. All clones use the same set of properties.
  • a clone of a service represents another instance of the service object with its own worker pool. The two instances of the service are quite independent and will perform their own reservations and execution of requests.
  • clones live in different address spaces in computer storage. Accordingly, if a clone goes down for some reason, it normally does not affect the other clones.
  • clones also introduce another level of fault tolerance in the service framework of the present invention.
  • each service has a property that determines the number of clones for the service.
  • the SM starts all clones of a service when the service is started. Clones are applicable to any SM managed instance (e.g., a service locator instance).
  • a SM managed instance represents an instance that the SM instantiated and which the SM periodically pings.
  • FIG. 29 provides a service locator clone 474 and a service locator clone 476 .
  • the SM registers the service information with all available service locator clones.
  • each clone is capable of providing handles to any service in the network.
  • a service proxy 472 residing in a client 470 , that needs to bind to, for example, an RDBMS service can send a getService request to any one of the service locators, the service locator 476 or the service locator clone 474 , thereby balancing the workload among the multiple service locator instances.
  • multiple service locator instances possibly on different servers, can also be provided. This would further increase scalability if, for example, a particular server becomes CPU-bound (i.e., processor bound).
  • FIG. 29 also shows multiple service clones residing in different servers.
  • FIG. 29 shows a service clone 482 for an RDBMS 480 residing in a server 478 and a service clone 488 for an RDBMS 486 residing in a server 484 .
  • Each service can have a number of service clones (e.g., specified by the numClones property of the service).
  • Each clone of the service is a full instance of a service (e.g., contains a service object and a pool of workers). Accordingly, additional service clones improves throughput by balancing the workload among the service clones.
  • the numWorkers property of a service controls the number of workers that can be instantiated for the service.
  • Each worker implements the functionality of the service and thus encapsulates the functionality of the service.
  • a worker for the DataService implements the DataService interface (e.g., executeSQL or executeStoredProcedure).
  • the worker for the DataService may differ from a worker for another service.
  • Concurrent access to each worker is controlled by the maxClients property of the worker.
  • Multiple workers can be instantiated in the same process which allows multiple clients to work concurrently on multiple workers.
  • multiple workers in the same process means that there are multiple workers (e.g., multiple worker CORBA objects) instantiated in the same process by the service object.
  • a worker can only support one reservation at a time (e.g., the worker.maxClients property is set to 1), and there is only one worker in the process, then only one client can perform work in that process at a time. If there are two workers in the process, then two clients can perform work in that process. If the two workers are in two different processes, then two clients can perform work concurrently, but in each process, there is only one client active at a time.
  • a thread-safe program is a program that supports any number of threads in the same program (i.e., a thread is an operating system term that indicates a thread of control in a process).
  • a thread is an operating system term that indicates a thread of control in a process.
  • the code of a worker for a service is not thread-safe (i.e., the worker only supports one client at a time)
  • only one client can perform work on the worker at a time.
  • the service framework of the present invention allows multiple clients to perform work on an instance of a service even though the workers for the service are not thread-safe. For example, multiple workers may be instantiated in different processes so that multiple clients can perform work on the service using these workers.
  • the service framework of the present invention allows for multiple clients to perform work on the service using non-thread-safe workers without requiring the creation of multiple processes.
  • serialized internally means that certain sections of the code of the worker are called critical sections, which are sections of code that are not thread-safe. Each client accessing a worker represents a thread. Thus, a critical section only supports one client at a time. If a worker has a large number of critical sections, or if a significant segment of the code of the worker is a critical section, then throughput may suffer, because each client must process the critical section(s) of the worker one at a time. Thus, if a worker is serialized internally, then each critical section serializes access to particular code of the worker and thus bottlenecks may reduce throughput.
  • a worker with no critical sections may have higher throughput, because multiple clients can access the worker concurrently.
  • additional workers may be instantiated to support concurrent access by additional clients.
  • the higher the number of workers the greater the overhead in the service itself, because the service object must collect the workload from all the workers in order to perform workload balancing of the workers and worker reservation management.
  • redundancy through the use of clones as shown in FIG. 29 also provides increased fault tolerance in the service framework of the present invention.
  • the service framework can isolate and withstand faults generated by worker implementations, and the service framework has a high-availability feature to tolerate downtimes.
  • the service framework provides for fault isolation. For example, workers (e.g., workers implemented in C++ or JAVA) are prone to fault generation, but the faults are isolated so that the faults do not affect the running (current) configuration.
  • each worker can be located in a separate process using the numProcesses property and the numWorkers property (i.e., an out-of-process worker), and thus a fault generated by the worker would be isolated.
  • a fault generated by the worker would be isolated.
  • there can be multiple instances of almost every entity e.g., service locator, SM, service, worker, etc.
  • faults within any particular address space can be tolerated.
  • a death of a service instance can be tolerated without a complete outage if clones of the service are present and registered with the service locator. Any work performed on the service instance at the time of death may be lost and any dependent work may be affected, but clients issuing requests to other clones of the service will not be subject to any interruptions.
  • service and service locator instances can be distributed across multiple machines thereby isolating machine or network area faults as well. Accordingly, services as well as workers can be launched out of process thereby providing for fault isolation (e.g., distribution among different address spaces), or services as well as workers can be launched in process thereby providing for optimal memory usage.
  • fault isolation e.g., distribution among different address spaces
  • services as well as workers can be launched in process thereby providing for optimal memory usage.
  • the service framework includes an automatic restart feature that enhances the fault tolerance of the service framework of the present invention.
  • every object factory can instantly restart a failed object in the event of a failure. For example, if a worker fails in an abnormal manner, the object factory restarts the worker immediately. Accordingly, the failure and the subsequent restart would be apparent only to the service proxy of the client that had been using the failed worker at the time of the failure.
  • the service framework of the present invention also provides high availability.
  • the service framework supports redundancy at the worker and service object levels (e.g., worker clones and service clones).
  • multiple workers can be configured for a service (e.g., multiple workers can be instantiated based on the numWorkers property of the service), multiple service clones can be configured (e.g., defined in a service property such as service.numClones), and multiple service locators can be configured.
  • the number of service locator instances in an SM may be defined by a service locator property such as serviceLocator.numClones (e.g., if the service locator has numClones set to 2, then the SM instantiates 2 service locator clones).
  • service locator property such as serviceLocator.numClones (e.g., if the service locator has numClones set to 2, then the SM instantiates 2 service locator clones).
  • the service framework of the present invention also provides rebinding and fault tolerance as illustrated by the flow diagram of FIG. 30.
  • the service proxy in addition to encapsulating the complex logic for reserving a worker, the service proxy also encapsulates rebinding to a new service and worker upon failure thereby providing the service framework with an additional level of fault tolerance.
  • FIG. 30 is a flow diagram illustrating the fault tolerance operation for when a service object becomes unavailable.
  • the service proxy determines whether an exception has been raised by the service object (e.g., whether or not the service object has failed during the reservation process).
  • the service proxy also determines whether or not its currently cached service locator handle is valid. If not, the service proxy rebinds to another service locator, if available, in stage 504 , and then proceeds to stage 506 .
  • the service proxy handles the exception raised by the service object and obtains a new service handle for a different service object from the service locator.
  • the service proxy may include some transient properties that control the rebinding processes. In some embodiments, the transient properties include a value for maximum rebind attempts and a value for delay in milliseconds before attempting to rebind to a service.
  • FIG. 31 shows an administrative interface 526 in a server 524 in accordance with some embodiments of the present invention.
  • a console 520 is linked by a network or local connection 522 to the server 524 that includes the administrative interface 526 .
  • the console 520 allows an operator to configure the configuration.
  • the configuration defines a collection of services and service locators along with the properties of the services and the service locators.
  • the configuration is maintained by the SM.
  • An operator defines the configuration from the console 520 .
  • the configured distributed object network system that includes the service framework of the present invention is fault tolerant.
  • the console 520 provides a central management console for remotely administering distributed applications (e.g., a console that includes management software written in JAVA for performing remote management of clients on the global Internet such as a standard browser client).
  • distributed applications e.g., a console that includes management software written in JAVA for performing remote management of clients on the global Internet such as a standard browser client.
  • FIG. 32 provides an interface of the administrative interface in accordance with some embodiments of the present invention.
  • the administrative interface of FIG. 32 is written in IDL.
  • the implementation of the service framework derives from the administrative (admin) layer.
  • the admin layer can activate/deactivate an object, and the admin layer can also customize the object's behavior through the properties of the object.
  • the service object's interface derives from the admin interface, and the service object's implementation extends the admin layer.
  • the SM uses the service object's admin layer to start and stop the services and set the properties of the services.

Abstract

An improved method and apparatus for providing a service framework for a distributed object network system are provided. In some embodiments, an apparatus that includes a server, a service for a limited resource residing on the server, and a pool of workers for the service that execute service requests from a client in a distributed object network system is provided. In some embodiments, a method that includes providing client-side service request encapsulation, balancing workloads among clones of service locators, clones of services, and workers in a worker pool of a service, and improving fault tolerance in a distributed object network system is provided.

Description

    FIELD OF THE INVENTION
  • This invention relates to programmed computers and, more particularly, to an improved method and apparatus for providing a service framework for a distributed object network system. [0001]
  • BACKGROUND
  • Computer systems that provide users access to limited resources are well known. For example, a client-server system represents a common paradigm for providing shared access to a limited resource such as a computer database on a server. The typical client-server system includes a computer (the “server”) in which one or more limited resources reside (e.g., are stored) and one or more satellite computers (the “clients”) which access the limited resources. The access is generally performed over an electronic communication system. The clients access the limited resources on an as needed basis. [0002]
  • A server typically includes a computer or multiple computers connected via an electronic communication system, services (e.g., a data service that provides access to a database residing in a computer or a distributed service residing in multiple computers connected via an electronic communication system), and a storage for storing the services. The storage typically includes some combination of random access memory (“RAM”) and magnetic media, such as tapes and disks or optical media, and other storage devices. Depending on the requirements of the system, the server may be a personal desktop computer that includes a hard-disk, a large mainframe computer that includes multiple tape drives, or some other kind of computer. [0003]
  • A client may be a personal computer, a workstation, or some other kind of computer. A client may be either remote from the server (i.e., the client accesses the server via an electronic communication system) or local to the server (e.g., the client accesses the server via a local bus). A client may include one or more “applications” such as a word processor, a web browser, or database interface software to access information from a database on a server. Some of the applications may be under the control of a human operator and others may run automatically or under the control of another application. [0004]
  • An electronic communication system (“network”) may include commercial telephone lines as well as dedicated communication lines to carry data signals between the server and the client. [0005]
  • Prior client-server approaches allow a limited number of clients to access limited resources residing in a server. In particular, in the typical client-server environment, the workload characteristics are predictable and well known because of the predetermined limit on the number of clients and the well known nature of the clients. [0006]
  • However, increasing Internet usage presents a unique problem for providing a dramatically increasing and unpredictable number of clients efficient and fair allocation of access to limited resources residing in a server. Accordingly, prior client-server approaches are inadequate for the Internet environment, because the number of concurrent users in the Internet environment generally exceeds the number of concurrent users in a typical client-server environment and is generally more unpredictable. [0007]
  • A Common Object Request Broker Architecture (CORBA) represents a partial attempt to address the problem of providing an increasing and unpredictable number of users access to limited resources residing in a server. CORBA provides a client/server middleware defined by an industry consortium called the Object Management Group (OMG), which includes over 700 companies representing the entire spectrum of the computer industry. [0008]
  • In particular, CORBA defines an implementation-independent component-based middleware. CORBA allows intelligent components to discover each other and interoperate on an object bus called an Object Request Bus (ORB). CORBA objects can reside anywhere on a network. Remote clients can access a CORBA object via method invocations. Clients do not need to know where a CORBA object resides or on which operating system the CORBA object is executed. Thus, a client can access a CORBA object that resides in the same process or on a machine in another country connected via the Internet. [0009]
  • Further, both the language and compiler used to create CORBA objects are transparent to clients. For example, a CORBA object may be implemented as a set of C++ classes, in JAVA bytecode, or in COBOL code. Thus, the implementation of the CORBA object is irrelevant to the client. The client only needs to know the interface of the CORBA object. CORBA uses an Interface Definition Language (IDL) to define a CORBA object's interface, and the IDL also allows for specifying a component's attributes such as the parent classes it inherits from and the methods its interface supports. For example, a CORBA object provides an implementation for the CORBA object's IDL interface using a language for which an IDL mapping exists. In particular, CORBA defines a standard mapping from the IDL to other implementation languages such as C++, JAVA, ADA, etc. A CORBA IDL compiler generates client-side stubs and server-side skeletons for the CORBA object's IDL interface. [0010]
  • CORBA also specifies bus-related services for creating and deleting objects, accessing them by name, storing them in persistent stores, externalizing their states, and defining ad hoc relationships between them. Accordingly, CORBA provides a flexible distributed-object middleware that provides client-server interoperability. CORBA and JAVA are both further described in “Client/Server Programming with JAVA™ and CORBA” by Robert Orfali and Dan Harkey (John Wiley & Sons: New York, N.Y., 1997). [0011]
  • FIG. 1 shows a [0012] typical CORBA environment 38. A client 40 connects to a server 54 via a network 44 (e.g., via the Internet). A client 42 connects to the server 54 via a network 46 (e.g., via the Internet). A client 50 connects to the server 54 via a network 48 (e.g., via the Internet). CORBA provides local/remote transparency in a distributed object network as shown in FIG. 1 by providing Internet Inter-ORB Protocol (IIOP) services 52. An ORB service represents a standard CORBA service that can broker inter-object calls within a single process, multiple processes running within the same machine, or multiple processes running within different machines that may be across multiple networks and operating systems. For example, the client 42 includes an application that uses client-side stubs to obtain an object reference (e.g., a handle) to a remote CORBA object and to dispatch method invocations to the remote CORBA object. The communication between the client and the server-side object uses the IIOP.
  • Referring to FIG. 1, the [0013] server 54 includes a relational database management systems (RDBMS) 60 (e.g., residing in a storage of the server 54). The server 54 also includes a data service 56, which can be implemented as a collection of CORBA objects, that encapsulates the limited resource, the RDBMS 60. For example, the data service 56 may provide a set of operations that can execute SQL queries, stored procedures, and perform connection management.
  • Referring to FIG. 1, the [0014] data service 56 can be used by standard applications (e.g., a database interface) that reside in the clients 40, 42, and 50. The clients 40, 42, and 50 obtain a handle (e.g., an object reference) to bind to the data service 56. In particular, CORBA's object location mechanism includes the CORBA client stubs which offer a bind mechanism to locate a remote object and obtain an object reference for the remote object. Accordingly, the server 54 provides various services such as the data service 56. The server 54 also includes standard CORBA support services in a CORBA layer 58 for activating the data service 56 and administering the data service 56.
  • However, the standard CORBA support services do not provide significant client-side encapsulation for requesting a service, efficient workload balancing, a substantial variety of access modes, or robust fault tolerance. Accordingly, an improved method and apparatus for providing a service framework for a distributed object network system is needed. [0015]
  • BRIEF DESCRIPTION
  • The present invention provides an improved method and apparatus for providing a service framework for a distributed object network system. Accordingly, in some embodiments, the service framework includes a service proxy that encapsulates the operation of requesting a service from a server. [0016]
  • In some embodiments, the service framework also includes a load balancing manager for balancing workloads among workers in a worker pool of a service. Also, the service framework may include a service locator for balancing workloads among clones of a service. Further, the service framework may include a service locator proxy for balancing workloads among clones of service locators that provide handles (e.g., object references) to a service. [0017]
  • In some embodiments, the present invention is used to deploy scalable applications (e.g., enterprise applications) over the World Wide Web (WWW). [0018]
  • In some embodiments, a method is disclosed for providing client-side service request encapsulation. The method may also include balancing workloads among clones of service locators, clones of services, and workers in a worker pool. The method may also include improving fault tolerance in a distributed object network system. [0019]
  • Other aspects and advantages of the present invention will become apparent from the following detailed description and accompanying drawings. [0020]
  • BRIEF DESCRIPTION OF THE DRAWINGS
  • FIG. 1 shows a typical CORBA environment. [0021]
  • FIG. 2 shows a framework model that includes a service framework in accordance with some embodiments of the present invention. [0022]
  • FIG. 3 shows a service framework for a distributed object network system in accordance with some embodiments of the present invention. [0023]
  • FIG. 4 is a flow diagram illustrating the operation of a service proxy in accordance with some embodiments of the present invention. [0024]
  • FIG. 5 shows the service proxy of the client of FIG. 3 in greater detail in accordance with some embodiments of the present invention. [0025]
  • FIG. 6 is a flow diagram illustrating the operation of the client of FIG. 3 during a service request in accordance with some embodiments of the present invention. [0026]
  • FIG. 7 shows a service object of the server of FIG. 3 in accordance with another embodiment of the present invention. [0027]
  • FIG. 8 provides a call to allocateWorker on a service object in accordance with some embodiments of the present invention. [0028]
  • FIG. 9 provides reservation properties in accordance with some embodiments of the present invention. [0029]
  • FIG. 10 provides a reservation context in accordance with some embodiments of the present invention. [0030]
  • FIG. 11 provides service properties in accordance with some embodiments of the present invention. [0031]
  • FIG. 12 provides a reservation interface of the service object of FIG. 3 in accordance with some embodiments of the present invention. [0032]
  • FIG. 13 is a flow diagram illustrating the reservation revocation operation in accordance with some embodiments of the present invention. [0033]
  • FIG. 14 is a flow diagram illustrating the operation of reserving a previously reserved worker in accordance with some embodiments of the present invention. [0034]
  • FIG. 15 provides a reservation revocation call back interface in accordance with some embodiments of the present invention. [0035]
  • FIG. 16 provides worker properties in accordance with some embodiments of the present invention. [0036]
  • FIG. 17 is a flow diagram illustrating the operation of pinging workers in accordance with some embodiments of the present invention. [0037]
  • FIG. 18 shows a server in accordance with another embodiment of the present invention. [0038]
  • FIG. 19 shows an out-of-process worker factory and an in-process worker factory in accordance with some embodiments of the present invention. [0039]
  • FIG. 20 shows clone factories in accordance with some embodiments of the present invention. [0040]
  • FIG. 21 provides an object factory interface in accordance with some embodiments of the present invention. [0041]
  • FIG. 22 provides service locator properties in accordance with some embodiments of the present invention. [0042]
  • FIG. 23 provides a service locator interface in accordance with some embodiments of the present invention. [0043]
  • FIG. 24 provides a load balancing manager (LBM) interface in accordance with some embodiments of the present invention. [0044]
  • FIG. 25 shows a fully capable LBM in accordance with some embodiments of the present invention. [0045]
  • FIGS. [0046] 26A-26B are a flow diagram illustrating the call sequence operation in accordance with some embodiments of the present invention.
  • FIG. 27 shows a client wait queue and an idle queue of the LBM of FIG. 25 in accordance with another embodiment of the present invention. [0047]
  • FIG. 28 shows a service object and an LBM in accordance with another embodiment of the present invention. [0048]
  • FIG. 29 shows the scalability of the service framework in accordance with some embodiments of the present invention. [0049]
  • FIG. 30 is a flow diagram illustrating the fault tolerance operation for when a service object becomes unavailable in accordance with some embodiments of the present invention. [0050]
  • FIG. 31 shows an administrative interface in a server in accordance with some embodiments of the present invention. [0051]
  • FIG. 32 provides an interface of the administrative interface in accordance with some embodiments of the present invention. [0052]
  • DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS
  • The present invention provides an improved method and apparatus for providing a service framework for a distributed object network system. In particular, a client-server system in which a significant number of clients access distributed objects on a server (e.g., a distributed enterprise application deployed over the global Internet) would significantly benefit from this improved method and apparatus. [0053]
  • For example, an application (e.g., a web browser) that runs on a client may allow the client to access a data service (e.g., a service for a database such as an RDBMS) that runs on a server. The data service often must be made accessible to a significant and unpredictable number of clients. Moreover, a significant number of clients may attempt to simultaneously access the data service, but some users may have higher priority than other users. Accordingly, a service framework should provide significant client-side encapsulation for requesting a service, ensure efficient workload balancing, offer a variety of access modes, provide significant scalability, and maintain robust fault tolerance. [0054]
  • FIG. 2 shows a [0055] framework model 70 that includes a service framework 76 in accordance with some embodiments of the present invention. In particular, the service framework 76 is implemented on top of a Common Object Request Broker Architecture (CORBA) bus 78. The service framework 76 provides a platform of services which extend the CORBA support services in the CORBA bus 78. In some embodiments, the service framework 76 includes services that support and encapsulate enterprise resources (i.e., a service represents an encapsulation of a resource) such as a data service 72 or other services 74 (e.g., an Email service, a document management service, etc.). For example, the data service 72 includes a service CORBA object and a pool of worker CORBA objects. In some embodiments, an object represents a set of computer instructions that can be executed by a computer.
  • In some embodiments, the [0056] service framework 76 provides improved access to services, manages the life cycle of services, and provides administrative capabilities to manage a group of services. In some embodiments, the service framework 76 is implemented as a collection of objects written in JAVA and C++, and the architecture of the service framework 76 is the definition of the collection of objects and the interaction among objects in the collection. In some embodiments, the service framework 76 supports services implemented using C++, JAVA, etc. Accordingly, the service framework 76 provides a variety of methods to access services, and the service framework 76 also provides an architecture that is scalable, modular, fault tolerant, and easily extendible (i.e., new services are easy to plug in).
  • Generally, in order to access a service, a client must obtain a handle (e.g., an object reference) to a particular service object for the service on which the client intends to execute an operation (a service request). In some embodiments, the service framework includes an object (e.g., a CORBA object) called a service locator that maintains the name space of service instances. For example, the service locator repository may contain an entry for an RDBMS service instance with the name “RDBMS service”, a handle to the RDBMS service's service object, and a set of properties for the service (e.g., database types supported). The service locator exports a service lookup interface that provides a findService operation. The findService operation takes a service name and, or a set of properties for a service, and the findService operation returns a set of service object handles that match the name and, or the set of properties. [0057]
  • FIG. 3 shows a service framework for a distributed object network system in accordance with some embodiments of the present invention. A [0058] client 80 includes a service proxy 82 residing in client storage. A service locator 84 includes a registry of services. Thus, the service locator 84 provides the location (e.g., an object reference) of a particular service in the distributed object network system in which there may be a large number of services at any one time. Each service residing in a server 88 is managed by a service manager (SM) 86. The SM 86 performs several tasks. For example, the SM 86 starts a service and starts a service locator. The SM 86 then registers the services under its control with all known service locators in the distributed object network system. In another embodiment, there may be more than one service locator as discussed further below with respect to FIG. 20, but each service locator contains the same set of services accessible over the entire distributed object network system. Also, services can be grouped logically, as discussed further below with respect to FIG. 18.
  • Referring to FIG. 3, the [0059] service locator 84 exports a registerService method that is used by the SM 86 to register its services with the service locator 84. The registerService call simply registers a collection of services managed by a SM such as the SM 86 and the properties of each service. However, not all properties of a service may be registered by the SM 86. In some embodiments, only those properties that would have an impact on the clients are registered by the SM 86. The SM 86 also periodically updates the repository of all the services registered with the service locator 84 along with any changes in the set of services that it manages.
  • In some embodiments, if the [0060] SM 86 does not ping the service locator 84 in a predetermined period of time, the service locator 84 assumes that the SM 86 and all its contained services have died and quietly removes the set of services from its repository. Also, if the parent of the service locator 84 (the service manager that launched the service locator, for example, the SM 86) does not ping in time, the service locator 84 assumes that the parent exited due to an error and terminates itself. These operations are part of the fault tolerance capabilities of the service framework of the present invention.
  • In some embodiments, the [0061] SM 86 essentially represents an administrative object and does not perform a direct role in executing requests for services. For example, the SM 86 manages the life cycle and other administrative issues of the services. The SM 86 may also collect the statistics of the services and pass the statistics to the service locator 84 for workload balancing purposes. These operations may be performed automatically by the SM 86. Further, the SM 86 may be responsible for instantiating the service locator 84 and all of the services residing in the server 88. The SM 86 exports an administrative interface (as discussed further below with respect to FIG. 32) that allows the definition of new services, bringing services up and down, and modifying the properties of the services (e.g., the number of workers in the worker pool of a service). In addition for each service, the SM 86 may instantiate a service object such as the service object 90.
  • In some embodiments, the [0062] service object 90 is responsible for instantiating a worker pool which may include workers 92, 94, and 96 (e.g., the workers 92, 94, and 96 may include different worker properties as discussed further below with respect to FIG. 16). The service object 90 may also be responsible for reserving a worker as discussed further below. The workers 92, 94, and 96 support the operations of the service (e.g., a DataService includes operations that provide access to a database). The workers 92, 94, and 96 may be distributed among different address spaces, which provides fault tolerance in the event of an abnormal failure of a particular address space. As shown in FIG. 3, the service object 90 manages the workers 92, 94, and 96 and, in some embodiments, provides a reservation mechanism for clients. The reservation mechanism is discussed in further detail below.
  • In some embodiments, the [0063] service proxy 82 supports the methods exported by the IDL interfaces of the workers 92, 94, and 96. For example, a worker method that is encapsulated in the service proxy 82 uses an object reference to the worker 92 to dispatch the worker method to the remote worker 92 and obtain results from the worker method. The communication between the service proxy 82 and the worker 92 is performed using the IIOP.
  • The service framework as shown in FIG. 3 represents a collection of objects (e.g., the [0064] service proxy 82, the service locator 84, the SM 86, the service object 90, the workers 92, 94, and 96, etc.) The architecture of the service framework is the definition of the objects and the interaction mechanism between the objects.
  • In some embodiments, the [0065] service locator 84, the SM 86, the service object 90, and the workers 92, 94, and 96, all represent CORBA objects. Each of these objects exports a CORBA interface in the form of an IDL (Interface Definition Language) interface. The client 80 includes the service proxy 82 that can bind to the service locator 84 by name (e.g., using CORBA's object location mechanism). Other objects such as the service object 90 and the workers 92, 94, and 96 represent transient objects. The service proxy 82 can get a handle (e.g., an object reference) to transient objects such as the service object 90 through the getService operation of the service locator 84. The communication between the service proxy 82 and the service object 90 may be a direct CORBA invocation over IIOP.
  • In some embodiments, most of the service framework is implemented in JAVA. In particular, the [0066] SM 86, the service object 90, and the service locator 84 are all implemented in JAVA, but the service proxy 82 and the workers 92, 94, and 96 are implemented in both JAVA and C++. For example, C++ clients can use a C++ service proxy to bind to the service locator 84, obtain a CORBA object reference to a service object, and reserve a worker by obtaining an object reference to a worker. Also, services can be built using C++. For example, an RDBMS service can be implemented in C++ and use native client libraries to access the database. The service proxy 82 as shown in FIG. 3 encapsulates various operations such as executeRequest, allocateWorker, and getService, and these operations are further discussed below with respect to FIG. 4.
  • In some embodiments, the [0067] server 88 may include, for example, a Solaris™ operating system, an HP-UX™ operating system, or a Windows NT™ operating system. In some embodiments, the server 88 includes a data service which provides a relational database system, a standard type of commercial data management technology.
  • In some embodiments, the [0068] service object 90 is a service object for a data service. A service is a logical term that represents an encapsulation of a resource. For example, if the resource is a relational database management system (RDBMS), then an RDBMS service encapsulates the RDBMS by providing, for example, a set of operations that can execute SQL queries, stored procedures, and perform connection management. Client applications that require access to the RDBMS can use the RDBMS service. In some embodiments, the RDBMS service is implemented as a collection of objects that collectively perform the functions of the RDBMS service.
  • In particular, the [0069] service object 90 provides the workers 92, 94, and 96 that encapsulate a resource on the server 88. Using an RDBMS service as an example, the workers 92, 94, and 96 each export an interface of operations that includes executing an SQL statement or a stored procedure. The workers 92, 94, and 96 also manage the connections to the RDBMS resource. In some embodiments, the workers 92, 94, and 96 encapsulate any connection state, cache execution results, and perform cursor-based lookups (e.g., maintain state on behalf of the connection). Further, in some embodiments, the workers 92, 94, and 96 are implemented as a class in C++ or JAVA that derives directly from a class of the service framework that provides all the capabilities of the service framework (e.g., workload balancing, fault tolerance, etc.). Thus, the workers 92, 94, and 96 may use the object-oriented inheritance mechanism to inherit all the capabilities of the service framework, and the workers 92, 94, and 96 may provide an interface (e.g., an IDL interface) for export. Each worker is independent of the other workers (i.e., each worker is unaware of the other workers). Hence, the implementation of the worker needs to consider the resource logic only, not the service framework itself.
  • The service object [0070] 90 (in some embodiments, there is only one service object per service) is responsible for handing out a handle of a worker in a worker pool (i.e., a worker handle) to clients that are, using the RDBMS example, interested in executing an SQL statement or stored procedure (i.e., interested in performing an RDBMS transaction). In some embodiments, the service object 90, in deciding which worker from the pool to allocate, performs workload balancing among the workers and may also offer a variety of access modes from clients (e.g., transactional access, exclusive access, shared access, priority based access, etc.) as discussed further below. The service object 90 exports a worker reservation interface that includes allocateWorker and releaseWorker operations (e.g., methods) to allocate a worker and release a previously allocated worker, respectively, as discussed further below with respect to FIG. 12.
  • In the RDBMS example, the [0071] service locator 84, which maintains the name space of service instances (i.e., the set of services registered in the service locator of the cell, and in some embodiments, every service in the cell is registered with the service locator, and services in a different cell are not registered with the service locator), a repository of service objects, service names, and a set of properties associated with each service (service properties are discussed further below with respect to FIG. 11), has a local repository that contains an entry for the RDBMS service with the name “RDBMS service”, a handle to the service object 90 for the RDBMS service, and a set of properties for the RDBMS service. The service locator 84 exports a service lookup interface that contains a findService operation. The findService operation takes a service name and, or a set of properties for a service and returns a set of service object handles that match the name and, or properties. Thus, the client 80, if it is interested in obtaining a handle to a particular service in which it intends to execute an operation, executes a findService operation on the service locator 84 with the name of the service it is interested in (in this example, “RDBMS service”). In some embodiments, the service locator 84 also provides a level of workload balancing in the service framework, which is discussed further below. In addition, the service locator 84 periodically updates and loads existing services.
  • Accordingly, FIG. 3 illustrates the service framework that provides significant extensions to CORBA-based distributed object network system in accordance with some embodiments of the present invention. Those skilled in the art will recognize that the service framework can also be provided in a system with multiple servers with multiple (distributed) services and (distributed) clones of services. [0072]
  • In some embodiments, a WWW (world wide web) or web application is provided using the service framework of the present invention. In particular, the [0073] client 80 includes a client application such as a web browser (e.g., Netscape Navigator) that is capable of rendering HTML (hyper-text markup language) or hosting JAVA applets or ActiveX controls. A web server (not shown) that supports HTTP requests from the web browser and launches a thin CGI/ISAPI/NSAPI to deliver HTTP requests to the application server (e.g., the server 88) is provided.
  • For example, a web browser in the [0074] client 80 dispatches an HTTP request to the web server which launches a CGI, NSAPI, or ISAPI plug-in that is a client to the application server (e.g., the server 88). In particular, the plug-in represents a CORBA client that issues a call to the service locator 84 to locate an appropriate service (e.g., a web service). Thus, the application server may be completely isolated from the web server. The plug-in then dispatches the web event to the web service. The application server may provide a service implemented using CORBA objects that are activated (i.e., instantiated) prior to the incoming call for the service provided by the application server. The web service executes the application logic, interacts with one or more data services in the application server, and stores session and state information. The web service returns the result of the web event which is an HTML page back to the web browser in the client 80. Alternatively, the web browser can host a JAVA applet or an ActiveX control that connects directly to the application server using the IIOP. Thus, the JAVA applet bypasses the web server and interacts directly with the application server using the IIOP, which may provide improved performance.
  • Accordingly, the service framework of the present invention provides a distributed, fault tolerant, scalable, and object-oriented architecture that supports a variety of services that can be accessed over the web (e.g., enterprise web applications). Further, the service framework of the present invention provides a reservation mechanism (as discussed below) that supports web applications that can efficiently and fairly manage a collection of resources that are accessed by clients across the Internet. Also, the dynamic scalability and fault tolerance of the present invention is particularly advantageous for enterprise applications that can afford little or no downtime. [0075]
  • FIG. 4 is a flow diagram illustrating the operation of a service proxy in accordance with some embodiments of the present invention. In particular, FIG. 4 shows the stages of operation that must be performed by a client that wishes to execute, in the RDBMS example, an SQL request. In such an embodiment, rather than having the client perform each of the steps necessary to get a worker object, a service proxy object is provided, and the service proxy object performs the necessary steps to encapsulate the process of obtaining a worker for a particular service. Thus, from the client's perspective, the client simply requests execution of an operation on a service, and the process of obtaining a worker is transparent to the client, because the service proxy performs the necessary steps to obtain the worker. This approach is advantageous, because this approach encapsulates the framework internals so that clients are not required to know anything about the framework internals, and clients do not have to perform the task of handling any errors encountered when executing the steps for obtaining a worker. Moreover, this approach advantageously allows the framework to support fault tolerant features such as automatically retrying the request if the original request fails (e.g., error handling). [0076]
  • In some embodiments, the service proxy is an object that resides in the client and encapsulates a particular service in its entirety. In some embodiments, the service proxy intercepts every call from the client to the worker, and the service proxy includes the same set of methods as the worker. For example, a client applet (e.g., a JAVA applet such as CNdDataServiceProxy dsproxy=new netdyn.services.ds.client.CNdDataServiceProxy()) invokes an operation on the worker by executing the equivalent method on the service proxy (e.g., an execute SQL call). The service proxy then reserves a worker (e.g., if a worker is not already reserved, then allocateWorker is called on the service to obtain a worker object reference) and dispatches the method (e.g., the execute SQL call) to the worker using a CORBA/IIOP call. The service proxy obtains the result of the method from the worker and then passes the result back to the client. Thus, the service proxy is aware of every method invocation on a worker. [0077]
  • In some embodiments, each service in the service framework has a corresponding service proxy. Thus, a service proxy encapsulates a service, because from the client's perspective the service proxy implements all the operations of the service itself. For example, the service proxy is responsible for insuring that a worker handle has been obtained before invoking the operation on the worker. As a result, the task of locating the appropriate service and obtaining a worker is encapsulated within the service proxy. For example, there may be a single instance of the data service for an RDBMS, but there may be many clients requesting access to the data service. Each client instantiates a service proxy and invokes the “execute SQL” operation on the service proxy. All the instantiated service proxies (in each client) simply invoke the corresponding “execute SQL” operation on the service itself. Hence, from the client's perspective, the client can instantiate a service and execute an operation on the service. However, the service proxy actually obtains a handle to a worker and forwards all requests to the allocated worker. [0078]
  • In particular, FIG. 4 illustrates the stages of operation performed by the service proxy in accordance with some embodiments of the present invention. [0079] Reference numeral 100 refers to a first stage in this embodiment. In stage 100, the service proxy obtains a handle to the service locator. For example, the service locator object is registered with the ORB by providing a unique object name (e.g., using the obj_is_ready call). After the service locator object has been registered with the ORB, the client can use the ORB-provided bind call and supply the name of the service locator object to obtain an object reference to the service locator.
  • In some embodiments, the service framework provides a first level of workload balancing. In the first level of workload balancing, as discussed further below, the findService operation returns the handle of a particular service locator instance selected among multiple instances of the service locator (e.g., service locator clones). In [0080] stage 102, the service proxy calls findService on the service locator with a service name “RDBMS service”, in the RDBMS example.
  • Referring to FIG. 4, in [0081] stage 104, the service locator returns the handle of an available RDBMS service (e.g., an RDBMS service that is currently up and running). In some embodiments, the service framework provides a second level of workload balancing. In the second level of workload balancing, as discussed further below, the service locator periodically requests and loads statistics from all the services (e.g., across machines in a distributed configuration) and then can provide the handle of the least busy instance of the requested service based on the statistics. Also, at this point, security checks may be performed to insure that the client ID, as discussed further below, is valid for the requested service access (e.g., license restrictions).
  • In [0082] stage 106, the service proxy calls allocateWorker on the service object with a set of access requirements and worker hints, as discussed further below with respect to FIG. 9. In some embodiments, a third level of workload balancing is provided. In particular, as discussed further below, when a call to allocateWorker on the service object is presented, reservations are requested based on some level of access or some class of access specified by the service proxy. The requested worker access must be valid relative to the client ID of the client of the requesting service proxy. For example, a specific duration of reservation may be requested, exclusive access may be requested, or access that chooses to wait or not to wait may be requested as discussed further below with respect to FIG. 9. Thus, in the third level of workload balancing, a client that is itself a high priority client that is permitted access for high priority work and thus can request a high priority worker. The reservation mechanism is implemented in the service object and is discussed further below.
  • In [0083] stage 108, the allocateWorker operation returns an appropriate worker as determined by the service object's load balancing manager (LBM) based on runtime workload statistics of each worker as discussed further below with respect to FIG. 25. In stage 110, the service proxy uses the worker handle to execute the SQL request on the worker, and the worker returns the output from the execution to the service proxy of the client. In stage 112, the service proxy calls releaseWorker on the service object to release the reservation on the worker.
  • Accordingly, FIG. 4 illustrates the advantages of providing a service proxy that encapsulates the process of requesting a service. For example, the service proxy implements fault tolerance. In particular, if a client requests a service (e.g., in a wait mode as described further below with respect to FIG. 9) and there are no available workers for the service, the service proxy can request access to a worker for the service and the request is queued (e.g., in a first in, first out (FIFO) queue). Further, the service proxy can implement a fairly sophisticated system of retrying. For example, if the service proxy requested a worker for a service and the worker was not available, the service proxy can retry by re-requesting the service from the service locator. Moreover, the fault tolerance mechanisms performed by the service proxy are completely transparent to the client. [0084]
  • FIG. 5 shows the [0085] service proxy 82 of the client 80 of FIG. 3 in greater detail in accordance with some embodiments of the present invention. The service proxy 82 encapsulates the complex logic involved in requesting a service.
  • In some embodiments, each service has a service proxy that has the same set of operations as the service itself (i.e., the service proxy interface is identical to the interface of the service's workers). The client uses the service proxy by simply instantiating the service proxy and executing an operation on the service proxy. Thus, from the client's perspective, the service proxy is simply the service (i.e., the back-end resource). [0086]
  • As shown in FIG. 5, the [0087] service proxy 82 has the following responsibilities: bind to the service locator, find an appropriate service using the service locator, obtain a worker using the service object, and execute the service request using the allocated worker. In particular, the service proxy 82 can bind to the service locator by using the service locator's instance name. After binding to the service locator, the service proxy 82 caches the reference of the service locator for subsequent lookup. Each service has a property called the instance name, which represents the name of the service which does not change for a particular service. Because the service proxy 82 has a one-to-one correspondence with a particular service, the service proxy 82 knows the instance name of the service it represents. The service locator includes a repository of handles to services that have been instantiated by the SM. The service proxy 82 uses the getService operation, passing the name of the service instance, to obtain a service handle. These operations will return the handle to a suitable service if available. Once it obtains a handle to a service, the service proxy 82 caches the reference for subsequent lookup.
  • In some embodiments, the [0088] service proxy 82 uses a default set of reservation properties when reserving a worker. A client is allowed to change the reservation properties before issuing any operations on the service proxy 82 and at any subsequent time. The worker ID (e.g., handle to the worker) of the reserved worker is cached along with the reservation context that contains the client ID, the service, and the reserved worker, as discussed further below with respect to FIG. 10. The reservation context is passed automatically by the service proxy 82 on each outgoing call. Thus, the service proxy 82 also hides the internal details such as reservation properties, reservation context, etc. The service proxy 82 may perform invalidation of cached references periodically in order to detect any changes in the configuration (e.g., new service locators, new service clones, new workers). Invalidating the cache periodically also forces the service proxy 82 to talk to the service locator periodically and therefore improves the effectiveness of the service locator and the service object in performing dynamic workload balancing. The client may also be allowed to, at any time, invalidate the cached worker service and the cached service locator handles.
  • FIG. 6 is a flow diagram illustrating the operation of the [0089] client 80 of FIG. 3 during a service request in accordance with some embodiments of the present invention. In particular, FIG. 6 illustrates the operation of performing a service request from the perspective of the client 80 of FIG. 3. Reference numeral 140 refers to a first stage in this embodiment. In stage 140, the client 80 requests a service, and the appropriate service proxy intercepts the service request (as discussed above). In stage 142, the client executes the execute SQL request on the instantiated service proxy (e.g., the service proxy includes the same methods included in the workers of the requested service, and the service proxy executes the request on the allocated worker). Finally, in stage 144 (the worker returns the output from the execution of the execute SQL request to the service proxy of the client, and) the service proxy forwards the output to the client. Accordingly, the service proxy 82 encapsulates the requested service operation, which significantly simplifies the operation from the perspective of the client.
  • FIG. 7 shows a [0090] service object 160 of the server 88 of FIG. 3 in accordance with another embodiment of the present invention. In particular, in response to an allocateWorker call by the service proxy on the service object 160, the service object 160 allocates a worker from its worker pool, workers 162 and 164, to the service proxy so that the service proxy can issue work requests. The service object 160 may use an LBM (load balancing manager), as discussed further below with respect to FIG. 25, to select a worker for the service proxy, then the service object 160 calls newClient on the selected worker 162 to notify the worker of the reservation. Also, if the service proxy wants to release the reserved worker 162, then the service proxy calls releaseWorker on the service object 160, and the service object 160 calls clientReleased to notify the worker 162. Each service object (in some embodiments, there is only one service object per service) controls its own pool of workers. Thus, the service object 160 controls the pool of workers including workers 162 and 164. In some embodiments, worker allocation is implemented to support a variety of modes of access to workers, provide fast response time, and balance the workload from client requests across all workers in the worker pool.
  • In particular, the [0091] workers 162 and 164 encapsulate a limited resource such as an RDBMS. The service object 160 provides access to the limited resource and ensures that all clients get their fair share of access to the limited resource. For example, worker should be relatively equally loaded at all times to ensure reasonably predictable throughput and linear scalability. Ignoring hardware and operating system scalability limitations, adding more workers may increase throughput. Accordingly, to handle these requirements, the service object 160 may include a worker reservation mechanism as discussed further below.
  • FIG. 8 provides a call to allocateWorker on a service object in accordance with some embodiments of the present invention. The call to allocateWorker on a service object includes parameters for specifying the service, the service properties, and the reservation context. In particular, the reservation context provides some history of the client. For example, any particular workers that have performed work for the client may be provided in the reservation context. Thus, the service can allocate the same worker to a client that had previously done work for the client. In some embodiments, a worker may cache work results and worker hints respecting a particular client ID so that if the same worker is reallocated to the client, then the worker has this information already cached with respect to the client. Accordingly, caching work results and worker hints would be particularly advantageous for a data service or any other service in which the client would benefit by returning to the same worker that cached previous work results. Also, the reservation context may include a client ID and security credentials for clients. Thus, for security reasons, the service can actually recognize a client using the client ID. The client ID is discussed further below with respect to FIG. 10. [0092]
  • FIG. 9 provides [0093] reservation properties 166 in accordance with some embodiments of the present invention. In particular, a client can reserve a worker in the mode that is most suitable to the task to be performed by the client. Thus, some or all of the reservation properties 166 provided in FIG. 9 may be implemented. In particular, the service object 160 of FIG. 7 implements a reservation interface, as discussed further below with respect to FIG. 12. During the period that the worker is reserved for a particular client the client is allowed access to the worker. Once the reservation expires the client is no longer allowed access to the worker. Accordingly, to reserve a worker, the client issues a request specifying the reservation properties that apply to the reservation and any worker hints that the client would like to pass on to the service object.
  • As shown in FIG. 9, the [0094] reservation properties 166 include a client priority, an access mode, a wait mode, and a reservation time. The reservation properties 166 control the type of reservation that the client would like to obtain before the worker attempts to perform the desired action. Reserving the worker in the appropriate mode is critical. For example, if the worker allows multiple clients for read access, but a single client for write access, the client performing a write operation must reserve the worker in exclusive mode. The reservation duration can be passed as a hint (e.g., a parameter provided in a call or method invocation) by the client for worker scheduling purposes. For example, the service object may prefer a short duration client over a long duration client. In some embodiments, there is no fixed time duration that classifies a request as short or long, and thus, this is simply up to the client's discretion.
  • Referring to FIG. 9, the client priority determines how quickly the client can obtain a worker. In some embodiments, the worker pool that is instantiated by the service object contains workers of high, medium, and low priority as discussed further below with respect to FIG. 27. The properties of the worker pool determine how many workers are instantiated and how many of each priority. In some embodiments, a high priority worker can only be used by a high priority client, a medium priority worker can be used by high and medium priority clients, and a low priority worker can be used by clients of any priority. Thus, a high priority client waits only for any existing high priority clients. Hence, it is up to the client to decide its priority level before issuing the request. [0095]
  • Referring to FIG. 9, the access mode determines how many concurrent reservations can be given out on a particular worker. The maxClients property is a property of the workers that determines the number of concurrent reservations in shared mode that may be allocated to the worker (i.e., workers with maxClients greater than one represent multi-threaded workers). In exclusive mode, only one reservation is permitted. Accordingly, the access mode facilitates the maximum number of concurrent accesses to a limited resource. [0096]
  • Referring to FIG. 9, the wait mode specifies the appropriate action if a suitable worker is not available. For example, the client can elect to wait in a queue indefinitely until a suitable worker is available (e.g., indefinite_wait), the client can elect to wait for a limited time period before re-obtaining control (e.g., timed_wait), or the client may simply choose not to wait at all (e.g., no_wait). [0097]
  • Referring to FIG. 9, the reservation time specifies the duration of the reservation (in msec). The client obtains a reservation for a worker. The reservation is guaranteed for the reservation time (i.e., the reservation cannot be revoked during this time period). However, choosing a long time period has its consequences. For example, if the client were to disappear or exit due to an error, the worker is locked for this time period. This is undesirable in situations in which the worker is transient (e.g., JAVA applets). A more stable client (e.g., a transaction manager) may choose to use a longer reservation time. On the other hand, choosing too short of a reservation time may cause frequent revocations and interruptions in the work being performed. [0098]
  • FIG. 10 provides a [0099] reservation context 168 in accordance with some embodiments of the present invention. In some embodiments, the client 80 of FIG. 3 passes a reservation context 168 on each call to the service object 90 of FIG. 3. The reservation context 168 contains information about the client, the service, and the last worker that was reserved. The service object 90 of FIG. 3 uses the reservation context as a hint when allocating a worker. Once a worker is allocated, the service object 90 of FIG. 3 modifies the worker key with the reserved worker ID. The worker checks the reservation context 168 to make sure that the client key is present and keeps track of clients that have reserved the worker. The worker also verifies if the client has a valid reservation (e.g., the reservation has not been revoked).
  • In particular, the [0100] reservation context 168 as shown in FIG. 10 includes a client key, a service key, and a worker key. The client key identifies the client, the service key identifies the service object that returned the previous reservation, and the worker key identifies the previously reserved worker.
  • For example, if the client had previously reserved a worker, but the reservation has expired and the client would like to, if possible, return to the same worker, then the client simply passes the worker key as a hint to the service object's reservation mechanism. The service object will try to allocate the hinted worker if it is available. If not, the service object may allocate the next available worker in the worker pool. [0101]
  • The client can modify the [0102] reservation properties 168 using the setReservationProperties operation of the service object's reservation interface. For example, the setReservationProperties operation can be used to extend an existing reservation before the reservation expires or to change the mode of reservation from exclusive to shared once the critical updates in a database have been completed.
  • FIG. 11 provides [0103] service properties 180 in accordance with some embodiments of the present invention. In particular, service.instanceName provides the instance name of the service. Service.label provides the user visible name of the service. Service.description provides a description of the service. Service.serviceID uniquely identifies the service. Thus, multiple services with the same instance name and properties will have a different value for Service.serviceID. Service.processLocation provides whether the service is in process or out of process (e.g., indicating whether or not the service will be launched in its own virtual machine (VM)). For example, a C++ object is preferably launched outside a JAVA VM. Service.type provides the JAVA class name of the service. Thus, Service.type indicates the class to instantiate to bring up the service. Service.numWorkers provides the number of workers maintained by the service. Service.numHighPriWorkers provides the number of high priority workers maintained by the service. Service.maxWorkerRestarts provides the maximum number of times a service will attempt to restart a failed worker. Service.launchSequence provides that the lower the number the earlier the SM will launch the service (e.g., the results may be ambiguous if there are two services with the same launch sequence). Service.inactiveManagerInterval provides the minimum number of milliseconds before a service considers its parent SM dead and terminates itself.
  • FIG. 12 provides a reservation interface of the [0104] service object 90 of FIG. 3 in accordance with some embodiments of the present invention. The reservation interface shown in FIG. 12 is written in standard Interface Definition Language (IDL).
  • FIG. 13 is a flow diagram illustrating a reservation revocation operation in accordance with some embodiments of the present invention. For example, the [0105] service object 90 of FIG. 3 may include a reservation mechanism that performs the reservation revocation operation (i.e., asynchronous reservation revocation). In particular, if a worker reservation has expired, the client whose reservation expired is not immediately denied access to the worker. Reference numeral 200 refers to a first stage in this embodiment. In stage 200, the reservation mechanism determines whether or not a client's reservation on a worker has expired. If the client's reservation on the worker has not expired, then as shown in stage 202 the client may continue to use the worker. However, if the client's reservation on the worker has expired, then as shown in stage 204 the reservation mechanism determines whether or not other workers are available. In particular, this allows the client to continue to use the worker until no workers are available for a new client. In stage 206, the reservation mechanism revokes the client's reservation on the worker assuming that, at this time, there are no workers available for new clients, and a new client is requesting a worker (i.e., all the workers in the pool have been reserved by maxClients clients or clients in exclusive mode). Thus, in stage 206, the reservation mechanism revokes a reservation of a client whose reservation period has expired.
  • In some embodiments, a reservation is revoked only if there are no available workers (i.e., every worker has the maximum number of clients reserved), and there is at least one expired reservation. If there are no available workers, then the reservation mechanism will revoke the oldest-expired reservation on the least-loaded worker. [0106]
  • In particular, reservations can be revoked only if the period specified in the reservation properties has expired. Reservations cannot be revoked if the reservation time of FIG. 9 has not expired. Thus, the client can continue to use the worker until the worker is revoked. Once a reservation has been revoked, the worker now has room for at least one more client. This available slot is given to a new client that requested a worker. Such a revocation causes a call back notification to be sent to the client's service proxy. As discussed above, the client's service proxy for the service encapsulates the entire worker reservation logic. The service proxy uses the notification to invalidate any cached worker handles. Accordingly, any further request on the service proxy from the client will cause the service proxy to obtain a new reservation for a worker before proceeding with the request. [0107]
  • FIG. 14 is a flow diagram illustrating the operation of reserving a previously reserved worker in accordance with some embodiments of the present invention. [0108] Reference numeral 220 refers to a first stage in this embodiment. In stage 220, the client passes the worker ID of the previously reserved worker (e.g., in the worker key of the reservation context 168 of FIG. 10) as a worker hint to the reservation mechanism (e.g., of the service object 90 of FIG. 3). In stage 222, the service object will attempt to allocate the previously reserved worker if it is available. In stage 224, if the previously reserved worker is available, then the service object allocates the previously reserved worker as provided in the hint. However, if not, then the service object simply allocates the next available worker, in stage 226.
  • As discussed above with respect to FIG. 10, the [0109] reservation context 168 of FIG. 10 contains information about the client, the service, and the previously reserved worker. The service object uses the reservation context as a hint when allocating a worker. Thus, in some embodiments, once a worker is allocated, the service object fills in the reservation context with the reserved worker ID, as shown in stage 228 of FIG. 14. The worker also may check the reservation context to make sure that the client ID is present and to keep track of clients that have reserved the worker. The worker may also verify if the client has a valid reservation (e.g., that the reservation has not been revoked).
  • FIG. 15 provides a reservation revocation call back interface in accordance with some embodiments of the present invention. The reservation revocation call back interface as shown in FIG. 15 is written in IDL. [0110]
  • In some embodiments, a call back notification mechanism increases scalability. For example, a client can continue to use an expired reservation until the concurrent load on the system increases to a level at which reservation revocations begin to occur. Thus, a client may not release a worker even after obtaining a new reservation, and still not cause new clients problems when trying to access a limited resource. Even if the call back notification fails to reach the client, the worker will still be notified of the revocation. If the service proxy issues a request to the worker using an expired reservation, the worker raises an exception indicating this problem. In particular, as discussed above with respect to FIG. 14, the worker checks the reservation context of each client that attempts to use the worker. Thus, the service proxy, upon receipt of the exception raised by the worker will obtain a new reservation and retry the request. Of course, once the reservation of the client expires, the service object is free to revoke the client's reservation and offer the reservation to some other client. When such an event occurs, a notification is sent to the client's service proxy that holds the reservation. The client's service proxy can then invalidate the worker reference immediately. Any new operations performed on the service proxy will force it to allocate a new worker before dispatching the operation. [0111]
  • Accordingly, a service proxy obtains a reservation on a worker object and may not release the worker until there is a lack of free workers and there are competing clients for the workers. In other words, if a service proxy has reserved a worker and there is no contention for the worker, the service proxy may never release the worker. In such a case, the service proxy does not issue releaseWorker and allocateWorker requests to the service object, and the service proxy simply continues to use the worker object until no longer needed. If there is a worker contention and a reservation has to be revoked, then the reservation revocation callback interface is used and a callback is issued to the service proxy that is holding the worker (e.g., the reservation time of FIG. 9 has expired). [0112]
  • FIG. 16 provides [0113] worker properties 230 in accordance with some embodiments of the present invention. As discussed above, the workers provide an encapsulation of a limited resource. Like the service object, the worker interface derives from the administrative (admin) layer. For example, the service object 90 of FIG. 3 uses the worker's admin layer to activate and deactivate the workers 92, 94, and 96. The worker interface implements operations that allow the service to notify the worker about its reservations. The worker uses the reservation information (e.g., reservation properties 166 of FIG. 9 and reservation context 168 of FIG. 10) to disallow unexpected or expired clients from accessing the worker. The worker also keeps track of clients that have reserved the worker and ensures that the number of clients does not exceed maxClients. The service instantiates the worker either in process or out of process as discussed further below with respect to FIG. 19. Once the service object instantiates the workers into the worker registry, the service object calls setProperties to pass on the worker properties. Once the worker receives the properties and initializes the internal data structures such as the worker's client list, the worker is ready to receive client requests.
  • In particular, the [0114] worker properties 230 are provided in FIG. 16. For example, worker.numProcesses provides the number of processes to start up to support the number of workers supported when the workers are out of process. In some embodiments, the numWorkers divided by the numProcesses equals the numWorkersPerProcess. Worker.processLocation is either in process or out of process indicating whether the workers will run in the same VM as the service. Worker.type indicates, for example, the JAVA class that will be instantiated for JAVA workers (either in process or out of process). Worker.javaVM specifies the JAVA VM used to launch worker.type for out of process JAVA workers. Worker.javaDebugVM is the default command to run the JAVA VM in debug mode (e.g., JAVA_g-debug). Worker.exe indicates the command line to launch (C++) out-of-process workers.
  • Worker.portNumber is the port number on which out of process workers receive requests. A port number represents a numbered network connection. For example, a telephone number is a port number in the telecommunication network. The Internet is based on the TCP/IP network protocol. Thus, in the Internet context, the port number is local to a server (i.e., unique within the server), and the port number is a unique integer that represents the IP address of the network connection to the server. For example, an allocated worker listens for an incoming request on the IP address of the network connection, and the incoming request may be an operation that is exported by the worker in the IDL interface of the worker. [0115]
  • Worker.maxClients is the maximum number of simultaneous clients that are allowed access to a single worker. If the maxClients value is greater than [0116] 1, then the worker is thread safe (i.e., multi-threaded).
  • Worker.inactiveServiceInterval is the number of milliseconds before the worker considers its service dead and exits. In particular, each worker is periodically pinged by the service object, and the pinging interval depends on the service's pingInterval property (i.e., the Service.pingInterval period is less than the Worker.inactiveServiceInterval period). The pinging of workers may be used to obtain runtime workload statistics from the workers for workload balancing purposes and also to obtain the current state of the workers. For example, if a worker has failed for some reason, the state indication will help the service object restart the worker and bring the worker back online, which represents part of the fault tolerance aspects of the service framework of the present invention. Thus, if the worker is not pinged by the service object within the Worker.inactiveServiceInterval property, then the worker assumes that the service object is no longer online, and the worker terminates itself. The worker terminates itself, because the service object may have failed without terminating its workers. If the service object failed, then the SM that monitors the failed service will restart the failed service, and the restart of the failed service will cause the original worker pool to be stranded, and thus, the worker terminates itself to avoid being stranded. [0117]
  • ServiceType.XXX for each service is expected to have its own properties (prefixed by the service type), and there can be an arbitrary number of these properties. In particular, the ServiceType.XXX property is a property of a service identified by ServiceType. For example, the “RDBMS Data Service” has a service type DataService and has a property pingInterval that defines how frequently the DataService will ping its workers. Thus, this property has a name (e.g., DataService.pingInterval), and the property has a value (e.g., 200 seconds). In some embodiments, the properties are implemented in JAVA and stored in a properties file, and the service manager is responsible for reading and writing the stored properties. [0118]
  • FIG. 17 is a flow diagram illustrating the operation of pinging workers in accordance with some embodiments of the present invention. [0119] Reference numeral 240 refers to a first stage in this embodiment. In stage 240, each worker of a service is pinged by the service periodically. In stage 242, it is determined whether or not the worker answers the ping within a predetermined time period. If the worker does not answer the ping within the predetermined time period, the service object considers the worker to be dead and re-instantiates the worker, as shown in stage 244. Each worker also includes a service object ping interval timer. In stage 246, a worker determines whether the service object has pinged the worker within a particular time interval. If not, then the worker considers the service object to be dead and the worker terminates itself as shown in stage 248. Otherwise, the pinging operation repeats as shown in FIG. 17. Accordingly, the pinging operation provides fault tolerance in the service framework of the present invention.
  • FIG. 18 shows a [0120] server 280 in accordance with another embodiment of the present invention. In particular, a server 280 includes an admin interface 282, a SM 284, a start/stop functionality 286, and a configuration 288. Because the service framework is based on a distributed object model, and there can be many objects in the service framework that interact with each other, it is preferred to group objects together into a higher level entity so that the distributed objects can be more effectively managed. Accordingly, the configuration 288 includes a collection of services and service locators along with their properties. The configuration 288 is maintained by the SM 284. In particular, when the SM 284 comes up, it comes up with a specified configuration of services and service locators, such as a service locator 290.
  • For example, a configuration may contain the following services: an RDBMS service with two clones, a session/state management service with one worker, and a service locator with three clones. The configuration is then given a name, and the property files for each service instance in the configuration are stored within the configuration. [0121]
  • Referring to FIG. 18, the [0122] configuration 288 includes a cell. A cell represents a distributed configuration. Two hosts with the same configuration name but different contents can link up together to form a single cell. The cell is designated by a list of hosts that the configuration spans. Once the configurations are linked into a cell, the set of service locators and services is common to the entire cell (i.e., each service locator contains a list of all services in all hosts in the cell). Thus, clients accessing any service locator in the cell can access any service in the cell. The cell is maintained in a consistent manner by the SM managing the individual configurations. SM operations may include many different functions such as managing the service and service locator instances, providing fault tolerance by pinging as discussed above with respect to FIG. 17, and exporting a management interface to administer the services.
  • Referring to FIG. 18, the management interface can be used by administrative tools to change the SM's configuration (e.g., add a new service, change service locator clones, etc.). Thus, the management interface can be used to modify the operations of any of the entities in the configuration (e.g., change numWorkers for an RDBMS service). Finally, the management interface offers [0123] mechanisms 286 to start/stop each instance of a service or service locator and obtain the current state of each of the instances in the configuration.
  • Further, the service locators are linked to the configurations. Thus, a service locator in a configuration on a particular server actually knows about services on another system, the distributed configuration or the cell. Thus, if a request for a service is made to the [0124] service locator 290, then a client can actually get access to a service provided by the server 280, but may also be provided access to a service instance in the cell which is residing on a server that may be anywhere on the network (e.g., the global Internet). Moreover, this entire process is transparent to the client, because the client's service proxy is simply returned a service handle.
  • However, the [0125] SM 284 is only responsible for services in its own configuration 288. Thus, the SM 284 is responsible to supply the information regarding its configuration 288 to all service locators in the cell. The service locators in the cell are well known (i.e., they are actually embedded in the cell's description itself). Thus, given a cell, a connection can be made to service locators in the cell. Thus, the SM 284 knows the list of services, loads this information and the properties of the service, and simply forwards such information periodically to the service locator 290. Thus, the service locator 290 can assume that the information provided from the SM 284 represents currently available services.
  • FIG. 19 shows an out-of-[0126] process factory 300 and an in-process factory 308 in accordance with some embodiments of the present invention. The number of workers instantiated by the service is limited by the service property service.numWorkers. All the workers may be of the same type or of different types (e.g., high priority and low priority workers). The workers are instantiated when the service is initialized by the SM (i.e., the properties of the service and the workers are passed to the service object). Workers can be instantiated in a separate process or within the same process as the service object as shown by out-of-process factory 300 and in-process factory 308, respectively. Workers are instantiated by using worker object factories, as shown by an object factory 302 and an object factory 312.
  • The object factory is an object that can instantiate or fabricate any number of objects of a given type. For example, in an object-oriented language like JAVA or C++, to instantiate an object is to create a new object using the “new” syntax operator, and in CORBA, a CORBA object is instantiated using the “obj_is_ready” operation defined in CORBA. A worker object factory such as the [0127] object factory 302 and the object factory 312 can instantiate any number of worker objects. In particular, the object factory 312 is a CORBA object that can be in the same process (in process). Thus, the service object (e.g., the service object 90 of FIG. 3) can then use the object factory 312 to create type 1 workers 318 (e.g., low priority workers) and type 2 workers 320 (e.g., high priority workers). In some embodiments, the object factory 312 is a CORBA object implemented in JAVA.
  • Referring to FIG. 19, the object factory can also be in a separate process (out of process), in which case, the service object spawns (forks) a separate process, and the process then instantiates an object factory and passes a handle to the object factory back to the creator. In particular, the spawned process creates the object factory, registers the object [0128] 302 (i.e., the object factory) with the ORB, and passes a reference to the object back to the parent process using the standard I/O string. The object and the parent process (e.g., the service object 90 of FIG. 3) that spawned the object factory process use the object reference of the object factory to instantiate the necessary objects in that process (e.g., the worker pool). Thus, the service object can then use the object factory 302 to create type 1 workers 314 and type 2 workers 316. In some embodiments, the object factory 302 is a CORBA object implemented in JAVA.
  • Thus, the object factory is a flexible mechanism to create and manage pools of similar objects (i.e., objects that have the same type and the same set of properties) such as worker pools. In some embodiments, object factories are used to create the service objects (in the SM), the worker pools (in the service), and other objects such as the service locator. [0129]
  • In some embodiments, the object factory is a remote CORBA object that is implemented in JAVA and C++. Thus, a JAVA-based factory can instantiate any CORBA object that is implemented in JAVA and instantiates the object in the same address space as the factory. Accordingly, if the factory object is in a separate address space, any objects created in the factory are in the separate address space of the factory object (i.e., in the separate process). Because the JAVA-based factory object can instantiate any JAVA-based CORBA object, the same JAVA-based factory may be used to instantiate a service locator (e.g., a JAVA-implemented CORBA object) or a service object (e.g., a JAVA-implemented CORBA object) and, thus, reside in the same address space. [0130]
  • In contrast, in some embodiments, an object factory implemented in C++ is more limited in function than a JAVA-based object factory, because the object factory implemented in C++ can only instantiate similar objects (e.g., due to limitations of the C++ language). For example, the DataService workers are implemented in C++, and the DataService worker objects are instantiated in a separate process using the object factory implemented in C++. Thus, the object factory implemented in C++ can only instantiate DataService worker objects. [0131]
  • In another embodiment, the number-of workers can fluctuate dynamically using an object factory. Thus, new workers can be added or the number of workers can be reduced, based on parameters such as the workload on the existing number of workers. In particular, the configuration (e.g., the [0132] configuration 288 of FIG. 18) may provide a minimum or maximum range of the number of workers for a service, and the number of workers can be implemented to fluctuate dynamically within the configured range depending on various parameters such as the workload on the present number of workers.
  • FIG. 20 shows clone factories in accordance with some embodiments of the present invention. An object factory can instantiate basically any CORBA object. The object factory instantiates a CORBA object using CORBA (and JAVA) introspection to determine the type of object to be created and its parameters (e.g., object name). The SM uses this functionality to create clone factories. In particular, a clone is another instance of an entity that behaves exactly like the original entity (i.e., the clone has the same properties or attributes as the original entity) but resides in a different address space. For example, a service locator clone is another instance of the service locator object in the same machine, and the service manager may instantiate a service locator clone in the same machine for fault tolerance purposes (e.g., if one service locator instance fails, the other service locator instance is still available). [0133]
  • Referring to FIG. 20, a [0134] SM 320 has created clone factories 322 and 324. The SM 320 creates factories for each service and service locator. Each clone of a service (or service locator) is located in a different clone factory. For example, if there are multiple clones for a service, the first may be located in the clone factory 322, the second in the clone factory 324, etc.
  • For example, two service locator clones and two service clones (e.g., of the DataService) may be provided. Each clone has a clone ID. Thus, one service locator clone instance may have a clone ID [0135] 0, and the other service locator clone instance may have a clone ID 1. Similarly, one DataService instance may have a clone ID 0, and the other DataService instance may have a clone ID 1. The SM 320 instantiates these clones. In particular, the SM 320 instantiates two object factories, one for clone 0 instances and the other for clone 1 instances. The two clone factories may be in different address spaces (processes), which provides fault tolerance in the service framework of the present invention (e.g., insuring that no two clones are in the same address space provides fault tolerance). The clone factory 0 instantiates the service locator clone 0 and the DataService clone 0. The clone factory 1 instantiates the service locator clone 1 and the DataService clone 1. In some embodiments, a service can have any number of clones, and the SM 320 will instantiate the appropriate number of clone factories.
  • Generally, a process represents an operating system term that may also be used to refer to an address space. In particular, operating systems such as HP-UX™ or Windows NT™ use the term process to refer to a region of computer memory that is separated from the rest of the computer's memory (e.g., allocated memory). Thus, a region of memory is allocated to a program that is being executed. The program is launched by executing an executable file (e.g., .exe in Windows NT). Once the program terminates, the region of memory is deallocated and returned to the computer's memory pool. A program needs a region of memory to maintain data that it has read from the terminal, file system, or from the network. The program manipulates the data and performs its work all within the allocated region of memory. Accordingly, a process is a program that is executing within a region of memory allocated by the operating system. Thus, an out-of-process worker represents a worker object that is instantiated in a process that is separate from the process where the service object resides. An out-of-process service object represents a service object that resides in a process that is separate from the process where the SM object resides. Clone factories represent a set of factory objects with each factory residing in a separate process. [0136]
  • Accordingly, clone factories such as the [0137] clone factories 322 and 324 of FIG. 20 provide additional fault tolerance for the service framework of the present invention. In particular, clone factories are located in different processes so that each clone provides additional fault tolerance and high availability. Once the service object (e.g., the service object 90 of FIG. 3) instantiates a worker pool, the service object pings the workers to make sure that the worker pool is alive and well, as discussed above with respect to FIG. 17. If a worker in the pool does not respond to the pings, the service object re-instantiates the failed worker using the appropriate factory. Also, it should be apparent that two clones may be implemented on the same machine. Such an implementation would be useful for providing fault tolerance. In particular, a clone provides basically an identical worker pool, thus, providing the same or nearly identical work as the original worker pool. As a result, if a process or VM is lost, the state that the clients have set up is not completely lost. In particular, in such an event, because the clients are distributed among the clones on the same machine a loss of a process or VM on a particular server will affect some of the clients but not all of the clients attached to the server. Hence, if a particular address space fails abnormally, then clones may advantageously provide for fault tolerance and high availability, because clones in different address spaces may not have been affected. Accordingly, the service framework of the present invention provides a fault tolerance architecture.
  • FIG. 21 provides an object factory interface in accordance with some embodiments of the present invention. The object factory interface of FIG. 21 is written in IDL. [0138]
  • FIG. 22 provides [0139] service locator properties 330 in accordance with some embodiments of the present invention. As discussed above with respect to FIG. 20, service locators may be cloned, but the service locator clones may not communicate with each other. A service locator proxy keeps track of the various service locators in the network and can select the service locator with a minimum workload on which to perform its service lookups. In some embodiments, the service locator proxy is used by almost all the modules in the framework including the service proxy to encapsulate access to the service locator. Thus, the service locator proxy provides another level of workload balancing management in the service framework of the present invention.
  • The [0140] service locator properties 330 are shown in FIG. 22. In particular, sl.javaVM is the VM command line used to launch the out-of-process service locators, sl.javaDebugVM is the default command to run the JAVAVM in debug mode, sl.inactiveManagerInterval is the minimum number of milliseconds that can elapse before the service locator considers the VM out of service and unregisters its services, sl.locatorId is the unique identifier of the service locator (e.g., the service locator instance's object name), and sl.owningManagerId is the identifier of the owning manager (e.g., the SM 86 of FIG. 3 assuming that the SM 86 launched the service locator).
  • FIG. 23 provides a service locator interface in accordance with some embodiments of the present invention. In particular, FIG. 23 provides a service locator interface written in IDL. [0141]
  • FIG. 24 provides a load balancing manager (LBM) interface in accordance with some embodiments of the present invention. The LBM interface may be written in IDL as provided in FIG. 24. The LBM is an entity of the service object. In particular, the service object instantiates an LBM to manage the pool of workers. The LBM may be a plug-in object that can be customized or entirely replaced. [0142]
  • The LBM provides a level of workload balancing in the service framework of the present invention. In particular, the service object may use the LBM to perform workload balancing among its workers in the worker pool. In some embodiments, the service framework provides two managers, a fully capable LBM and a null LBM. The fully capable LBM supports access modes (e.g., exclusive mode) and also provides a sophisticated scheduling scheme based on worker statistics. In contrast, the null LBM does not support access modes (i.e., the null LBM treats them all as the same and randomly selects a worker from the pool of workers). If a service encapsulates a limited resource, the fully capable LBM would be preferred. However, if the service encapsulates an abundant resource (e.g., provides more than one [0143] worker 92 per service), or if there is the constraint that there may be only one worker per service, then the null LBM would be sufficient and would improve performance.
  • In addition, the LBM acts as a repository of worker objects. The service object creates the workers in the worker pool and registers each worker with the LBM. In particular, each worker in the worker pool, as soon as it is launched, is registered with the LBM using the registerWorker method. Even though the LBM is an entity of the service object, the worker is registered with the LBM, because the LBM may be a plug-in object, so it may be independent of the service object (i.e., does not share internal data with the service object). Once the worker is terminated, the service object unregisters the worker from the LBM's registry using the unregisterWorker method, and the service object may terminate the worker pool. [0144]
  • FIG. 25 shows a fully [0145] capable LBM 360 in accordance with some embodiments of the present invention. The fully capable LBM uses a sophisticated scheme of priority queues and a scheduler, an allocation manager 362, to implement the allocateWorker and releaseWorker methods. The service object (e.g., the service object 90 of FIG. 3) simply forwards these requests to the registered LBM. The fully capable LBM 360 includes five priority queues. In particular, an idle queue 368 contains workers that have no client reservations. In the idle queue 368, workers may be sorted in increasing order of workload.
  • In some embodiments, the workload value of a worker is a floating point number computed by the worker that represents the load on the worker. In particular, the workload value may be determined by a calculation based upon such factors as the ratio of time spent in executing a worker method to the elapsed time and the CPU load. The elapsed time represents the time between pings from the service object to the worker (e.g., the value provided by the property Service.pingInterval). The time spent in executing a method is calculated by summing the time spent in any operation in the worker. Thus, the ratio of the elapsed time to the time spent in executing a worker method provides an indication of the ratio of time that was spent by the worker actually performing a worker method. The CPU (central processing unit or processor) load is the time spent by the computer in performing work. Accordingly, the combination of these two factors provides a measure of the workload on the worker and the workload on the CPU. [0146]
  • Referring to FIG. 25, the [0147] usable queue 370 contains workers that have some client reservations, but the number of clients for each worker is less than the maxClients. In the usable queue 370, workers may be sorted in increasing order of a combination of workload and available client reservation slots. An unusable queue 374 contains workers that have client reservations with the number of clients equal to maxClients per worker (i.e., no more reservations are possible against such workers). In some embodiments, the unusable queue 374, is not sorted. A revocable queue 372 contains workers that have one or more reservations that have timed out and can be revoked if necessary. In the revocable queue 372, workers may be sorted based on the time of reservation expiration (i.e., workers containing older revocations are higher in the queue). A client wait queue 366 contains clients that are waiting for a worker to be allocated. In some embodiments, all workers are initially in the idle queue 368, and as reservations are handed out, the workers are moved into the usable queue 370, the unusable queue 374, and the revocable queue 372 as appropriate.
  • Referring to FIG. 25, in some embodiments, the five queues are managed by two background threads, a [0148] queue manager 364 and an allocation manager 362. The queue manager 364 handles the tasks of maintaining a sorted order on each of the worker queues (except the unusable queue 374 which is not sorted), as described above. The queue manager 364 periodically browses the unusable queue 374 and looks for expired reservations. If a worker in the unusable queue 374 has an expired reservation, the worker is moved to the revocable queue 372, but the expired reservation is not yet revoked.
  • Referring to FIG. 25, the [0149] allocation manager 362 is the scheduler that manages the client wait queue 366. In some embodiments, the allocation manager 362 maintains the client wait queue 366 in first come first serve (FCFS) order, but maintains the discretion to move clients forward based on their declared duration (i.e., based on the reservation properties such as the access mode, the reservation time, etc., as discussed above with respect to FIG. 9). For example, shorter duration requests are generally moved ahead of longer duration requests. Also, the LBM may move workers into the revocable queue if the workers have clients holding reservations with them that have expired (e.g., based on the reservation timeout). In some embodiments, the allocation manager 362 handles various client wait modes such as no_wait, timed_wait, and indefinite_wait as discussed above with respect to FIG. 9. The allocation manager 362 also scans the worker queues waiting for an available worker.
  • In some embodiments, the [0150] allocation manager 362 checks for any worker hints supplied in the waiting client's reservation context and first attempts to reserve the hinted worker. If the hinted worker is unusable, then the allocation manager 362 attempts to reserve the next available worker. If a worker is available in the idle queue 368 or the usable queue 370, then the allocation manager 362 immediately allocates the available worker to the waiting client. If no workers are available in the idle queue 368 or the usable queue 370, then the allocation manager 362 scans the revocable queue 372 waiting for new workers to appear. If the first available worker is a worker in the revocable queue 372, then the allocation manager 362 allocates the revocable worker to the waiting client after revoking the expired reservation (e.g., the first worker in the revocable queue 372 is selected for a revocation and the oldest expired reservation is revoked). The revocation involves a notification to the affected worker using the clientRelease call and a callback to the client that holds the expired reservation using the reservationTimedOut call on the ServiceProxy callback interface.
  • FIGS. [0151] 26A-26B are a flow diagram illustrating the call sequence operation in accordance with some embodiments of the present invention. In stage 400, assuming a client proxy does not already have a reserved worker for a service request, the service proxy obtains a service handle from the service locator. In stage 402, the service proxy issues the allocateWorker call with a set of reservation properties and an uninitialized reservation context. In stage 404, the service object forwards the request to the LBM 360. In stage 406, the LBM determines if any clients are waiting. If clients are waiting, then the LBM enqueues the request in the client wait queue in stage 408. Otherwise, the LBM proceeds to stage 410.
  • Referring to FIG. 26A, in [0152] stage 410, the LBM attempts to-allocate a worker from the idle queue or the usable queue, but if no workers are available, then the LBM attempts to allocate a worker from the revocable queue. In particular, the reservation context is uninitialized, so that there are no worker hints available. Thus, the LBM takes the first entry in the idle queue. If the idle queue is empty, then the LBM checks the usable queue. If the usable queue is empty, then the LBM checks the revocable queue. If no workers are available in the revocable queue, then the LBM checks the unusable queue to see if any workers have expired reservations. If so, the LBM moves a worker with an expired reservation to the revocable queue.
  • Once a worker is available in the revocable queue, the LBM selects the first worker in the revocable queue for a revocation and revokes the oldest expired reservation. The revocation involves a notification to the affected worker using the clientRelease call and a callback to the client that holds the expired reservation. Once a worker with a free reservation is available (e.g., in the revocable queue, the usable queue, or the idle queue), a new reservation is created for the client with the appropriate reservation properties. The worker is notified of the new client and its reservation properties, and the reservation context is appropriately modified (e.g., the reservation context may include current information in the client key, the service key, and the worker key). The affected worker moves to the appropriate queues (e.g., from the idle queue to the usable queue or the usable queue to the unusable queue, etc.). Thus, in [0153] stage 412, the call to allocateWorker returns with a suitably filled reservation context.
  • Referring to FIG. 26B, in stage [0154] 414, the service proxy stores the reservation context and then issues the request to the worker with the reservation context. In stage 416, the worker receives the request, verifies the request using the reservation context (e.g., checks whether the client has valid access to the worker, that is, the worker is notified by the service object of the reservation), and then executes the request. Finally, in stage 418, the worker returns the result of the request to the client's service proxy which provides the result to the client.
  • FIG. 27 shows a [0155] client wait queue 430 and an idle queue 438 of the LBM 360 of FIG. 25 in accordance with another embodiment of the present invention. In particular, as shown in FIG. 27, the client wait queue 430 may include three internal queues, one for each priority level, high priority 432, medium priority 434, and low priority 436. Similarly, the idle queue 438 may include three internal queues, one for each priority level, high priority 440, medium priority 442, and low priority 444. Further, each queue of the LBM 360 of FIG. 25 may be similarly implemented to include priority sub-queues. Thus, if a client comes with a high priority request, the client's request is entered into the high priority client wait queue 432 of the client wait queue 430. In some embodiments, the allocation manager always services the high priority requests ahead of the lower priority requests. Also, in some embodiments, workers are assigned a priority. Thus, high priority workers only work for high priority clients, and the high priority workers are initially entered in the high priority idle queue 440 of the idle queue 438. When workers are moved from one queue to another, they are moved into the appropriate priority sub-queue. Accordingly, this embodiment provides yet another level of workload balancing in the service framework of the present invention.
  • In some embodiments, each reservation session has a specified durationTimeout attribute in the reservation properties. The reservation session represents a particular reservation that a service proxy of a client holds on a worker. The service object records the reservation session and uses the information in the session to control the reservation (e.g., revoke the reservation once the timeout expires). In particular, the reservation may include reservation properties provided by the service proxy on the allocateWorker call, and the reservation context, which is sent back and forth between the proxy and the service on all calls. The reservation context includes the client key (identifies the service proxy uniquely), the service key which identifies the service object itself, and the worker key which identifies the worker uniquely within the service. Once the service object reserves a worker for a client, the service object marks the worker key in the reservation context. Further, the LBM may store the reservation session as soon as the reservation on a worker is given to the client. [0156]
  • Every service proxy has to supply a valid durationTimeout value when calling allocateWorker. The durationTimeout determines the length of time (in milliseconds) that the service object (e.g., the service object [0157] 90) guarantees the worker to stay reserved for this client from the moment the worker has been allocated. If the client has a set of operations to be called that must be executed on the same worker instance, then this set of operations must be completed within the durationTimeout interval for that work to be guaranteed. Once this interval expires, the service object may revoke the reservation of this client and offer the worker to another client that is waiting for a worker to become available.
  • Moreover, there are some optimizations in the reservation mechanism to reduce the number of calls made by the service proxy to the service. In some embodiments, once the durationTimeout expires, the client does not immediately lose the worker reservation (i.e., asynchronous reservation revocation). The client loses the reservation only if there exists a contention. If there are other clients waiting for the worker, the client that has an expired durationTimeout may lose the worker. If there is no contention, the client's reservation is usually still valid, and the client can keep using the worker. If the service object decides to revoke the reservation, then the service object issues the reservationTimedOut call to notify the service proxy. The first subsequent operation on the service proxy will try to reserve a new worker before executing the requested operation. [0158]
  • In addition to the durationTimeout, in some embodiments, there is another time-out attribute in the reservation properties, an inactiveTimeout. The inactiveTimeout detects idle clients and revokes their reservation. If a service proxy that has reserved a worker has not used the worker within the inactiveTimeout interval, then the worker notifies the service object, and the service object may revoke the worker and assign it to another client that is waiting for the worker. If the worker is revoked, then the service proxy is notified of the revocation using the reservationTimedOut call. In some embodiments, such a revocation occurs only if there is contention for workers. In some embodiments, the difference between the durationTimeout and the inactiveTimeout is that the durationTimeout is handled by the service object whereas the inactiveTimeout is handled by the worker. [0159]
  • FIG. 28 shows a [0160] service object 450 and an LBM 454 according to another embodiment of the present invention. In particular, the service object 450 periodically pings each worker in the worker pool to obtain worker statistics 452 such as the workload of each of the workers. The service object 450 supplies the worker statistics 452 to the LBM 454 which uses the worker statistics 452 for workload balancing. For example, the LBM 454 may use the workload statistics 452 to sort the worker queues 458, 460, and 462 such as the idle queue, the usable queue, and the unusable queue. If the service object ping fails on a particular worker, then the worker is unregistered from the LBM's worker registry 456 by the service object, and all existing reservations on the worker are revoked by the service object 450. The service object 450 will then re-instantiate the worker and register the re-instantiated worker in the LBM's registry 456.
  • The [0161] service object 450 maintains the runtime statistics of each worker and constructs representative service statistics based on the worker statistics 452 such as the average of the worker numbers for certain statistics (e.g., workload). The service object 450 periodically forwards this information to the parent of the SM in response to the periodic pings from the SM (i.e., the parent of the SM is the SM that instantiated the service object). The SM periodically passes the service statistics along with the service information to the service locators in the cell that are responsible for distributing the object references of the registered services. These periodic updates are responsible for keeping the service locator's repository up to date.
  • FIG. 29 shows the scalability of the service framework in accordance with some embodiments of the present invention. The service framework of the present invention is based on a scalable architecture. In some embodiments, the service framework includes a variety of features that enhance scalability such as clones (e.g., service locator clones, service clones, etc.), multiple workers, multi-threaded workers (discussed above), asynchronous revocation callbacks (discussed above), and distributed configurations or cells (e.g., services that are part of the same administrative framework may be distributed across multiple machines as described above with respect to FIG. 18). [0162]
  • Scalability can improve throughput almost linearly, ideally, with the addition of resources. For example, in a SM that manages one instance of an RDBMS service, adding another instance of the service should double throughput, in the ideal case. Such an increase in throughput should be linear as additional service instances are added. However, in practice, scalability does not increase linearly because of bottlenecks in the system that arise as the number of resources increase significantly. Also, the network bandwidth and the CPU power are limited and therefore inhibit a linear increase in scalability. [0163]
  • As shown in FIG. 29, the service framework of the present invention can increase scalability by providing service locator clones and service clones. A clone is another instance of an object that is essentially identical to the original instance. All clones use the same set of properties. For example, a clone of a service represents another instance of the service object with its own worker pool. The two instances of the service are quite independent and will perform their own reservations and execution of requests. Typically, clones live in different address spaces in computer storage. Accordingly, if a clone goes down for some reason, it normally does not affect the other clones. Thus, clones also introduce another level of fault tolerance in the service framework of the present invention. In some embodiments, each service has a property that determines the number of clones for the service. The SM starts all clones of a service when the service is started. Clones are applicable to any SM managed instance (e.g., a service locator instance). A SM managed instance represents an instance that the SM instantiated and which the SM periodically pings. [0164]
  • In particular, FIG. 29 provides a [0165] service locator clone 474 and a service locator clone 476. If there are multiple service locator clones, the SM registers the service information with all available service locator clones. Thus, each clone is capable of providing handles to any service in the network. Thus, a service proxy 472, residing in a client 470, that needs to bind to, for example, an RDBMS service can send a getService request to any one of the service locators, the service locator 476 or the service locator clone 474, thereby balancing the workload among the multiple service locator instances. Of course, multiple service locator instances, possibly on different servers, can also be provided. This would further increase scalability if, for example, a particular server becomes CPU-bound (i.e., processor bound).
  • FIG. 29 also shows multiple service clones residing in different servers. In particular, FIG. 29 shows a [0166] service clone 482 for an RDBMS 480 residing in a server 478 and a service clone 488 for an RDBMS 486 residing in a server 484. Each service can have a number of service clones (e.g., specified by the numClones property of the service). Each clone of the service is a full instance of a service (e.g., contains a service object and a pool of workers). Accordingly, additional service clones improves throughput by balancing the workload among the service clones.
  • In some embodiments, the numWorkers property of a service controls the number of workers that can be instantiated for the service. Each worker implements the functionality of the service and thus encapsulates the functionality of the service. For example, a worker for the DataService implements the DataService interface (e.g., executeSQL or executeStoredProcedure). Thus, the worker for the DataService may differ from a worker for another service. Concurrent access to each worker is controlled by the maxClients property of the worker. Multiple workers can be instantiated in the same process which allows multiple clients to work concurrently on multiple workers. In particular, multiple workers in the same process means that there are multiple workers (e.g., multiple worker CORBA objects) instantiated in the same process by the service object. For example, if a worker can only support one reservation at a time (e.g., the worker.maxClients property is set to 1), and there is only one worker in the process, then only one client can perform work in that process at a time. If there are two workers in the process, then two clients can perform work in that process. If the two workers are in two different processes, then two clients can perform work concurrently, but in each process, there is only one client active at a time. [0167]
  • Generally, a thread-safe program (code) is a program that supports any number of threads in the same program (i.e., a thread is an operating system term that indicates a thread of control in a process). Thus, if the code of a worker for a service is not thread-safe (i.e., the worker only supports one client at a time), only one client can perform work on the worker at a time. The service framework of the present invention allows multiple clients to perform work on an instance of a service even though the workers for the service are not thread-safe. For example, multiple workers may be instantiated in different processes so that multiple clients can perform work on the service using these workers. Moreover, multiple workers may be instantiated in the same process so that multiple clients may perform work on the service using these workers. Accordingly, the service framework of the present invention allows for multiple clients to perform work on the service using non-thread-safe workers without requiring the creation of multiple processes. [0168]
  • As the number of workers increases, the throughput generally increases, particularly for workers that are heavily serialized internally. Generally, serialized internally means that certain sections of the code of the worker are called critical sections, which are sections of code that are not thread-safe. Each client accessing a worker represents a thread. Thus, a critical section only supports one client at a time. If a worker has a large number of critical sections, or if a significant segment of the code of the worker is a critical section, then throughput may suffer, because each client must process the critical section(s) of the worker one at a time. Thus, if a worker is serialized internally, then each critical section serializes access to particular code of the worker and thus bottlenecks may reduce throughput. Thus, a worker with no critical sections may have higher throughput, because multiple clients can access the worker concurrently. Of course, additional workers may be instantiated to support concurrent access by additional clients. However, the higher the number of workers, the greater the overhead in the service itself, because the service object must collect the workload from all the workers in order to perform workload balancing of the workers and worker reservation management. [0169]
  • Further, redundancy through the use of clones as shown in FIG. 29 also provides increased fault tolerance in the service framework of the present invention. For example, the service framework can isolate and withstand faults generated by worker implementations, and the service framework has a high-availability feature to tolerate downtimes. In particular, in some embodiments, the service framework provides for fault isolation. For example, workers (e.g., workers implemented in C++ or JAVA) are prone to fault generation, but the faults are isolated so that the faults do not affect the running (current) configuration. The worker fault isolation can be accomplished in various ways: each worker can be located in a separate process using the numProcesses property and the numWorkers property (i.e., an out-of-process worker), and thus a fault generated by the worker would be isolated. Thus, because there can be multiple instances of almost every entity (e.g., service locator, SM, service, worker, etc.), faults within any particular address space can be tolerated. Hence, a death of a service instance can be tolerated without a complete outage if clones of the service are present and registered with the service locator. Any work performed on the service instance at the time of death may be lost and any dependent work may be affected, but clients issuing requests to other clones of the service will not be subject to any interruptions. Similarly, service and service locator instances can be distributed across multiple machines thereby isolating machine or network area faults as well. Accordingly, services as well as workers can be launched out of process thereby providing for fault isolation (e.g., distribution among different address spaces), or services as well as workers can be launched in process thereby providing for optimal memory usage. [0170]
  • Further, in some embodiments, the service framework includes an automatic restart feature that enhances the fault tolerance of the service framework of the present invention. In particular, every object factory can instantly restart a failed object in the event of a failure. For example, if a worker fails in an abnormal manner, the object factory restarts the worker immediately. Accordingly, the failure and the subsequent restart would be apparent only to the service proxy of the client that had been using the failed worker at the time of the failure. [0171]
  • In addition, the service framework of the present invention also provides high availability. In particular, the service framework supports redundancy at the worker and service object levels (e.g., worker clones and service clones). In some embodiments, multiple workers can be configured for a service (e.g., multiple workers can be instantiated based on the numWorkers property of the service), multiple service clones can be configured (e.g., defined in a service property such as service.numClones), and multiple service locators can be configured. The number of service locator instances in an SM may be defined by a service locator property such as serviceLocator.numClones (e.g., if the service locator has numClones set to 2, then the SM instantiates 2 service locator clones). [0172]
  • Also, in some embodiments, the service framework of the present invention also provides rebinding and fault tolerance as illustrated by the flow diagram of FIG. 30. In particular, in addition to encapsulating the complex logic for reserving a worker, the service proxy also encapsulates rebinding to a new service and worker upon failure thereby providing the service framework with an additional level of fault tolerance. [0173]
  • Accordingly, FIG. 30 is a flow diagram illustrating the fault tolerance operation for when a service object becomes unavailable. In [0174] stage 500, the service proxy determines whether an exception has been raised by the service object (e.g., whether or not the service object has failed during the reservation process). In stage 502, the service proxy also determines whether or not its currently cached service locator handle is valid. If not, the service proxy rebinds to another service locator, if available, in stage 504, and then proceeds to stage 506. In stage 506, the service proxy handles the exception raised by the service object and obtains a new service handle for a different service object from the service locator. Further, the service proxy may include some transient properties that control the rebinding processes. In some embodiments, the transient properties include a value for maximum rebind attempts and a value for delay in milliseconds before attempting to rebind to a service.
  • FIG. 31 shows an [0175] administrative interface 526 in a server 524 in accordance with some embodiments of the present invention. A console 520 is linked by a network or local connection 522 to the server 524 that includes the administrative interface 526. The console 520 allows an operator to configure the configuration. As discussed above, the configuration defines a collection of services and service locators along with the properties of the services and the service locators. The configuration is maintained by the SM. An operator defines the configuration from the console 520. Thus, when the SM comes up, it comes up with a predetermined configuration of the services, service locators, and their properties. Once configured, the configured distributed object network system that includes the service framework of the present invention is fault tolerant. Thus, an operator is not required to monitor the console once a configuration has been configured and the system started. In some embodiments, the console 520 provides a central management console for remotely administering distributed applications (e.g., a console that includes management software written in JAVA for performing remote management of clients on the global Internet such as a standard browser client).
  • FIG. 32 provides an interface of the administrative interface in accordance with some embodiments of the present invention. In particular, the administrative interface of FIG. 32 is written in IDL. The implementation of the service framework derives from the administrative (admin) layer. In some embodiments, the admin layer can activate/deactivate an object, and the admin layer can also customize the object's behavior through the properties of the object. Accordingly, the service object's interface derives from the admin interface, and the service object's implementation extends the admin layer. For example, the SM uses the service object's admin layer to start and stop the services and set the properties of the services. [0176]
  • Although particular embodiments of the present invention have been shown and described, it will be obvious to those skilled in the art that changes and modifications can be made without departing from the present invention in its broader aspects and, therefore, the appended claims are to encompass within their scope all such changes and modifications that fall within the true spirit and scope of this invention. [0177]

Claims (25)

What is claimed is:
1. A distributed object network system comprising:
a first computer;
a service residing on the first computer, the service providing access to a limited resource that resides on the first computer;
a service framework;
wherein the service framework further comprises:
a first set of computer instructions executed by the first computer, the first set of computer instructions providing access to the requested service by allocating a worker in a worker pool for the service in response to a service request, wherein the worker executes the service request, and the first set of computer instructions provides workload balancing among a plurality of workers in the worker pool for the service.
2. The apparatus of
claim 1
further comprising:
a second computer;
a network connecting the second computer to the first computer,
wherein the service framework further comprises:
a second set of computer instructions executed by the second computer, the second set of computer instructions requesting a service from the first computer.
3. The apparatus of
claim 2
further comprising:
a third set of computer instructions executed by a third computer, the third set of computer instructions providing central management and configuration for administering distributed applications.
4. The apparatus of
claim 2
wherein the service framework further comprises:
a service locator executed by the first computer, the service locator providing an object reference to the first set of computer instructions in response to a get service operation from the second set of computer instructions, wherein the service locator provides workload balancing among instances of the service.
5. The apparatus of
claim 4
wherein the service framework further comprises:
a third set of computer instructions executed by the second computer, the third set of computer instructions providing an object reference to the service locator in response to a find service operation from the second set of computer instructions, wherein the third set of computer instructions provides workload balancing among instances of the service locator.
6. The apparatus of
claim 2
wherein the service framework further comprises:
a third set of computer instructions executed by the first computer, the third set of computer instructions instantiating the second set of computer instructions and registering the service with a service locator, wherein the service locator is executed by the first computer and provides an object reference to the first set of computer instructions in response to a get service operation from the second set of computer instructions.
7. The apparatus of
claim 2
wherein the second set of computer instructions comprises methods exported by an interface of the worker.
8. The apparatus of
claim 2
wherein the second set of computer instructions further comprises:
obtaining an object reference to the service locator;
obtaining the object reference to the requested service;
obtaining a reservation on the worker in the worker pool for the requested service; and
executing the service request on the worker in the worker pool for the requested service.
9. The apparatus of
claim 8
wherein the first set of computer instructions further comprises:
allocating reservations among at least two workers in the worker pool for the service.
10. The apparatus of
claim 9
wherein the first set of computer instructions further comprises:
balancing the workload among the workers in the worker pool by providing at least two queues that each comprise workers that have various properties, wherein each queue comprises a sub-queue that comprises workers that have various priorities.
11. The apparatus of
claim 10
wherein the second set of computer instructions further comprises:
providing a reservation context that comprises a client key, a worker key, and a service key.
12. The apparatus of
claim 11
wherein the service framework is implemented as CORBA extensions.
13. The apparatus of
claim 12
wherein the second computer further comprises:
a web browser.
14. The apparatus of
claim 13
wherein the service framework provides session management for a connection between the first set of computer instructions and the second set of computer instructions during a worker reservation.
15. The apparatus of
claim 14
wherein the second computer further comprises:
a JAVA applet executed by the second computer, wherein the second set of computer instructions provides the service request in Internet Inter-ORB Protocol (IIOP) to the first set of computer instructions.
16. A computer implemented method for providing a service framework in a distributed object network system, the method comprising:
executing a first set of computer instructions in a first computer, the first set of computer instructions providing access to a service by allocating a worker in the worker pool for the service, wherein the first set of computer instructions provides workload balancing among a plurality of workers in the worker pool for the service, and the service provides access to a limited resource that resides on the first computer; and
executing a second set of computer instructions in a second computer, the second set of computer instructions encapsulating the operation of performing a service request for the second computer, wherein the second computer connects to the first computer over a network.
17. The computer implemented method of
claim 16
wherein the step of executing the second set of computer instructions further comprises:
finding the requested service using a service locator, wherein the service locator provides an object reference to the first set of computer instructions;
obtaining an allocated worker in the worker pool for the requested service, wherein the allocated worker is selected and reserved by the first set of computer instructions, and the allocated worker executes service requests;
receiving results of the service request from the allocated worker; and
passing the results of the service request to the second computer.
18. The computer implemented method of
claim 16
further comprising:
executing a third set of computer instructions in the second computer, the third set of computer instructions providing workload balancing among instances of the service locator, wherein the service locator provides an object reference to the first set of computer instructions.
19. The computer implemented method of
claim 16
wherein the step of executing the first set of computer instructions further comprises:
allocating reservations among at least two workers in the worker pool for the service based on worker statistics.
20. The computer implemented method of
claim 19
wherein the step of executing the first set of computer instructions further comprises:
providing a load balancing manager that comprises at least two queues that each comprise workers that have various properties, wherein each queue comprises a sub-queue that comprises workers that have various priorities.
21. A computer-readable medium comprising software for a service framework for a distributed object network system, the service framework software comprising:
a set of objects, the set of objects providing access to a service, the service providing access to a limited resource residing on a first computer,
wherein the set of objects further comprises:
a plurality of workers in a worker pool for the service; and
a load balancing manager that balances workloads among the plurality of workers in the worker pool for the service.
22. The computer-readable medium as in
claim 21
wherein the service framework software further comprises:
a service proxy object, the service proxy object encapsulating, for a second computer, the operation of a service request to the set of objects, wherein the second computer connects to the first computer over a network.
23. The computer-readable medium as in
claim 21
wherein the service framework software further comprises:
a service proxy locator object, the service proxy locator object providing workload balancing among instances of a service locator, wherein the service locator provides an object reference to the set of objects and balances workloads among instances of the requested service.
24. Computer data signals embodied in a carrier wave comprising:
an allocate worker interface in Internet Inter-ORB Protocol (IIOP) from a service proxy object to a service object, the service object residing on a first computer and providing access to a limited resource on the first computer, and the service proxy object residing on a second computer and encapsulating the operation of requesting a service, wherein the allocate worker interface comprises service properties and a reservation context; and
an execute request interface in IIOP from the service proxy object to an allocated worker object that resides on the first computer, wherein the allocated worker object executes service requests.
25. The computer data signals as in
claim 24
wherein the allocate worker interface in IIOP further comprises:
a worker hint in the reservation context, wherein the worker hint comprises an object reference of a worker that was previously reserved by the second computer.
US09/816,282 1997-11-13 2001-03-23 Service framework for a distributed object network system Abandoned US20010010053A1 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
US09/816,282 US20010010053A1 (en) 1997-11-13 2001-03-23 Service framework for a distributed object network system

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/969,982 US6209018B1 (en) 1997-11-13 1997-11-13 Service framework for a distributed object network system
US09/816,282 US20010010053A1 (en) 1997-11-13 2001-03-23 Service framework for a distributed object network system

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
US08/969,982 Continuation US6209018B1 (en) 1997-11-13 1997-11-13 Service framework for a distributed object network system

Publications (1)

Publication Number Publication Date
US20010010053A1 true US20010010053A1 (en) 2001-07-26

Family

ID=25516255

Family Applications (2)

Application Number Title Priority Date Filing Date
US08/969,982 Expired - Lifetime US6209018B1 (en) 1997-11-13 1997-11-13 Service framework for a distributed object network system
US09/816,282 Abandoned US20010010053A1 (en) 1997-11-13 2001-03-23 Service framework for a distributed object network system

Family Applications Before (1)

Application Number Title Priority Date Filing Date
US08/969,982 Expired - Lifetime US6209018B1 (en) 1997-11-13 1997-11-13 Service framework for a distributed object network system

Country Status (4)

Country Link
US (2) US6209018B1 (en)
EP (1) EP1029272A2 (en)
AU (1) AU1389899A (en)
WO (1) WO1999026136A2 (en)

Cited By (132)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6356930B2 (en) * 1998-10-16 2002-03-12 Silverstream Software, Inc. Connection concentrator for distributed object systems
US20030088659A1 (en) * 2001-11-08 2003-05-08 Susarla Hanumantha Rao System and method for distributed state management
US20030105836A1 (en) * 2001-11-30 2003-06-05 Nec Corporation Device and method for specifying location of object in distributed object system
US20030131041A1 (en) * 2002-01-10 2003-07-10 Darpan Dinker System and method for coordinating access to data for a distributed application
US20030154202A1 (en) * 2002-02-12 2003-08-14 Darpan Dinker Distributed data system with process co-location and out -of -process communication
US20030167332A1 (en) * 2002-03-01 2003-09-04 Sun Microsystems, Inc. Object mutation determination for incremental state saves
US20030204622A1 (en) * 2002-04-26 2003-10-30 International Business Machines Corporation Dynamic invocation of web services
US20030204786A1 (en) * 2002-04-29 2003-10-30 Darpan Dinker System and method for dynamic cluster adjustment to node failures in a distributed data system
US20030220993A1 (en) * 2002-05-21 2003-11-27 Blizniak Paul K. Method and apparatus for dynamically determining information for deploying a web service
US20040098490A1 (en) * 2002-10-28 2004-05-20 Darpan Dinker System and method for uniquely identifying processes and entities in clusters
US20040139197A1 (en) * 2003-01-14 2004-07-15 Sbc Properties, L.P. Structured query language (SQL) query via common object request broker architecture (CORBA) interface
US20040162637A1 (en) * 2002-07-25 2004-08-19 Yulun Wang Medical tele-robotic system with a master remote station with an arbitrator
US20040187141A1 (en) * 2003-01-15 2004-09-23 Alcatel Push-based object request broker
US20040199815A1 (en) * 2003-04-02 2004-10-07 Sun Microsystems, Inc. System and method for measuring performance with distributed agents
US6851118B1 (en) * 1997-10-06 2005-02-01 Sun Microsystems, Inc. Remote object access
US20050114857A1 (en) * 2003-11-20 2005-05-26 International Business Machines Corporation Method, system, and program for managing operation requests using different resources
US20050125811A1 (en) * 2002-02-14 2005-06-09 Microsoft Corporation API schema language and transformation techniques
US20050256970A1 (en) * 2004-05-14 2005-11-17 International Business Machines Corporation System and method for multi-vendor mediation for subscription services
US20050261969A1 (en) * 2004-05-10 2005-11-24 International Business Machines Corporation Layered architecture for POS (point-of sale) systems
US20050267892A1 (en) * 2004-05-21 2005-12-01 Patrick Paul B Service proxy definition
US20050264581A1 (en) * 2004-05-21 2005-12-01 Bea Systems, Inc. Dynamic program modification
US20050267878A1 (en) * 2001-11-14 2005-12-01 Hitachi, Ltd. Storage system having means for acquiring execution information of database management system
US20050267947A1 (en) * 2004-05-21 2005-12-01 Bea Systems, Inc. Service oriented architecture with message processing pipelines
US20050273516A1 (en) * 2004-05-21 2005-12-08 Bea Systems, Inc. Dynamic routing in a service oriented architecture
US20050273520A1 (en) * 2004-05-21 2005-12-08 Bea Systems, Inc. Service oriented architecture with file transport protocol
US20050270970A1 (en) * 2004-05-21 2005-12-08 Bea Systems, Inc. Failsafe service oriented architecture
US20050273497A1 (en) * 2004-05-21 2005-12-08 Bea Systems, Inc. Service oriented architecture with electronic mail transport protocol
US20050273521A1 (en) * 2004-05-21 2005-12-08 Bea Systems, Inc. Dynamically configurable service oriented architecture
US20050273517A1 (en) * 2004-05-21 2005-12-08 Bea Systems, Inc. Service oriented architecture with credential management
US20050273502A1 (en) * 2004-05-21 2005-12-08 Patrick Paul B Service oriented architecture with message processing stages
US20050278335A1 (en) * 2004-05-21 2005-12-15 Bea Systems, Inc. Service oriented architecture with alerts
US20050278374A1 (en) * 2004-05-21 2005-12-15 Bea Systems, Inc. Dynamic program modification
US20060005063A1 (en) * 2004-05-21 2006-01-05 Bea Systems, Inc. Error handling for a service oriented architecture
US20060007918A1 (en) * 2004-05-21 2006-01-12 Bea Systems, Inc. Scaleable service oriented architecture
US20060026264A1 (en) * 2000-10-30 2006-02-02 Microsoft Corporation Shared object stores for a networked computer system
US20060031431A1 (en) * 2004-05-21 2006-02-09 Bea Systems, Inc. Reliable updating for a service oriented architecture
US20060031930A1 (en) * 2004-05-21 2006-02-09 Bea Systems, Inc. Dynamically configurable service oriented architecture
US20060031432A1 (en) * 2004-05-21 2006-02-09 Bea Systens, Inc. Service oriented architecture with message processing pipelines
US20060031433A1 (en) * 2004-05-21 2006-02-09 Bea Systems, Inc. Batch updating for a service oriented architecture
US20060031353A1 (en) * 2004-05-21 2006-02-09 Bea Systems, Inc. Dynamic publishing in a service oriented architecture
US20060031481A1 (en) * 2004-05-21 2006-02-09 Bea Systems, Inc. Service oriented architecture with monitoring
US20060031355A1 (en) * 2004-05-21 2006-02-09 Bea Systems, Inc. Programmable service oriented architecture
US20060031354A1 (en) * 2004-05-21 2006-02-09 Bea Systems, Inc. Service oriented architecture
US20060034237A1 (en) * 2004-05-21 2006-02-16 Bea Systems, Inc. Dynamically configurable service oriented architecture
US20060047532A1 (en) * 2004-08-31 2006-03-02 Microsoft Corporation Method and system to support a unified process model for handling messages sent in different protocols
US20060047818A1 (en) * 2004-08-31 2006-03-02 Microsoft Corporation Method and system to support multiple-protocol processing within worker processes
US20060069791A1 (en) * 2004-05-21 2006-03-30 Bea Systems, Inc. Service oriented architecture with interchangeable transport protocols
US20060069723A1 (en) * 2000-07-27 2006-03-30 Bea Systems, Inc. System and method for concentration and load-balancing of requests
US20060080419A1 (en) * 2004-05-21 2006-04-13 Bea Systems, Inc. Reliable updating for a service oriented architecture
US20060080443A1 (en) * 2004-08-31 2006-04-13 Microsoft Corporation URL namespace to support multiple-protocol processing within worker processes
US20060168122A1 (en) * 2005-01-13 2006-07-27 International Business Machines Corporation System and Method for Protocol Independent Access and Invocation of Web Services
US20060212593A1 (en) * 2004-05-21 2006-09-21 Bea Systems, Inc. Dynamic service composition and orchestration
US20070106702A1 (en) * 2002-03-22 2007-05-10 Microsoft Corporation Selective Caching of Servable Files Based at Least in Part on a Type of Memory
US20070106761A1 (en) * 2004-05-04 2007-05-10 Beoughter Ken J Service-oriented architecture for process control systems
US7281050B2 (en) 2003-04-08 2007-10-09 Sun Microsystems, Inc. Distributed token manager with transactional properties
US20080034367A1 (en) * 2004-05-21 2008-02-07 Bea Systems, Inc. Message processing in a service oriented architecture
US7370329B2 (en) 2002-03-01 2008-05-06 Sun Microsystems, Inc. System and method for state saves in a distributed data system
US20080196048A1 (en) * 2007-02-13 2008-08-14 Amadeus S.A.S. Interface Module
US20080201017A1 (en) * 2002-07-25 2008-08-21 Yulun Wang Medical tele-robotic system
US7430738B1 (en) 2001-06-11 2008-09-30 Microsoft Corporation Methods and arrangements for routing server requests to worker processes based on URL
US20080288304A1 (en) * 2007-05-18 2008-11-20 Bea Systems, Inc. System and Method for Enabling Decision Activities in a Process Management and Design Environment
US7490137B2 (en) 2002-03-22 2009-02-10 Microsoft Corporation Vector-based sending of web content
US20090187919A1 (en) * 2008-01-23 2009-07-23 Oracle International Corporation Service oriented architecture-based scim platform
US7594230B2 (en) 2001-06-11 2009-09-22 Microsoft Corporation Web server architecture
US20100019715A1 (en) * 2008-04-17 2010-01-28 David Bjorn Roe Mobile tele-presence system with a microphone system
US20100115418A1 (en) * 2004-02-26 2010-05-06 Yulun Wang Graphical interface for a remote presence system
US20100125662A1 (en) * 2008-11-20 2010-05-20 At&T Intellectual Property I. L.P. Methods, Systems, Devices and Computer Program Products for Protecting a Network by Providing Severable Network Zones
US7818393B1 (en) * 2005-06-02 2010-10-19 United States Automobile Association System and method for outage avoidance
US20100268383A1 (en) * 2009-04-17 2010-10-21 Yulun Wang Tele-presence robot system with software modularity, projector and laser pointer
US7840653B1 (en) * 2007-10-25 2010-11-23 United Services Automobile Association (Usaa) Enhanced throttle management system
US20110142211A1 (en) * 2009-12-16 2011-06-16 Oracle International Corporation Message forwarding
US8001142B2 (en) 2003-04-02 2011-08-16 Oracle America, Inc. Distributed data system with incremental data updates
US8077963B2 (en) 2004-07-13 2011-12-13 Yulun Wang Mobile robot with a head-based movement mapping scheme
US8135481B2 (en) 2004-05-04 2012-03-13 Fisher-Rosemount Systems, Inc. Process plant monitoring based on multivariate statistical analysis and on-line process simulation
US8179418B2 (en) 2008-04-14 2012-05-15 Intouch Technologies, Inc. Robotic based health care system
US8185916B2 (en) 2007-06-28 2012-05-22 Oracle International Corporation System and method for integrating a business process management system with an enterprise service bus
US8340819B2 (en) 2008-09-18 2012-12-25 Intouch Technologies, Inc. Mobile videoconferencing robot system with network adaptive driving
US8384755B2 (en) 2009-08-26 2013-02-26 Intouch Technologies, Inc. Portable remote presence robot
US20130111026A1 (en) * 2011-10-31 2013-05-02 International Business Machines Corporation Serialization of access to data in multimainframe computing environments
US8463435B2 (en) 2008-11-25 2013-06-11 Intouch Technologies, Inc. Server connectivity control for tele-presence robot
US8670017B2 (en) 2010-03-04 2014-03-11 Intouch Technologies, Inc. Remote presence system including a cart that supports a robot face and an overhead camera
US8675852B2 (en) 2007-03-23 2014-03-18 Oracle International Corporation Using location as a presence attribute
US8718837B2 (en) 2011-01-28 2014-05-06 Intouch Technologies Interfacing with a mobile telepresence robot
US8825183B2 (en) 2010-03-22 2014-09-02 Fisher-Rosemount Systems, Inc. Methods for a data driven interface based on relationships between process control tags
US8836751B2 (en) 2011-11-08 2014-09-16 Intouch Technologies, Inc. Tele-presence system with a user interface that displays different communication links
US8849679B2 (en) 2006-06-15 2014-09-30 Intouch Technologies, Inc. Remote controlled robot system that provides medical images
US8849680B2 (en) 2009-01-29 2014-09-30 Intouch Technologies, Inc. Documentation through a remote presence robot
US8879547B2 (en) 2009-06-02 2014-11-04 Oracle International Corporation Telephony application services
US8881039B2 (en) 2009-03-13 2014-11-04 Fisher-Rosemount Systems, Inc. Scaling composite shapes for a graphical human-machine interface
US8892260B2 (en) 2007-03-20 2014-11-18 Irobot Corporation Mobile robot for telecommunication
US8902278B2 (en) 2012-04-11 2014-12-02 Intouch Technologies, Inc. Systems and methods for visualizing and managing telepresence devices in healthcare networks
US8914493B2 (en) 2008-03-10 2014-12-16 Oracle International Corporation Presence-based event driven architecture
US8930019B2 (en) 2010-12-30 2015-01-06 Irobot Corporation Mobile human interface robot
US8935005B2 (en) 2010-05-20 2015-01-13 Irobot Corporation Operating a mobile robot
US8949431B2 (en) 2011-08-24 2015-02-03 Radware, Ltd. Method for live migration of virtual machines
US8966498B2 (en) 2008-01-24 2015-02-24 Oracle International Corporation Integrating operational and business support systems with a service delivery platform
US8996165B2 (en) 2008-10-21 2015-03-31 Intouch Technologies, Inc. Telepresence robot with a camera boom
US9014848B2 (en) 2010-05-20 2015-04-21 Irobot Corporation Mobile robot system
US9038082B2 (en) 2004-05-28 2015-05-19 Oracle International Corporation Resource abstraction via enabler and metadata
US9098611B2 (en) 2012-11-26 2015-08-04 Intouch Technologies, Inc. Enhanced video interaction for a user interface of a telepresence network
US9138891B2 (en) 2008-11-25 2015-09-22 Intouch Technologies, Inc. Server connectivity control for tele-presence robot
US9160783B2 (en) 2007-05-09 2015-10-13 Intouch Technologies, Inc. Robot system that operates through a network firewall
US9174342B2 (en) 2012-05-22 2015-11-03 Intouch Technologies, Inc. Social behavior rules for a medical telepresence robot
US9193065B2 (en) 2008-07-10 2015-11-24 Intouch Technologies, Inc. Docking system for a tele-presence robot
US9198728B2 (en) 2005-09-30 2015-12-01 Intouch Technologies, Inc. Multi-camera mobile teleconferencing platform
US9245236B2 (en) 2006-02-16 2016-01-26 Oracle International Corporation Factorization of concerns to build a SDP (service delivery platform)
US9251313B2 (en) 2012-04-11 2016-02-02 Intouch Technologies, Inc. Systems and methods for visualizing and managing telepresence devices in healthcare networks
US9264664B2 (en) 2010-12-03 2016-02-16 Intouch Technologies, Inc. Systems and methods for dynamic bandwidth allocation
US9269060B2 (en) 2009-11-20 2016-02-23 Oracle International Corporation Methods and systems for generating metadata describing dependencies for composable elements
US9323250B2 (en) 2011-01-28 2016-04-26 Intouch Technologies, Inc. Time-dependent navigation of telepresence robots
US9361021B2 (en) 2012-05-22 2016-06-07 Irobot Corporation Graphical user interfaces including touchpad driving interfaces for telemedicine devices
US9375843B2 (en) 2003-12-09 2016-06-28 Intouch Technologies, Inc. Protocol for a remotely controlled videoconferencing robot
US9450981B2 (en) 2013-03-14 2016-09-20 Radware, Ltd. System and method thereof for mitigating denial of service attacks in virtual networks
US9498886B2 (en) 2010-05-20 2016-11-22 Irobot Corporation Mobile human interface robot
US9509790B2 (en) 2009-12-16 2016-11-29 Oracle International Corporation Global presence
US9565297B2 (en) 2004-05-28 2017-02-07 Oracle International Corporation True convergence with end to end identity management
US20170149643A1 (en) * 2015-11-23 2017-05-25 Bank Of America Corporation Network stabilizing tool
US9722908B2 (en) 2013-10-17 2017-08-01 International Business Machines Corporation Problem determination in a hybrid environment
US9842192B2 (en) 2008-07-11 2017-12-12 Intouch Technologies, Inc. Tele-presence robot system with multi-cast features
US9974612B2 (en) 2011-05-19 2018-05-22 Intouch Technologies, Inc. Enhanced diagnostics for a telepresence robot
US10343283B2 (en) 2010-05-24 2019-07-09 Intouch Technologies, Inc. Telepresence robot system that can be accessed by a cellular phone
US10372517B2 (en) * 2017-07-21 2019-08-06 TmaxData Co., Ltd. Message scheduling method
US10769739B2 (en) 2011-04-25 2020-09-08 Intouch Technologies, Inc. Systems and methods for management of information among medical providers and facilities
US10808882B2 (en) 2010-05-26 2020-10-20 Intouch Technologies, Inc. Tele-robotic system with a robot face placed on a chair
US10819530B2 (en) 2008-08-21 2020-10-27 Oracle International Corporation Charging enabler
US10875182B2 (en) 2008-03-20 2020-12-29 Teladoc Health, Inc. Remote presence system mounted to operating room hardware
US11154981B2 (en) 2010-02-04 2021-10-26 Teladoc Health, Inc. Robot user interface for telepresence robot system
US11389064B2 (en) 2018-04-27 2022-07-19 Teladoc Health, Inc. Telehealth cart that supports a removable tablet with seamless audio/video switching
US11399153B2 (en) 2009-08-26 2022-07-26 Teladoc Health, Inc. Portable telepresence apparatus
US11636944B2 (en) 2017-08-25 2023-04-25 Teladoc Health, Inc. Connectivity infrastructure for a telehealth platform
US11742094B2 (en) 2017-07-25 2023-08-29 Teladoc Health, Inc. Modular telehealth cart with thermal imaging and touch screen user interface
US11862302B2 (en) 2017-04-24 2024-01-02 Teladoc Health, Inc. Automated transcription and documentation of tele-health encounters

Families Citing this family (135)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6425005B1 (en) * 1997-10-06 2002-07-23 Mci Worldcom, Inc. Method and apparatus for managing local resources at service nodes in an intelligent network
US6804711B1 (en) * 1997-10-06 2004-10-12 Mci, Inc. Method and apparatus for managing call processing services in an intelligent telecommunication network
US7024450B1 (en) * 1997-10-06 2006-04-04 Mci, Inc. Method and apparatus for deploying service modules among service nodes distributed in an intelligent network
US6594355B1 (en) 1997-10-06 2003-07-15 Worldcom, Inc. Method and apparatus for providing real time execution of specific communications services in an intelligent network
US6779030B1 (en) * 1997-10-06 2004-08-17 Worldcom, Inc. Intelligent network
US6289384B1 (en) * 1998-06-05 2001-09-11 I2 Technologies, Inc. System and method for event notification through a firewall
US6788649B1 (en) 1998-08-03 2004-09-07 Mci, Inc. Method and apparatus for supporting ATM services in an intelligent network
JP3558887B2 (en) * 1998-08-28 2004-08-25 株式会社東芝 Distributed system, control method thereof, and storage medium
US7127701B2 (en) * 1998-09-18 2006-10-24 Wylci Fables Computer processing and programming method using autonomous data handlers
EP1003117A3 (en) * 1998-11-17 2003-07-23 Citibank, N.A. Method and system for strategic services enterprise workload management
US6434596B1 (en) * 1999-01-29 2002-08-13 Sony Corporation Method and system for distributed queues in a multimedia network with proxies
GB2346990B (en) * 1999-02-20 2003-07-09 Ibm Client/server transaction data processing system with automatic distributed coordinator set up into a linear chain for use of linear commit optimization
US6839757B1 (en) * 1999-04-28 2005-01-04 2Wire, Inc. System and method for automatically discovering accessible services on a computer network and providing automatic access thereto
US6529947B1 (en) * 1999-05-26 2003-03-04 Adobe Systems Incorporated Managing transiently connected network clients
US6418447B1 (en) * 1999-06-14 2002-07-09 International Business Machines Corporation Registration of object factories under multiple interface names
US6842906B1 (en) * 1999-08-31 2005-01-11 Accenture Llp System and method for a refreshable proxy pool in a communication services patterns environment
US6414036B1 (en) * 1999-09-01 2002-07-02 Van Beek Global/Ninkov Llc Composition for treatment of infections of humans and animals
US6895584B1 (en) 1999-09-24 2005-05-17 Sun Microsystems, Inc. Mechanism for evaluating requests prior to disposition in a multi-threaded environment
US6701367B1 (en) * 1999-09-24 2004-03-02 Sun Microsystems, Inc. Mechanism for enabling customized session managers to interact with a network server
US6766349B1 (en) 1999-09-24 2004-07-20 Sun Microsystems, Inc. Mechanism for obtaining a thread from, and returning a thread to, a thread pool without attaching and detaching
EP1224568A4 (en) * 1999-09-24 2006-11-08 Sun Microsystems Inc Mechanism for enabling session information to be shared across multiple processes
US6542900B1 (en) * 1999-10-04 2003-04-01 Sun Microsystems, Inc. Method and apparatus for distributed object mapping in a java language environment
US6704779B1 (en) * 1999-11-24 2004-03-09 Unisys Corporation Method and apparatus for a web application server to provide an administration system using a dual set of tiered groups of objects
CA2323246A1 (en) * 1999-12-14 2001-06-14 Nortel Networks Corporation Transaction-based administration of media gateways in a customer care center
US6938256B2 (en) * 2000-01-18 2005-08-30 Galactic Computing Corporation System for balance distribution of requests across multiple servers using dynamic metrics
US7437456B1 (en) * 2000-03-17 2008-10-14 Fujitsu Limited Object reference generating device, object reference generating method and computer readable recording medium for recording an object reference generating program
US7496924B2 (en) * 2000-03-27 2009-02-24 Siemens Communications, Inc. Dispatching messages among registered software modules in telecommunications system including telephony internet server coupled between packet network and PBX
JP2001306537A (en) * 2000-04-18 2001-11-02 Hitachi Ltd Distributed object system
US6839748B1 (en) 2000-04-21 2005-01-04 Sun Microsystems, Inc. Synchronous task scheduler for corba gateway
US6950935B1 (en) 2000-04-21 2005-09-27 Sun Microsystems, Inc. Pluggable authentication modules for telecommunications management network
US6813770B1 (en) 2000-04-21 2004-11-02 Sun Microsystems, Inc. Abstract syntax notation to interface definition language converter framework for network management
US7779390B1 (en) * 2000-04-21 2010-08-17 Oracle America, Inc. Thread-safe remote debugger
US7783720B1 (en) 2000-04-21 2010-08-24 Oracle America, Inc. CORBA metadata gateway to telecommunications management network
US6915324B1 (en) 2000-04-21 2005-07-05 Sun Microsystems, Inc. Generic and dynamic mapping of abstract syntax notation (ASN1) to and from interface definition language for network management
US7206843B1 (en) 2000-04-21 2007-04-17 Sun Microsystems, Inc. Thread-safe portable management interface
US7478403B1 (en) 2000-04-21 2009-01-13 Sun Microsystems, Inc. Secure access to managed network objects using a configurable platform-independent gateway providing individual object-level access control
US7228346B1 (en) 2000-04-21 2007-06-05 Sun Microsystems, Inc. IDL event and request formatting for corba gateway
US7010586B1 (en) 2000-04-21 2006-03-07 Sun Microsystems, Inc. System and method for event subscriptions for CORBA gateway
US6922685B2 (en) * 2000-05-22 2005-07-26 Mci, Inc. Method and system for managing partitioned data resources
US7133891B1 (en) * 2000-05-31 2006-11-07 International Business Machines Corporation Method, system and program products for automatically connecting a client to a server of a replicated group of servers
US6816905B1 (en) * 2000-11-10 2004-11-09 Galactic Computing Corporation Bvi/Bc Method and system for providing dynamic hosted service management across disparate accounts/sites
US8538843B2 (en) 2000-07-17 2013-09-17 Galactic Computing Corporation Bvi/Bc Method and system for operating an E-commerce service provider
US7143182B1 (en) 2000-08-08 2006-11-28 Cisco Technology, Inc. Smart secretary for routing call objects in a telephony network
US6826600B1 (en) * 2000-11-02 2004-11-30 Cisco Technology, Inc. Methods and apparatus for managing objects in a client-server computing system environment
US7839890B1 (en) * 2000-11-02 2010-11-23 Fisher-Rosemount Systems, Inc. Multiplexed data transmissions through a communication link
JP4092388B2 (en) * 2000-11-10 2008-05-28 富士通株式会社 Service providing method using network and service providing system using the same
US20020086706A1 (en) * 2000-11-15 2002-07-04 Ming-Feng Chen Mobile device server
US20020177453A1 (en) * 2000-11-15 2002-11-28 Ming-Feng Chen Mobile device server
JP2002169806A (en) * 2000-12-01 2002-06-14 Nec Corp Service retrieval system
US8566849B2 (en) * 2000-12-14 2013-10-22 Borland Software Corporation Name service object clustering
US7010609B1 (en) * 2000-12-21 2006-03-07 Borland Software Corporation System and method for adding transport protocols in distributed middleware applications
US6978447B1 (en) * 2001-02-28 2005-12-20 Cisco Technology, Inc. Method and system for efficiently interpreting a computer program
US7096466B2 (en) * 2001-03-26 2006-08-22 Sun Microsystems, Inc. Loading attribute for partial loading of class files into virtual machines
DE10117680A1 (en) * 2001-04-09 2002-10-17 Siemens Ag Procedure for data transmission over an IP-oriented network
FI20015009A (en) * 2001-06-08 2002-12-09 Sonera Oyj Decentralized object component network
FI20015008A (en) * 2001-06-08 2002-12-09 Sonera Oyj Distributed Object Component Network
FI20015010A (en) * 2001-06-08 2002-12-09 Sonera Oyj Distributed Object Component Network
US7117489B2 (en) * 2001-06-20 2006-10-03 Sun Microsystems, Inc. Optional attribute generator for customized Java programming environments
US6964033B2 (en) * 2001-06-20 2005-11-08 Sun Microsystems, Inc. Object band customization of Java runtime environments
US7509671B1 (en) * 2001-06-20 2009-03-24 Microstrategy Incorporated Systems and methods for assigning priority to jobs in a reporting system
US6754884B1 (en) 2001-07-02 2004-06-22 Bea Systems, Inc. Programming language extensions for processing XML objects and related applications
US7437710B2 (en) * 2001-07-02 2008-10-14 Bea Systems, Inc. Annotation based development platform for stateful web services
US7356803B2 (en) * 2001-07-02 2008-04-08 Bea Systems, Inc. Annotation based development platform for asynchronous web services
US6918107B2 (en) * 2001-07-02 2005-07-12 Bea Systems, Inc. Programming language extensions for processing data representation language objects and related applications
US6859810B2 (en) * 2001-12-10 2005-02-22 Bea Systems, Inc. Declarative specification and engine for non-isomorphic data mapping
CA2372092C (en) * 2002-02-15 2010-04-06 Cognos Incorporated A queuing model for a plurality of servers
US20030167295A1 (en) * 2002-03-01 2003-09-04 Verity, Inc. Automatic network load balancing using self-replicating resources
US7464384B2 (en) * 2002-03-14 2008-12-09 International Business Machines Corporation Method for inter-object communication
US7228175B2 (en) 2002-05-15 2007-06-05 Cardiac Pacemakers, Inc. Cardiac rhythm management systems and methods using acoustic contractility indicator
WO2004040444A1 (en) * 2002-11-01 2004-05-13 Matsushita Electric Industrial Co., Ltd. Service software acquiring method, system and electronic communication device used therefor
US7860957B1 (en) * 2002-12-20 2010-12-28 Cisco Technology, Inc. System and method for managing network services in a distributed system
US7594015B2 (en) * 2003-07-28 2009-09-22 Sap Ag Grid organization
US7673054B2 (en) 2003-07-28 2010-03-02 Sap Ag. Grid manageable application process management scheme
US7546553B2 (en) * 2003-07-28 2009-06-09 Sap Ag Grid landscape component
US7568199B2 (en) * 2003-07-28 2009-07-28 Sap Ag. System for matching resource request that freeing the reserved first resource and forwarding the request to second resource if predetermined time period expired
US7703029B2 (en) 2003-07-28 2010-04-20 Sap Ag Grid browser component
US7574707B2 (en) * 2003-07-28 2009-08-11 Sap Ag Install-run-remove mechanism
US7631069B2 (en) * 2003-07-28 2009-12-08 Sap Ag Maintainable grid managers
US7810090B2 (en) * 2003-12-17 2010-10-05 Sap Ag Grid compute node software application deployment
US7703101B2 (en) * 2004-02-13 2010-04-20 International Business Machines Corporation Autonomic workload classification using predictive assertion for wait queue and thread pool selection
US20070266388A1 (en) * 2004-06-18 2007-11-15 Cluster Resources, Inc. System and method for providing advanced reservations in a compute environment
US7757236B1 (en) * 2004-06-28 2010-07-13 Oracle America, Inc. Load-balancing framework for a cluster
US7793290B2 (en) * 2004-12-20 2010-09-07 Sap Ag Grip application acceleration by executing grid application based on application usage history prior to user request for application execution
US7565383B2 (en) * 2004-12-20 2009-07-21 Sap Ag. Application recovery
US7853959B2 (en) * 2005-02-08 2010-12-14 Sap Ag Business process extension for productivity suite application
US7890962B2 (en) * 2005-04-22 2011-02-15 Sag Ag Business process extensions to enable alerts and reports within the context of groupware
US20060277079A1 (en) * 2005-04-22 2006-12-07 Gilligan Geffrey D Groupware travel itinerary creation
US9111253B2 (en) * 2005-04-22 2015-08-18 Sap Se Groupware time tracking
US7890964B2 (en) * 2005-04-22 2011-02-15 Sap Ag Methods and apparatus for contextual awareness in a groupware client
US7716335B2 (en) * 2005-06-27 2010-05-11 Oracle America, Inc. System and method for automated workload characterization of an application server
US20070022133A1 (en) * 2005-07-21 2007-01-25 International Business Machines Corporation Method and apparatus for automatically and configurably adjusting allocated database resources to avoid denial of service
US9038023B2 (en) * 2005-12-30 2015-05-19 Sap Se Template-based configuration architecture
US7793087B2 (en) * 2005-12-30 2010-09-07 Sap Ag Configuration templates for different use cases for a system
US7694117B2 (en) * 2005-12-30 2010-04-06 Sap Ag Virtualized and adaptive configuration of a system
US20070156641A1 (en) * 2005-12-30 2007-07-05 Thomas Mueller System and method to provide system independent configuration references
US8838750B2 (en) * 2005-12-30 2014-09-16 Sap Ag System and method for system information centralization
US8849894B2 (en) * 2005-12-30 2014-09-30 Sap Ag Method and system using parameterized configurations
US20070257715A1 (en) * 2005-12-30 2007-11-08 Semerdzhiev Krasimir P System and method for abstract configuration
US7689600B2 (en) 2005-12-30 2010-03-30 Sap Ag System and method for cluster file system synchronization
US7870538B2 (en) * 2005-12-30 2011-01-11 Sap Ag Configuration inheritance in system configuration
US7779389B2 (en) * 2005-12-30 2010-08-17 Sap Ag System and method for dynamic VM settings
US7954087B2 (en) * 2005-12-30 2011-05-31 Sap Ag Template integration
US7797522B2 (en) * 2005-12-30 2010-09-14 Sap Ag Meta attributes of system configuration elements
US8201189B2 (en) * 2005-12-30 2012-06-12 Sap Ag System and method for filtering components
US8271769B2 (en) * 2005-12-30 2012-09-18 Sap Ag Dynamic adaptation of a configuration to a system environment
US20070156715A1 (en) * 2005-12-30 2007-07-05 Thomas Mueller Tagged property files for system configurations
US8843918B2 (en) * 2005-12-30 2014-09-23 Sap Ag System and method for deployable templates
US20080114627A1 (en) * 2006-11-15 2008-05-15 Sap Ag System and Method for Capturing Process Instance Information in Complex or Distributed Systems
US8073558B2 (en) * 2007-10-05 2011-12-06 Honeywell International Inc Critical resource notification system and interface device
US8135985B2 (en) * 2009-06-17 2012-03-13 International Business Machines Corporation High availability support for virtual machines
US8671167B2 (en) * 2009-07-17 2014-03-11 Honeywell International Inc. System for providing demand response services
US8667132B2 (en) 2009-07-17 2014-03-04 Honeywell International Inc. Arrangement for communication about and management of a resource using a mobile device
US8572230B2 (en) 2009-07-17 2013-10-29 Honeywell International Inc. System for using attributes to deploy demand response resources
US8676953B2 (en) 2009-07-17 2014-03-18 Honeywell International Inc. Use of aggregated groups for managing demand response resources
US9124535B2 (en) 2009-07-17 2015-09-01 Honeywell International Inc. System for using attributes to deploy demand response resources
US8671191B2 (en) 2009-07-17 2014-03-11 Honeywell International Inc. Installation system for demand response resources
US8782190B2 (en) 2009-07-17 2014-07-15 Honeywell International, Inc. Demand response management system
US9137050B2 (en) 2009-07-17 2015-09-15 Honeywell International Inc. Demand response system incorporating a graphical processing unit
US9818073B2 (en) 2009-07-17 2017-11-14 Honeywell International Inc. Demand response management system
US8364794B2 (en) * 2010-03-11 2013-01-29 International Business Machines Corporation Admission control framework method and system
US8630744B2 (en) 2011-01-28 2014-01-14 Honeywell International Inc. Management and monitoring of automated demand response in a multi-site enterprise
US9153001B2 (en) 2011-01-28 2015-10-06 Honeywell International Inc. Approach for managing distribution of automated demand response events in a multi-site enterprise
US8626354B2 (en) 2011-01-28 2014-01-07 Honeywell International Inc. Approach for normalizing automated demand response events in energy management control systems
US20140081704A1 (en) 2012-09-15 2014-03-20 Honeywell International Inc. Decision support system based on energy markets
US9389850B2 (en) 2012-11-29 2016-07-12 Honeywell International Inc. System and approach to manage versioning of field devices in a multi-site enterprise
US9989937B2 (en) 2013-07-11 2018-06-05 Honeywell International Inc. Predicting responses of resources to demand response signals and having comfortable demand responses
US10346931B2 (en) 2013-07-11 2019-07-09 Honeywell International Inc. Arrangement for communicating demand response resource incentives
US9691076B2 (en) 2013-07-11 2017-06-27 Honeywell International Inc. Demand response system having a participation predictor
US9665078B2 (en) 2014-03-25 2017-05-30 Honeywell International Inc. System for propagating messages for purposes of demand response
US9524186B2 (en) * 2014-04-28 2016-12-20 Oracle International Corporation System and method for supporting common transaction identifier (XID) optimization based on resource manager (RM) instance awareness in a transactional environment
US9569224B2 (en) 2014-05-06 2017-02-14 Oracle International Corporation System and method for adaptively integrating a database state notification service with a distributed transactional middleware machine
US9684547B2 (en) * 2014-05-29 2017-06-20 Apple Inc. Method and apparatus for handling security of an application and its extension
US9881070B2 (en) * 2014-12-12 2018-01-30 Microsoft Technology Licensing, Llc Controlling service functions in response to service instigation and service reactivation messages
US10541556B2 (en) 2017-04-27 2020-01-21 Honeywell International Inc. System and approach to integrate and manage diverse demand response specifications for multi-site enterprises
US11734058B2 (en) * 2020-10-27 2023-08-22 Salesforce, Inc. Systems and methods of a virtualized management operation engine of a distributed system

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE69429686T2 (en) 1993-02-25 2003-04-30 Sun Microsystems Inc Transaction management in an object-oriented system
GB2305271A (en) * 1995-09-15 1997-04-02 Ibm Proxy object recovery in an object-oriented environment
GB2308468A (en) * 1995-12-20 1997-06-25 Ibm Data processing systems and methods providing interoperability between data processing resources
US5864866A (en) * 1997-03-26 1999-01-26 International Business Machines Corporation Apparatus and method for providing externalization in an object-oriented environment

Cited By (242)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6851118B1 (en) * 1997-10-06 2005-02-01 Sun Microsystems, Inc. Remote object access
US6356930B2 (en) * 1998-10-16 2002-03-12 Silverstream Software, Inc. Connection concentrator for distributed object systems
US20110016203A1 (en) * 2000-07-27 2011-01-20 Bea Systems, Inc. System and method for achieving scalability in domain computing
US8166095B2 (en) 2000-07-27 2012-04-24 Oracle International Corporation System and method for achieving scalability in domain computing
US20060069723A1 (en) * 2000-07-27 2006-03-30 Bea Systems, Inc. System and method for concentration and load-balancing of requests
US7774403B2 (en) * 2000-07-27 2010-08-10 Bea Systems, Inc. System and method for concentration and load-balancing of requests
US7809798B2 (en) * 2000-10-30 2010-10-05 Microsoft Corporation Shared object stores for a networked computer system
US20060026264A1 (en) * 2000-10-30 2006-02-02 Microsoft Corporation Shared object stores for a networked computer system
US8112492B2 (en) 2000-10-30 2012-02-07 Microsoft Corporation Shared object stores for a networked computer system
US20110004658A1 (en) * 2000-10-30 2011-01-06 Microsoft Corporation Shared Object Stores For A Networked Computer System
US7430738B1 (en) 2001-06-11 2008-09-30 Microsoft Corporation Methods and arrangements for routing server requests to worker processes based on URL
US7594230B2 (en) 2001-06-11 2009-09-22 Microsoft Corporation Web server architecture
US20030088659A1 (en) * 2001-11-08 2003-05-08 Susarla Hanumantha Rao System and method for distributed state management
US20050267878A1 (en) * 2001-11-14 2005-12-01 Hitachi, Ltd. Storage system having means for acquiring execution information of database management system
US7734616B2 (en) * 2001-11-14 2010-06-08 Hitachi, Ltd. Storage system having means for acquiring execution information of database management system
US20030105836A1 (en) * 2001-11-30 2003-06-05 Nec Corporation Device and method for specifying location of object in distributed object system
US7130905B2 (en) 2002-01-10 2006-10-31 Sun Microsystems, Inc. System and method for coordinating access to data for a distributed application
US20030131041A1 (en) * 2002-01-10 2003-07-10 Darpan Dinker System and method for coordinating access to data for a distributed application
US20030154202A1 (en) * 2002-02-12 2003-08-14 Darpan Dinker Distributed data system with process co-location and out -of -process communication
US20050160408A1 (en) * 2002-02-14 2005-07-21 Microsoft Corporation API schema language and transformation techniques
US20050125811A1 (en) * 2002-02-14 2005-06-09 Microsoft Corporation API schema language and transformation techniques
US20030167332A1 (en) * 2002-03-01 2003-09-04 Sun Microsystems, Inc. Object mutation determination for incremental state saves
US7320035B2 (en) 2002-03-01 2008-01-15 Sun Microsystems, Inc. Object mutation determination for incremental state saves
US7370329B2 (en) 2002-03-01 2008-05-06 Sun Microsystems, Inc. System and method for state saves in a distributed data system
US7490137B2 (en) 2002-03-22 2009-02-10 Microsoft Corporation Vector-based sending of web content
US20070106702A1 (en) * 2002-03-22 2007-05-10 Microsoft Corporation Selective Caching of Servable Files Based at Least in Part on a Type of Memory
US20030204622A1 (en) * 2002-04-26 2003-10-30 International Business Machines Corporation Dynamic invocation of web services
US7475145B2 (en) 2002-04-26 2009-01-06 International Business Machines Corporation Dynamic invocation of web services
US7139925B2 (en) 2002-04-29 2006-11-21 Sun Microsystems, Inc. System and method for dynamic cluster adjustment to node failures in a distributed data system
US20030204786A1 (en) * 2002-04-29 2003-10-30 Darpan Dinker System and method for dynamic cluster adjustment to node failures in a distributed data system
US20030220993A1 (en) * 2002-05-21 2003-11-27 Blizniak Paul K. Method and apparatus for dynamically determining information for deploying a web service
US7290262B2 (en) 2002-05-21 2007-10-30 International Business Machine Corporation Method and apparatus for dynamically determining information for deploying a web service
US10315312B2 (en) * 2002-07-25 2019-06-11 Intouch Technologies, Inc. Medical tele-robotic system with a master remote station with an arbitrator
US9849593B2 (en) * 2002-07-25 2017-12-26 Intouch Technologies, Inc. Medical tele-robotic system with a master remote station with an arbitrator
US8209051B2 (en) 2002-07-25 2012-06-26 Intouch Technologies, Inc. Medical tele-robotic system
US10889000B2 (en) * 2002-07-25 2021-01-12 Teladoc Health Medical tele-robotic system with a master remote station with an arbitrator
US20210241902A1 (en) * 2002-07-25 2021-08-05 Teladoc Health, Inc. Medical tele-robotic system with a master remote station with an arbitrator
US20040162637A1 (en) * 2002-07-25 2004-08-19 Yulun Wang Medical tele-robotic system with a master remote station with an arbitrator
USRE45870E1 (en) 2002-07-25 2016-01-26 Intouch Technologies, Inc. Apparatus and method for patient rounding with a remote controlled robot
US20140156069A1 (en) * 2002-07-25 2014-06-05 Intouch Technologies, Inc. Medical tele-robotic system with a master remote station with an arbitrator
US20190248018A1 (en) * 2002-07-25 2019-08-15 Intouch Technologies, Inc. Medical tele-robotic system with a master remote station with an arbitrator
US20080201017A1 (en) * 2002-07-25 2008-08-21 Yulun Wang Medical tele-robotic system
US8005979B2 (en) 2002-10-28 2011-08-23 Oracle America, Inc. System and method for uniquely identifying processes and entities in clusters
US20040098490A1 (en) * 2002-10-28 2004-05-20 Darpan Dinker System and method for uniquely identifying processes and entities in clusters
US20040139197A1 (en) * 2003-01-14 2004-07-15 Sbc Properties, L.P. Structured query language (SQL) query via common object request broker architecture (CORBA) interface
US7599912B2 (en) 2003-01-14 2009-10-06 At&T Intellectual Property I, L.P. Structured query language (SQL) query via common object request broker architecture (CORBA) interface
US20040187141A1 (en) * 2003-01-15 2004-09-23 Alcatel Push-based object request broker
US7577965B2 (en) 2003-01-15 2009-08-18 Alcatel Push-based object request broker
US20040199815A1 (en) * 2003-04-02 2004-10-07 Sun Microsystems, Inc. System and method for measuring performance with distributed agents
US8001142B2 (en) 2003-04-02 2011-08-16 Oracle America, Inc. Distributed data system with incremental data updates
US7178065B2 (en) 2003-04-02 2007-02-13 Sun Microsystems, Inc. System and method for measuring performance with distributed agents
US7281050B2 (en) 2003-04-08 2007-10-09 Sun Microsystems, Inc. Distributed token manager with transactional properties
US8443371B2 (en) * 2003-11-20 2013-05-14 International Business Machines Corporation Managing operation requests using different resources
US20050114857A1 (en) * 2003-11-20 2005-05-26 International Business Machines Corporation Method, system, and program for managing operation requests using different resources
US7512948B2 (en) * 2003-11-20 2009-03-31 International Business Machines Corporation Method, system, and program for managing operation requests using different resources
US9619285B2 (en) * 2003-11-20 2017-04-11 International Business Machines Corporation Managing operation requests using different resources
US20130239117A1 (en) * 2003-11-20 2013-09-12 International Business Machines Corporation Managing operation requests using different resources
US20090150897A1 (en) * 2003-11-20 2009-06-11 International Business Machines Corporation Managing operation requests using different resources
US10882190B2 (en) 2003-12-09 2021-01-05 Teladoc Health, Inc. Protocol for a remotely controlled videoconferencing robot
US9375843B2 (en) 2003-12-09 2016-06-28 Intouch Technologies, Inc. Protocol for a remotely controlled videoconferencing robot
US9956690B2 (en) 2003-12-09 2018-05-01 Intouch Technologies, Inc. Protocol for a remotely controlled videoconferencing robot
US20100115418A1 (en) * 2004-02-26 2010-05-06 Yulun Wang Graphical interface for a remote presence system
US9610685B2 (en) 2004-02-26 2017-04-04 Intouch Technologies, Inc. Graphical interface for a remote presence system
US7984096B2 (en) * 2004-05-04 2011-07-19 Fisher-Rosemount Systems, Inc. Service-oriented architecture for process control systems
US20070106761A1 (en) * 2004-05-04 2007-05-10 Beoughter Ken J Service-oriented architecture for process control systems
US8000814B2 (en) 2004-05-04 2011-08-16 Fisher-Rosemount Systems, Inc. User configurable alarms and alarm trending for process control system
US8060834B2 (en) 2004-05-04 2011-11-15 Fisher-Rosemount Systems, Inc. Graphics integration into a process configuration and control environment
US8127241B2 (en) 2004-05-04 2012-02-28 Fisher-Rosemount Systems, Inc. Process plant user interface system having customized process graphic display layers in an integrated environment
US8135481B2 (en) 2004-05-04 2012-03-13 Fisher-Rosemount Systems, Inc. Process plant monitoring based on multivariate statistical analysis and on-line process simulation
US8185219B2 (en) 2004-05-04 2012-05-22 Fisher-Rosemount Systems, Inc. Graphic element with multiple visualizations in a process environment
US20050261969A1 (en) * 2004-05-10 2005-11-24 International Business Machines Corporation Layered architecture for POS (point-of sale) systems
US7624193B2 (en) * 2004-05-14 2009-11-24 International Business Machines Corporation Multi-vendor mediation for subscription services
US20050256970A1 (en) * 2004-05-14 2005-11-17 International Business Machines Corporation System and method for multi-vendor mediation for subscription services
US20060005063A1 (en) * 2004-05-21 2006-01-05 Bea Systems, Inc. Error handling for a service oriented architecture
US20060069791A1 (en) * 2004-05-21 2006-03-30 Bea Systems, Inc. Service oriented architecture with interchangeable transport protocols
US20060031431A1 (en) * 2004-05-21 2006-02-09 Bea Systems, Inc. Reliable updating for a service oriented architecture
US20050267892A1 (en) * 2004-05-21 2005-12-01 Patrick Paul B Service proxy definition
US20050264581A1 (en) * 2004-05-21 2005-12-01 Bea Systems, Inc. Dynamic program modification
US20050267947A1 (en) * 2004-05-21 2005-12-01 Bea Systems, Inc. Service oriented architecture with message processing pipelines
US20060031930A1 (en) * 2004-05-21 2006-02-09 Bea Systems, Inc. Dynamically configurable service oriented architecture
US20050273516A1 (en) * 2004-05-21 2005-12-08 Bea Systems, Inc. Dynamic routing in a service oriented architecture
US7653008B2 (en) 2004-05-21 2010-01-26 Bea Systems, Inc. Dynamically configurable service oriented architecture
US20080034367A1 (en) * 2004-05-21 2008-02-07 Bea Systems, Inc. Message processing in a service oriented architecture
US20060212593A1 (en) * 2004-05-21 2006-09-21 Bea Systems, Inc. Dynamic service composition and orchestration
US20050273520A1 (en) * 2004-05-21 2005-12-08 Bea Systems, Inc. Service oriented architecture with file transport protocol
US20050270970A1 (en) * 2004-05-21 2005-12-08 Bea Systems, Inc. Failsafe service oriented architecture
US20060080419A1 (en) * 2004-05-21 2006-04-13 Bea Systems, Inc. Reliable updating for a service oriented architecture
US20050273497A1 (en) * 2004-05-21 2005-12-08 Bea Systems, Inc. Service oriented architecture with electronic mail transport protocol
US20060007918A1 (en) * 2004-05-21 2006-01-12 Bea Systems, Inc. Scaleable service oriented architecture
US20050273521A1 (en) * 2004-05-21 2005-12-08 Bea Systems, Inc. Dynamically configurable service oriented architecture
US20050273517A1 (en) * 2004-05-21 2005-12-08 Bea Systems, Inc. Service oriented architecture with credential management
US20050273502A1 (en) * 2004-05-21 2005-12-08 Patrick Paul B Service oriented architecture with message processing stages
US20050278335A1 (en) * 2004-05-21 2005-12-15 Bea Systems, Inc. Service oriented architecture with alerts
US20060034237A1 (en) * 2004-05-21 2006-02-16 Bea Systems, Inc. Dynamically configurable service oriented architecture
US20060031354A1 (en) * 2004-05-21 2006-02-09 Bea Systems, Inc. Service oriented architecture
US20060031355A1 (en) * 2004-05-21 2006-02-09 Bea Systems, Inc. Programmable service oriented architecture
US20060031481A1 (en) * 2004-05-21 2006-02-09 Bea Systems, Inc. Service oriented architecture with monitoring
US20060031353A1 (en) * 2004-05-21 2006-02-09 Bea Systems, Inc. Dynamic publishing in a service oriented architecture
US20060031433A1 (en) * 2004-05-21 2006-02-09 Bea Systems, Inc. Batch updating for a service oriented architecture
US20060031432A1 (en) * 2004-05-21 2006-02-09 Bea Systens, Inc. Service oriented architecture with message processing pipelines
US20050278374A1 (en) * 2004-05-21 2005-12-15 Bea Systems, Inc. Dynamic program modification
US9565297B2 (en) 2004-05-28 2017-02-07 Oracle International Corporation True convergence with end to end identity management
US9038082B2 (en) 2004-05-28 2015-05-19 Oracle International Corporation Resource abstraction via enabler and metadata
US8983174B2 (en) 2004-07-13 2015-03-17 Intouch Technologies, Inc. Mobile robot with a head-based movement mapping scheme
US10241507B2 (en) 2004-07-13 2019-03-26 Intouch Technologies, Inc. Mobile robot with a head-based movement mapping scheme
US8077963B2 (en) 2004-07-13 2011-12-13 Yulun Wang Mobile robot with a head-based movement mapping scheme
US9766624B2 (en) 2004-07-13 2017-09-19 Intouch Technologies, Inc. Mobile robot with a head-based movement mapping scheme
US8401275B2 (en) 2004-07-13 2013-03-19 Intouch Technologies, Inc. Mobile robot with a head-based movement mapping scheme
US20060080443A1 (en) * 2004-08-31 2006-04-13 Microsoft Corporation URL namespace to support multiple-protocol processing within worker processes
US20080320503A1 (en) * 2004-08-31 2008-12-25 Microsoft Corporation URL Namespace to Support Multiple-Protocol Processing within Worker Processes
US7418719B2 (en) * 2004-08-31 2008-08-26 Microsoft Corporation Method and system to support a unified process model for handling messages sent in different protocols
US20060047532A1 (en) * 2004-08-31 2006-03-02 Microsoft Corporation Method and system to support a unified process model for handling messages sent in different protocols
US7418712B2 (en) * 2004-08-31 2008-08-26 Microsoft Corporation Method and system to support multiple-protocol processing within worker processes
US20060047818A1 (en) * 2004-08-31 2006-03-02 Microsoft Corporation Method and system to support multiple-protocol processing within worker processes
US7418709B2 (en) * 2004-08-31 2008-08-26 Microsoft Corporation URL namespace to support multiple-protocol processing within worker processes
US20060168122A1 (en) * 2005-01-13 2006-07-27 International Business Machines Corporation System and Method for Protocol Independent Access and Invocation of Web Services
US7509398B2 (en) 2005-01-13 2009-03-24 International Business Machines Corporation System and method for protocol independent access and invocation of web services
US7818393B1 (en) * 2005-06-02 2010-10-19 United States Automobile Association System and method for outage avoidance
US8224926B1 (en) * 2005-06-02 2012-07-17 United Services Automobile Association System and method for outage avoidance
US10259119B2 (en) 2005-09-30 2019-04-16 Intouch Technologies, Inc. Multi-camera mobile teleconferencing platform
US9198728B2 (en) 2005-09-30 2015-12-01 Intouch Technologies, Inc. Multi-camera mobile teleconferencing platform
US9245236B2 (en) 2006-02-16 2016-01-26 Oracle International Corporation Factorization of concerns to build a SDP (service delivery platform)
US8849679B2 (en) 2006-06-15 2014-09-30 Intouch Technologies, Inc. Remote controlled robot system that provides medical images
US20080196048A1 (en) * 2007-02-13 2008-08-14 Amadeus S.A.S. Interface Module
US7802258B2 (en) * 2007-02-13 2010-09-21 Amadeus S.A.S. Interface between computer software modules
US9296109B2 (en) 2007-03-20 2016-03-29 Irobot Corporation Mobile robot for telecommunication
US8892260B2 (en) 2007-03-20 2014-11-18 Irobot Corporation Mobile robot for telecommunication
US8744055B2 (en) 2007-03-23 2014-06-03 Oracle International Corporation Abstract application dispatcher
US8675852B2 (en) 2007-03-23 2014-03-18 Oracle International Corporation Using location as a presence attribute
US10682763B2 (en) 2007-05-09 2020-06-16 Intouch Technologies, Inc. Robot system that operates through a network firewall
US9160783B2 (en) 2007-05-09 2015-10-13 Intouch Technologies, Inc. Robot system that operates through a network firewall
US20080288304A1 (en) * 2007-05-18 2008-11-20 Bea Systems, Inc. System and Method for Enabling Decision Activities in a Process Management and Design Environment
US8996394B2 (en) 2007-05-18 2015-03-31 Oracle International Corporation System and method for enabling decision activities in a process management and design environment
US8185916B2 (en) 2007-06-28 2012-05-22 Oracle International Corporation System and method for integrating a business process management system with an enterprise service bus
US8667101B1 (en) * 2007-10-25 2014-03-04 United States Automobile Association (USAA) Enhanced throttle management system
US8266258B1 (en) 2007-10-25 2012-09-11 United Services Automobile Association (Usaa) Enhanced throttle management system
US7840653B1 (en) * 2007-10-25 2010-11-23 United Services Automobile Association (Usaa) Enhanced throttle management system
US20090187919A1 (en) * 2008-01-23 2009-07-23 Oracle International Corporation Service oriented architecture-based scim platform
US9654515B2 (en) * 2008-01-23 2017-05-16 Oracle International Corporation Service oriented architecture-based SCIM platform
US8966498B2 (en) 2008-01-24 2015-02-24 Oracle International Corporation Integrating operational and business support systems with a service delivery platform
US8914493B2 (en) 2008-03-10 2014-12-16 Oracle International Corporation Presence-based event driven architecture
US11787060B2 (en) 2008-03-20 2023-10-17 Teladoc Health, Inc. Remote presence system mounted to operating room hardware
US10875182B2 (en) 2008-03-20 2020-12-29 Teladoc Health, Inc. Remote presence system mounted to operating room hardware
US10471588B2 (en) 2008-04-14 2019-11-12 Intouch Technologies, Inc. Robotic based health care system
US11472021B2 (en) 2008-04-14 2022-10-18 Teladoc Health, Inc. Robotic based health care system
US8179418B2 (en) 2008-04-14 2012-05-15 Intouch Technologies, Inc. Robotic based health care system
US8170241B2 (en) 2008-04-17 2012-05-01 Intouch Technologies, Inc. Mobile tele-presence system with a microphone system
US20100019715A1 (en) * 2008-04-17 2010-01-28 David Bjorn Roe Mobile tele-presence system with a microphone system
US10493631B2 (en) 2008-07-10 2019-12-03 Intouch Technologies, Inc. Docking system for a tele-presence robot
US9193065B2 (en) 2008-07-10 2015-11-24 Intouch Technologies, Inc. Docking system for a tele-presence robot
US10878960B2 (en) 2008-07-11 2020-12-29 Teladoc Health, Inc. Tele-presence robot system with multi-cast features
US9842192B2 (en) 2008-07-11 2017-12-12 Intouch Technologies, Inc. Tele-presence robot system with multi-cast features
US10819530B2 (en) 2008-08-21 2020-10-27 Oracle International Corporation Charging enabler
US9429934B2 (en) 2008-09-18 2016-08-30 Intouch Technologies, Inc. Mobile videoconferencing robot system with network adaptive driving
US8340819B2 (en) 2008-09-18 2012-12-25 Intouch Technologies, Inc. Mobile videoconferencing robot system with network adaptive driving
US8996165B2 (en) 2008-10-21 2015-03-31 Intouch Technologies, Inc. Telepresence robot with a camera boom
US8898332B2 (en) * 2008-11-20 2014-11-25 At&T Intellectual Property I, L.P. Methods, systems, devices and computer program products for protecting a network by providing severable network zones
US20100125662A1 (en) * 2008-11-20 2010-05-20 At&T Intellectual Property I. L.P. Methods, Systems, Devices and Computer Program Products for Protecting a Network by Providing Severable Network Zones
US10059000B2 (en) 2008-11-25 2018-08-28 Intouch Technologies, Inc. Server connectivity control for a tele-presence robot
US8463435B2 (en) 2008-11-25 2013-06-11 Intouch Technologies, Inc. Server connectivity control for tele-presence robot
US9138891B2 (en) 2008-11-25 2015-09-22 Intouch Technologies, Inc. Server connectivity control for tele-presence robot
US10875183B2 (en) 2008-11-25 2020-12-29 Teladoc Health, Inc. Server connectivity control for tele-presence robot
US8849680B2 (en) 2009-01-29 2014-09-30 Intouch Technologies, Inc. Documentation through a remote presence robot
US8881039B2 (en) 2009-03-13 2014-11-04 Fisher-Rosemount Systems, Inc. Scaling composite shapes for a graphical human-machine interface
US20100268383A1 (en) * 2009-04-17 2010-10-21 Yulun Wang Tele-presence robot system with software modularity, projector and laser pointer
US8897920B2 (en) 2009-04-17 2014-11-25 Intouch Technologies, Inc. Tele-presence robot system with software modularity, projector and laser pointer
US10969766B2 (en) 2009-04-17 2021-04-06 Teladoc Health, Inc. Tele-presence robot system with software modularity, projector and laser pointer
US8879547B2 (en) 2009-06-02 2014-11-04 Oracle International Corporation Telephony application services
US10911715B2 (en) 2009-08-26 2021-02-02 Teladoc Health, Inc. Portable remote presence robot
US8384755B2 (en) 2009-08-26 2013-02-26 Intouch Technologies, Inc. Portable remote presence robot
US10404939B2 (en) 2009-08-26 2019-09-03 Intouch Technologies, Inc. Portable remote presence robot
US9602765B2 (en) 2009-08-26 2017-03-21 Intouch Technologies, Inc. Portable remote presence robot
US11399153B2 (en) 2009-08-26 2022-07-26 Teladoc Health, Inc. Portable telepresence apparatus
US9269060B2 (en) 2009-11-20 2016-02-23 Oracle International Corporation Methods and systems for generating metadata describing dependencies for composable elements
US20110142211A1 (en) * 2009-12-16 2011-06-16 Oracle International Corporation Message forwarding
US9509790B2 (en) 2009-12-16 2016-11-29 Oracle International Corporation Global presence
US9503407B2 (en) 2009-12-16 2016-11-22 Oracle International Corporation Message forwarding
US11154981B2 (en) 2010-02-04 2021-10-26 Teladoc Health, Inc. Robot user interface for telepresence robot system
US8670017B2 (en) 2010-03-04 2014-03-11 Intouch Technologies, Inc. Remote presence system including a cart that supports a robot face and an overhead camera
US9089972B2 (en) 2010-03-04 2015-07-28 Intouch Technologies, Inc. Remote presence system including a cart that supports a robot face and an overhead camera
US11798683B2 (en) 2010-03-04 2023-10-24 Teladoc Health, Inc. Remote presence system including a cart that supports a robot face and an overhead camera
US10887545B2 (en) 2010-03-04 2021-01-05 Teladoc Health, Inc. Remote presence system including a cart that supports a robot face and an overhead camera
US8825183B2 (en) 2010-03-22 2014-09-02 Fisher-Rosemount Systems, Inc. Methods for a data driven interface based on relationships between process control tags
US8935005B2 (en) 2010-05-20 2015-01-13 Irobot Corporation Operating a mobile robot
US9498886B2 (en) 2010-05-20 2016-11-22 Irobot Corporation Mobile human interface robot
US9902069B2 (en) 2010-05-20 2018-02-27 Irobot Corporation Mobile robot system
US9014848B2 (en) 2010-05-20 2015-04-21 Irobot Corporation Mobile robot system
US11389962B2 (en) 2010-05-24 2022-07-19 Teladoc Health, Inc. Telepresence robot system that can be accessed by a cellular phone
US10343283B2 (en) 2010-05-24 2019-07-09 Intouch Technologies, Inc. Telepresence robot system that can be accessed by a cellular phone
US10808882B2 (en) 2010-05-26 2020-10-20 Intouch Technologies, Inc. Tele-robotic system with a robot face placed on a chair
US10218748B2 (en) 2010-12-03 2019-02-26 Intouch Technologies, Inc. Systems and methods for dynamic bandwidth allocation
US9264664B2 (en) 2010-12-03 2016-02-16 Intouch Technologies, Inc. Systems and methods for dynamic bandwidth allocation
US8930019B2 (en) 2010-12-30 2015-01-06 Irobot Corporation Mobile human interface robot
US8965579B2 (en) 2011-01-28 2015-02-24 Intouch Technologies Interfacing with a mobile telepresence robot
US10591921B2 (en) 2011-01-28 2020-03-17 Intouch Technologies, Inc. Time-dependent navigation of telepresence robots
US9323250B2 (en) 2011-01-28 2016-04-26 Intouch Technologies, Inc. Time-dependent navigation of telepresence robots
US9785149B2 (en) 2011-01-28 2017-10-10 Intouch Technologies, Inc. Time-dependent navigation of telepresence robots
US8718837B2 (en) 2011-01-28 2014-05-06 Intouch Technologies Interfacing with a mobile telepresence robot
US11468983B2 (en) 2011-01-28 2022-10-11 Teladoc Health, Inc. Time-dependent navigation of telepresence robots
US9469030B2 (en) 2011-01-28 2016-10-18 Intouch Technologies Interfacing with a mobile telepresence robot
US10399223B2 (en) 2011-01-28 2019-09-03 Intouch Technologies, Inc. Interfacing with a mobile telepresence robot
US11289192B2 (en) 2011-01-28 2022-03-29 Intouch Technologies, Inc. Interfacing with a mobile telepresence robot
US10769739B2 (en) 2011-04-25 2020-09-08 Intouch Technologies, Inc. Systems and methods for management of information among medical providers and facilities
US9974612B2 (en) 2011-05-19 2018-05-22 Intouch Technologies, Inc. Enhanced diagnostics for a telepresence robot
US9489222B2 (en) 2011-08-24 2016-11-08 Radware, Ltd. Techniques for workload balancing among a plurality of physical machines
US9703585B2 (en) 2011-08-24 2017-07-11 Radware, Ltd. Method for live migration of virtual machines
US8949431B2 (en) 2011-08-24 2015-02-03 Radware, Ltd. Method for live migration of virtual machines
US9053141B2 (en) * 2011-10-31 2015-06-09 International Business Machines Corporation Serialization of access to data in multi-mainframe computing environments
US20130111026A1 (en) * 2011-10-31 2013-05-02 International Business Machines Corporation Serialization of access to data in multimainframe computing environments
US8836751B2 (en) 2011-11-08 2014-09-16 Intouch Technologies, Inc. Tele-presence system with a user interface that displays different communication links
US9715337B2 (en) 2011-11-08 2017-07-25 Intouch Technologies, Inc. Tele-presence system with a user interface that displays different communication links
US10331323B2 (en) 2011-11-08 2019-06-25 Intouch Technologies, Inc. Tele-presence system with a user interface that displays different communication links
US11205510B2 (en) 2012-04-11 2021-12-21 Teladoc Health, Inc. Systems and methods for visualizing and managing telepresence devices in healthcare networks
US10762170B2 (en) 2012-04-11 2020-09-01 Intouch Technologies, Inc. Systems and methods for visualizing patient and telepresence device statistics in a healthcare network
US9251313B2 (en) 2012-04-11 2016-02-02 Intouch Technologies, Inc. Systems and methods for visualizing and managing telepresence devices in healthcare networks
US8902278B2 (en) 2012-04-11 2014-12-02 Intouch Technologies, Inc. Systems and methods for visualizing and managing telepresence devices in healthcare networks
US10892052B2 (en) 2012-05-22 2021-01-12 Intouch Technologies, Inc. Graphical user interfaces including touchpad driving interfaces for telemedicine devices
US11628571B2 (en) 2012-05-22 2023-04-18 Teladoc Health, Inc. Social behavior rules for a medical telepresence robot
US10328576B2 (en) 2012-05-22 2019-06-25 Intouch Technologies, Inc. Social behavior rules for a medical telepresence robot
US9361021B2 (en) 2012-05-22 2016-06-07 Irobot Corporation Graphical user interfaces including touchpad driving interfaces for telemedicine devices
US11515049B2 (en) 2012-05-22 2022-11-29 Teladoc Health, Inc. Graphical user interfaces including touchpad driving interfaces for telemedicine devices
US9174342B2 (en) 2012-05-22 2015-11-03 Intouch Technologies, Inc. Social behavior rules for a medical telepresence robot
US9776327B2 (en) 2012-05-22 2017-10-03 Intouch Technologies, Inc. Social behavior rules for a medical telepresence robot
US10780582B2 (en) 2012-05-22 2020-09-22 Intouch Technologies, Inc. Social behavior rules for a medical telepresence robot
US11453126B2 (en) 2012-05-22 2022-09-27 Teladoc Health, Inc. Clinical workflows utilizing autonomous and semi-autonomous telemedicine devices
US10658083B2 (en) 2012-05-22 2020-05-19 Intouch Technologies, Inc. Graphical user interfaces including touchpad driving interfaces for telemedicine devices
US10603792B2 (en) 2012-05-22 2020-03-31 Intouch Technologies, Inc. Clinical workflows utilizing autonomous and semiautonomous telemedicine devices
US10061896B2 (en) 2012-05-22 2018-08-28 Intouch Technologies, Inc. Graphical user interfaces including touchpad driving interfaces for telemedicine devices
US11910128B2 (en) 2012-11-26 2024-02-20 Teladoc Health, Inc. Enhanced video interaction for a user interface of a telepresence network
US10334205B2 (en) 2012-11-26 2019-06-25 Intouch Technologies, Inc. Enhanced video interaction for a user interface of a telepresence network
US10924708B2 (en) 2012-11-26 2021-02-16 Teladoc Health, Inc. Enhanced video interaction for a user interface of a telepresence network
US9098611B2 (en) 2012-11-26 2015-08-04 Intouch Technologies, Inc. Enhanced video interaction for a user interface of a telepresence network
US9450981B2 (en) 2013-03-14 2016-09-20 Radware, Ltd. System and method thereof for mitigating denial of service attacks in virtual networks
US9722908B2 (en) 2013-10-17 2017-08-01 International Business Machines Corporation Problem determination in a hybrid environment
US9749212B2 (en) 2013-10-17 2017-08-29 International Business Machines Corporation Problem determination in a hybrid environment
US20170149643A1 (en) * 2015-11-23 2017-05-25 Bank Of America Corporation Network stabilizing tool
US11102103B2 (en) * 2015-11-23 2021-08-24 Bank Of America Corporation Network stabilizing tool
US11862302B2 (en) 2017-04-24 2024-01-02 Teladoc Health, Inc. Automated transcription and documentation of tele-health encounters
US10372517B2 (en) * 2017-07-21 2019-08-06 TmaxData Co., Ltd. Message scheduling method
US11742094B2 (en) 2017-07-25 2023-08-29 Teladoc Health, Inc. Modular telehealth cart with thermal imaging and touch screen user interface
US11636944B2 (en) 2017-08-25 2023-04-25 Teladoc Health, Inc. Connectivity infrastructure for a telehealth platform
US11389064B2 (en) 2018-04-27 2022-07-19 Teladoc Health, Inc. Telehealth cart that supports a removable tablet with seamless audio/video switching

Also Published As

Publication number Publication date
US6209018B1 (en) 2001-03-27
WO1999026136A3 (en) 1999-07-22
WO1999026136A2 (en) 1999-05-27
EP1029272A2 (en) 2000-08-23
AU1389899A (en) 1999-06-07

Similar Documents

Publication Publication Date Title
US6209018B1 (en) Service framework for a distributed object network system
US6237024B1 (en) Method and apparatus for the suspension and continuation of remote processes
Neuman et al. The Prospero resource manager: A scalable framework for processor allocation in distributed systems
US5475817A (en) Object oriented distributed computing system processing request to other object model with code mapping by object managers located by manager of object managers
US10216545B2 (en) Method and system for modeling and analyzing computing resource requirements of software applications in a shared and distributed computing environment
Ghormley et al. GLUix: a global layer unix for a network of workstations
AU746391B2 (en) Method and system for facilitating distributed software development in a distribution unaware manner
US5452459A (en) Method and apparatus for allocating server access in a distributed computing environment
EP0660234B1 (en) Method and system for executing code remotely
US6101527A (en) System for managing and processing distributed object transactions and process implemented by said system
US6832238B1 (en) Local transaction management
US6192514B1 (en) Multicomputer system
JP4690437B2 (en) Communication method, communication apparatus and program for network application
US8332479B2 (en) Enterprise application server system and method
US20040078782A1 (en) Workload management of stateful program entities
Pyarali et al. Evaluating and optimizing thread pool strategies for real-time CORBA
US6470346B2 (en) Remote computation framework
EP1027796A2 (en) Distributed web application server
US6704764B1 (en) Method and apparatus for a servlet server class
EP1057108A1 (en) Method and apparatus for the suspension and continuation of remote processes
Natrajan et al. Grid resource management in Legion
Schnekenburger Load balancing in CORBA: A survey of concepts, patterns, and techniques
Neuman et al. Resource management for distributed parallel systems
US6957436B1 (en) Method and system for multi-threaded object loading and unloading
Haase et al. The SDVM-an approach for future adaptive computer clusters

Legal Events

Date Code Title Description
STCB Information on status: application discontinuation

Free format text: ABANDONED -- FAILURE TO RESPOND TO AN OFFICE ACTION