- All Known Implementing Classes:
public interface CRXModuleThe
CRXModuleinterface defines the API which must be implemented by modules extending the functionality of the repository. Modules are installed into the repository either by configuration or by calling the
The life cycle of a module encompasses six stages:
- The extension class instantiated either by the repository in the case of a configured module or by the application when manually installing the module.
- The extension class is configured. In the case of a configured module, configuration is based on bean style properties being set. When manually installing the module, configuration may happen in an application specific way.
- The module is started when it is installed into the repository. Starting
the module comprises two steps: (1)
Startingand (2) registering the module internally. These operations are implemented by the repository.
- After having been started until being
stopped, the module may operate as implemented. A module should not operate before being started and should cease operating after having been stopped.
- The module is stopped when it is uninstalled from the repository.
Stopping the module comprises two steps: (1) Unregistering the module
internally and (2)
stoppingthe module. After having been stopped, the module should not operate anymore.
- Garbage Collection
- After the module has been stopped, the repository releases all hard references to the module instance. Provided no other hard references exist any more, the object will be collected by the Java VM sooner or later.
When the repository is shutting down, all modules which are still installed are uninstalled, that is unregistered and stopped.
A module configured with the the repository configuration file is configured automatically when the repository is started. Modules are configured in
Moduleelements nested within the
Moduleselement. Configuration properties may be set by nested
When the module is installed by the repository, the module's class as configured in the
Module.classattribute is instantiated and the configured properties from the nested
paramelements are set JavaBean style.
For the repository to be able to instantiate the module, the module must have a public default constructor. Also the property setter methods must be public and for each property a setter and a getter method must be provided for the parameter configuration to be successfull.
Modules may be installed automatically when the repository is started or manually by the application. To automatically start the modules, they must be configured as described above. To manually install a module, the application is responsible for the instantiation and configuration of the module.
To install, the application will call the
CRXRepository.installModule(javax.jcr.Session, CRXModule)which then calls the
start(CRXSession)method to start the module before registering it.
String getName()Returns the name of this module.
This name is expected to be unique amongst the registered modules and is just used to identify the module. Other than to register the module under this name, the repository does not use it for anything else.
- The non-
null, non-empty module name.
void start(CRXSession session) throws RepositoryExceptionStarts this module and makes it ready for use.
This method is called by the repository before registering the module internally. This means, that while this method is active, this module is not yet visible by the
If this method fails by throwing a
RepositoryException, any resources already acquired must be released. A module failing to start is also not registered and thus visible. Finally a module failing to start will never be stopped, that is the
stop()method will not be called.
This method should only throw a
RepositoryExceptionif failing to start. Notably, the implementation should prevent throwing a
- The module MUST NOT call the
logout()method on this
session. Otherwise the repository may behave unexpectedly.
sessionis a shared Session. This means, the Session is not thread safe and may at most be used for concurrent read operations but MUST NOT be used to write to the repository. If the module requires writing to the repository, a new Session MUST be acquired calling the
CRXSession.getSession(String)method on the
session. Such session SHOULD of course be logged out when the module is
CRXSessionto access the system workspace of the repository. This session is shared and MUST NOT be used to write to the repository. Use the
CRXSession.getSession(String)method to get a session to write to the repository.
RepositoryException- May be thrown if the module fails to start.
- The module MUST NOT call the
void stop()Stops this module.
This method is called after the module has been unregistered. If the module failed to start, this method is never called.
This method is not excpected to throw any exception. Care must be taken to prevent