9.5. Delayed Changed EventsEclipse uses lazy initializationonly load a plug-in when it is needed. Lazy initialization presents a problem for plug-ins that need to track changes. How does a plug-in track changes when it is not loaded? Eclipse solves this problem by queuing change events for a plug-in that is not loaded. When the plug-in is loaded, it receives a single resource change event containing the union of the changes that have occurred during the time it was not active. To receive this event, your plug-in must register to be a save participant when it is started up, as follows. public static void addSaveParticipant() { ISaveParticipant saveParticipant = new ISaveParticipant(){ public void saving(ISaveContext context) throws CoreException { // Save any model state here. context.needDelta(); } public void doneSaving(ISaveContext context) {} public void prepareToSave(ISaveContext context) throws CoreException {} public void rollback(ISaveContext context) {} }; ISavedState savedState; try { savedState = ResourcesPlugin .getWorkspace() .addSaveParticipant ( FavoritesPlugin.getDefault(), saveParticipant); } catch (CoreException e) { FavoritesLog.logError(e); // Recover if necessary. return; } if (savedState != null) savedState.processResourceChangeEvents( FavoritesManager.getManager()); } Tip Even though Eclipse is based on lazy plug-in initialization, it does provide a mechanism for plug-ins to start when the workbench itself starts. To activate at startup, the plug-in must extend the org.eclipse.ui.startup extension point and implement the org.eclipse.ui. IStartup interface. Once the plug-in is started, the workbench will call the plug-in's earlyStartup() method (see Section 3.4.2, Early plug-in startup, on page 114). A workbench preference option gives the user the ability to prevent a plug-in from starting early, so make sure that if your plug-in takes advantage of this extension point, it degrades gracefully in the event that it is not started early. |