Permanent Plug-Ins: Functional Overview
In order to provide a means to implement pervasive functionality that will be accessible by other plug-ins during client run-time, the FirstSpirit clients SiteArchitect and ContentCreator load permanent plug-ins during start-up, immediately after project selection.
Example uses of permanent plug-ins:
- to centralize functionality that will be used by several plug-in classes
- to implement a run-time repository for session-specific state data that should be available to several other plug-ins
Functionality
Permanent plug-ins are loaded immediately after project selection as the client is started and exist throughout the client instance's lifetime. These plug-ins are instantiated before any other plug-in types and receive a project-specific context.
Developer API documentation:
SiteArchitect: JavaClientPermanentPlugin
ContentCreator: WebeditPermanentPlugin
Please note that although all permanent plug-ins are instantiated before any other plug-in type during project loading, there is no guaranteed order of instantiation among several permanent plug-in classes. |
Permanent plug-ins are intended to provide background services. Access to interactive functionality (e.g. displaying message boxes in the user interface) is not guaranteed. |
Usage
Because it is available during the client session's lifetime, this plug-in type is well-suited for providing centralized functionality (i.e. controller objects) which may be used by other plug-ins or scripts that may be run on-demand in the client. To make such a controller object available as a service to other plug-in components, it may be registered by the permanent plug-in component as a client service using the ClientServiceRegistryAgent.
See the chapter Using FirstSpirit APIs / Services for details on using the ClientServiceRegistryAgent.
Code Example and Example Implementation
The Permanent Plug-In Code Example introduces and documents the implementation workflow and points out general considerations in designing permanent plug-ins.
Additionally, this page provides an overview of an example implementation named MessageMe, which is provided as part of the Developer Examples module source code.