Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

E4/RAP Integration/Jobs

5) Jobs

To support background jobs that are associated with certain sessions we introduced the JobManagerAdapater and needed to make a lot of changes around Job implementations. As an example I provide some code snippets from the org.eclipse.ui.internal.progress.AnimationManager:

The first snippet shows how we provided session access during scheduling of the job, this is something we have to do a lot.

 // RAP [fappel]: map job to session
 // void setAnimated(final boolean bool) {
 //   animated = bool;
 //   animationUpdateJob.schedule(100);
 // }
 void setAnimated(final boolean bool) {
   animated = bool;
   Runnable scheduler = new Runnable() {
     public void run() {
       animationUpdateJob.schedule(100);
     }
   };
   UICallBack.runNonUIThreadWithFakeContext( display, scheduler );
 }

The second snippet shows some handling in case the job is still running in case of a session timeout. It's quite ugly, but the basic idea is to listen to the session invalidation and cancel the job if it's still running.

 ISessionStore session = RWT.getSessionStore();
 String watchDogKey = getClass().getName() + ".watchDog";
 if( session.getAttribute( watchDogKey ) == null ) {
   session.setAttribute( watchDogKey, new HttpSessionBindingListener() {
     public void valueBound( final HttpSessionBindingEvent event ) {
     }
     public void valueUnbound( final HttpSessionBindingEvent event ) {
       if( animationUpdateJob != null ) {
         animationUpdateJob.cancel();
         [...]
       }
     }
   } );
 }

Back to the top