Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 278836

Summary: Unusable progress monitor created in JobManagerAdapter
Product: [RT] RAP Reporter: Ian Bull <irbull>
Component: WorkbenchAssignee: Project Inbox <rap-inbox>
Status: RESOLVED FIXED QA Contact:
Severity: normal    
Priority: P3 CC: ruediger.herrmann, slewis
Version: unspecified   
Target Milestone: 1.3 M2   
Hardware: All   
OS: All   
Whiteboard:
Attachments:
Description Flags
Proposed fix
none
Small app to reproduce the described problem
none
Bugfix none

Description Ian Bull CLA 2009-06-02 14:01:01 EDT
When RAP is started it registers a ProgressProvider.  The progress provider is used to create a progress monitor for jobs that do not belong to any progress group.

However, if there is no session, the progress monitor returned cannot actually be used.  For example, if you call cancel on the monitor you get:

Caused by: java.lang.IllegalStateException: No context available outside of the request service lifecycle.
	at org.eclipse.rwt.internal.service.ContextProvider.getContext(ContextProvider.java:108)
	at org.eclipse.rwt.internal.service.ContextProvider.getStateInfo(ContextProvider.java:166)
	at org.eclipse.rwt.SessionSingletonBase.getInstance(SessionSingletonBase.java:84)

I propose that if there is no session, the progress provider returns null.  From the java doc this means:

 * @return a progress monitor, or <code>null</code> if no progress monitoring 
 * is needed.

o.e.core.runtime then constructs a NullProgressMonitor for this job.
Comment 1 Rüdiger Herrmann CLA 2009-06-04 10:12:44 EDT
Created attachment 138285 [details]
Proposed fix

JobManagerAdapter#createMonitor() returns null if called outside the context of a session.
Comment 2 Rüdiger Herrmann CLA 2009-09-16 09:28:05 EDT
Created attachment 147309 [details]
Small app to reproduce the described problem
Comment 3 Rüdiger Herrmann CLA 2009-09-16 09:29:28 EDT
Stacktrace:
java.lang.IllegalStateException: No context available outside of the request service lifecycle.
	at org.eclipse.rwt.internal.service.ContextProvider.getContext(ContextProvider.java:108)
	at org.eclipse.rwt.internal.service.ContextProvider.getStateInfo(ContextProvider.java:166)
	at org.eclipse.rwt.SessionSingletonBase.getInstance(SessionSingletonBase.java:84)
	at org.eclipse.ui.internal.progress.ProgressManager$ProgressManagerProvider.getInstance(ProgressManager.java:69)
	at org.eclipse.ui.internal.progress.ProgressManager.getInstance(ProgressManager.java:153)
	at org.eclipse.ui.internal.progress.JobInfo.cancel(JobInfo.java:96)
	at org.eclipse.ui.internal.progress.ProgressManager$JobMonitor.setCanceled(ProgressManager.java:277)
	at org.eclipse.rap.leak.Activator$MyJob.run(Activator.java:21)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
Comment 4 Rüdiger Herrmann CLA 2009-09-16 10:22:38 EDT
Created attachment 147317 [details]
Bugfix

JobManagerAdapter#createMonitor() now returns null if there is no session context available.
Comment 5 Rüdiger Herrmann CLA 2009-09-16 10:23:18 EDT
Fixed in CVS HEAD