Jobs are executed in a job execution environment, which handles a number of tasks and problems that can occur when jobs are executed. In particular,
- it initializes the job with all necessary data
- it starts the job using the correct interfaces
- it keeps the job alive by acquiring a UNO reference
- it waits until the job finishes its work, including listening for asynchronous jobs
- it updates the configuration of a job after it has finished
- it informs listeners about the execution
- it protects the job from office termination, or informs it when it is impossible to veto termination
For this purpose, the job execution environment creates special wrapper objects for jobs. This wrapper object implements mechanisms to support lifetime control. The wrapper vetoes termination of the com.sun.star.frame.Desktop and the closing of frames that contain document models as long as there are dependent active jobs. It might also register as a com.sun.star.util.XCloseListener at a com.sun.star.frame.Frame or com.sun.star.document.OfficeDocument to handle the close communication on behalf of the job. It also listens for asynchronous job instances, and it is responsible for updates to the configuration data after a job has finished (see Returning Results).
A central problem of external components in OpenOffice.org is their lifetime control. Every external component must deal with the possibility that the environment will terminate. It is not efficient to implement lifetime strategies in every job, so the job execution environment takes care of this problem. That way, a job can execute, while difficult situations are handled by the execution environment.
Another advantage of this approach is that it ensures future compatibility. If the mechanism changes in the future, termination is detected and prevented, and it is unnecessary to adapt every existing job implementation.
|Content on this page is licensed under the Public Documentation License (PDL).|