1. Field of the Invention
The present invention relates to a method, system, and program for calling a target object from a caller object
2. Description of the Related Art
A program can issue a call to an object or another program either synchronously or asynchronously. With a synchronous call, an application initiates a request to a target and the calling thread would block processing any further requests until a response or return value is received from the called target object or program. If the called target is unable to respond or delays responding, then the thread initiating the synchronous call will have to wait until a response is received and would have to block any additional client requests. Such blocking may be observed with a user interface program that receives input from a user. When the user interface issues a synchronous call in response to user input, the user may experience a delay that requires them to wait before any further action is allowed. Any further action in the user interface may be inhibited until the synchronous response is received.
In asynchronous communication, the calling thread will not wait or delay any further processing until the result is received. Instead, on initiating the asynchronous call, the caller application can proceed with further operations while waiting for a response from the called target.
Although asynchronous processing can improve application throughput and avoid delays in further processing, programmers often utilize synchronous calls because of the added complexity in using asynchronous processing. Further, synchronous calls allow for a tighter coupling of communication between the caller and the target.
Provided are a method, system, and program for calling a target object from a caller object in a first call mode. A program component is invoked in response to the caller object initiating the call to the target object and the program component invokes execution of the call on the target object. The program component monitors the execution of the call on the target object and determines whether the execution of the call on the target object exceeds a threshold. The caller object is notified to cause the caller object to change from the first call mode to a second call mode in handling the call if the execution of the call is determined to exceed the threshold.
In further implementations, the first call mode comprises a synchronous mode and the second call mode comprises an asynchronous mode.
Still further, any return value from the called target object may be stored in a future object if the execution of the call on the target object exceeds the threshold.
In yet further implementations, the caller object invokes the call by calling a proxy object, and wherein the program component is invoked by the proxy object.
Still further, the program component may execute in a first thread and a second thread may be spawned to execute the call on the target object invoked by the component object.
Referring now to the drawings in which like reference numbers represent corresponding parts throughout:
In the following description, reference is made to the accompanying drawings which form a part hereof and which illustrate several embodiments of the present invention. It is understood that other embodiments may be utilized and structural and operational changes may be made without departing from the scope of the present invention.
**Sun Microsystems and Java are trademarks of Sun Microsystems, Inc.
Thus, the caller 8a is notified when the TimeExceededException 20 is thrown so that the caller 8a will handle the call in an asynchronous manner. In asynchronous mode, the caller 8a will allow additional operations to proceed and continue to check the Future object 22 for a return value 18, using methods on the Future object 22. If the caller 8a presents information to a user interface, then the caller 8a may render some graphic indicating a wait state, such as an hour glass or progress bar until the return value 18 is retrieved from the Future object 22. During this wait state, the caller 8a may allow the execution of additional concurrent operations to proceed while waiting for a return value from the target object 8b. There may be methods defined to access the Future object 22, such as a GET method to get any return value 18 buffered in the Future object 22 and one method to return a true or false value indicating whether the return value 18 has been buffered in the Future object 22.
The TimeExceededException 20 may comprise an unchecked exception that indicates that the execution time of an operation has exceeded a maximum as determined by the time limit determination strategy 16. The TimeExceededException 20 encapsulates a Future object 22 that is used to represent the results of the operation performed by the target 8b in response to the call 10. Once the exception 20 is thrown, the caller 8a can continue to execute asynchronously with respect to the call 10. The Future object 22 will encapsulate the return value 18 when it becomes available. The caller 8a can use the Future object 22 to access any result value 18 of the operation when it is ready. The caller 8a may utilize blocking (timed or untimed) or non-blocking semantics to access the result value 18 from the Future object 22. Timed blocking allows the client to specify a wait time; when this wait time is exceeded, the client is notified (usually by an exception) and unblocked. In untimed blocking, the client waits indefinitely (i.e. stays blocked until the return value is available).
In certain implementations, the time limit determination strategy 16 may indicate a maximum wait time, such as several seconds that applies for all synchronous calls. In alternative implementations, other techniques may be used to determine the wait time. For example, the invocation handler 14 could read and parse a file, such as an Extensible Markup Language (XML) file, indicating time limits for different synchronous calls 10. This would allow the time limits to be “coded” using declarative rather than imperative techniques and to be varied across calls. Other simple, i.e., single time limit used for all calls, or sophisticated time limit determination strategies may also be used. A sophisticated strategy may be limited only by what can be expressed using the programming language, and may allow for different time limits for different calls or different time limits used at different times.
Upon being invoked on the thread 6a, the timed operation invocation handler 14 would spawn (at block 110) a new thread 6b to execute the call 10 to the target object 8b. The timed operation invocation handler 14, executing on thread 6a, would start (at block 112) a timer to time the execution of the call 10 on thread 6b. The call made from the caller 8a to the dynamic proxy 12 is different than the call made from the invocation handler 14 to the target 8b. At block 114, the invocation handler 14 periodically monitors (at block 114) the timer for the call 12 executing on thread 6b. In alternative implementations, the handler 14 will not periodically monitor (i.e. poll) the timer and instead use a timer that notifies the invocation handler 14 when the time is exceeded. As discussed, the time limit determination strategy 16 may provide a single maximum time for the execution of a call 10 to be pending, or different times for different call operations. In certain implementations, a separate timer may be maintained for each call spawned by a timed operation invocation handler 14. If (at block 116) the execution of the call 10 has completed, then control ends. Otherwise, if the call 10 is pending and if (at block 118) the timer exceeds the maximum time of execution for the call 10 indicated in the time limit determination strategy 16, then the invocation handler 14 throws (at block 120) the TimeExceededException 20 encapsulating the Future object 22. When throwing the exception 20, the invocation handler 14 would notify the caller 8a, which would cause the caller 8a to handle the call in an asynchronous mode as opposed to synchronous mode, as described with respect to
With the described implementations, the caller 8a may initially attempt a synchronous type call. However, if the target is delayed beyond an unacceptable maximum time limit, then the mode may be switched to asynchronous where the caller 8a will have to obtain the return value 18 from the Future object 22 encapsulated within the exception 20. In this way, those called operations taking longer than the allotted maximum time, according to a time limit determination strategy, are handled differently than those operations that complete within the allotted time. Once the asynchronous mode is initiated, then the caller 8a may allow continued operations to be performed. For instance, a user interface caller may allow the user to initiate further operations and concurrently periodically check on the return value. This avoids the situation that would occur with a synchronous call, which would prevent any further action on the calling thread until a response is received.
The above described method, apparatus or article of manufacture for handling method calls may use standard programming and/or engineering techniques to produce software, firmware, hardware, or any combination thereof. The term “article of manufacture” as used herein refers to code or logic implemented in hardware logic (e.g., an integrated circuit chip, Programmable Gate Array (PGA), Application Specific Integrated Circuit (ASIC), etc.) or a computer readable medium, such as magnetic storage medium (e.g., hard disk drives, floppy disks, tape, etc.), optical storage (CD-ROMs, optical disks, etc.), volatile and non-volatile memory devices (e.g., EEPROMs, ROMs, PROMs, RAMs, DRAMs, SRAMs, firmware, programmable logic, etc.). Code in the computer readable medium is accessed and executed by a processor. The code in which described implementations are implemented may further be accessible through a transmission media or from a file server over a network. In such cases, the article of manufacture in which the code is implemented may comprise a transmission media, such as a network transmission line, wireless transmission media, signals propagating through space, radio waves, infrared signals, etc. Thus, the “article of manufacture” may comprise the medium in which the code is embodied. Additionally, the “article of manufacture” may comprise a combination of hardware and software components in which the code is embodied, processed, and executed. Of course, those skilled in the art will recognize that many modifications may be made to this configuration without departing from the scope of the present invention, and that the article of manufacture may comprise any information bearing medium known in the art.
The described implementations utilized the Java programming language. Alternatively, the implementations may utilize other object oriented programming languages, such as C++, Smalltalk, etc.
In the described implementations, an invocation handle and exception were used to monitor the time taken by the call and alert the caller of a change in mode from synchronous to asynchronous. In alternative implementations, different programming techniques and program components may be used to monitor the execution time of the call and alert the caller to change from synchronous to asynchronous mode processing.
The caller 8a and target 8b may be located in the same address space, e.g., a same Java Virtual Machine (JVM), or different address spaces, JVMs, on the same or different systems. If the caller 8a and target 8b are in different address spaces, then they may use a remote call protocol such as the Remote Method Invocation (RMI) to communicate calls from the caller 8a to target. In such implementations where the caller and target are in different address spaces, the dynamic proxy and invocation handler may operate in the address space, e.g., JVM, of the caller.
In described implementations, the Future object 22 is encapsulated in the exception. In alternative implementations, the Future object 22 may comprise a variable or buffer located anywhere in the system.
The time limit determination strategy 16 may be modified by a user to indicate a maximum time limit to use for all calls or different time limits for different calls.
In the described implementations, the caller initially makes a synchronous call and is notified to operate in asynchronous mode if the time limit of the call execution is exceeded. In alternative implementations, the caller may initiate the call in a mode other than synchronous, such as asynchronous, and be notified to switch to a mode other than asynchronous.
The foregoing description of various implementations of the invention has been presented for the purposes of illustration and description. It is not intended to be exhaustive or to limit the invention to the precise form disclosed. Many modifications and variations are possible in light of the above teaching. It is intended that the scope of the invention be limited not by this detailed description, but rather by the claims appended hereto. The above specification, examples and data provide a complete description of the manufacture and use of the composition of the invention. Since many embodiments of the invention can be made without departing from the spirit and scope of the invention, the invention resides in the claims hereinafter appended.