jcrinstall - take two
---------------------
Key: SLING-646
URL: https://issues.apache.org/jira/browse/SLING-646
Project: Sling
Issue Type: New Feature
Components: OSGi
Reporter: Bertrand Delacretaz
Based on the jcrinstall [1] and jcrbundles [2][SLiNG-587] experiments, and
after playing a bit with these modules and talking to (our) Felix, I'll start
re-implementing the jcrinstall module under sling/extensions/jcrinstall, based
on a mix of both codebases (jcrbundles was based on the existing jcrinstall
anyway, so it's a mix already).
Here's a quick specification.
The jcrinstall module looks for OSGi resources (bundles in jar files,
configurations in text (.cfg) files, deployment packages in .dp files) under a
configurable set of paths in the repository.
Those resources are "installed" in the OSGi framework when detected: bundles,
deployment packages and configurations are installed, updated or removed as
needed.
The jcrinstall module is considered as another "user interface" to the OSGi
framework, besides the existing OSGi console, and as such aims to play well
with the console, and avoid any inconsistencies when both user interfaces are
used. That's only a best effort, though, as we'll probably find edge cases when
using both can cause problems.
The module is split in two components:
= OSGi controller component =
Receives notifications of new, updated or deleted OSGi resources from the JCR
observation component.
Does not use any JCR interfaces, so as to be reusable independently.
Manages the required queues and retries to ensure that received bundles,
configurations and deployment packages are eventually activated, even if their
dependencies are made available later.
Provides permanent storage (based on BundleContext.getDataFile()) for the JCR
component to store Properties for the resources that it detects.
Uses handlers based on a common interface for the various types of resources
(bundles, configs, deployment packages).
= JCR observation component =
Observes a number of folders in the JCR repository, based on configurable
regular expressions for their paths. The default regexp causes folders named
"install" to be observed.
Limited to a configurable list of root paths, by default /libs and /apps.
Detects added or modified files in those folders and notifies the OSGi
controller of these events, providing the file's InputStream with the event,
along with an event type.
Uses the permanent storage provided by the OSGi controller to store information
that allows for detecting updates and deletes of OSGi resources.
= coda =
Splitting the module in two well-separated components should also help
automated testing - as described above, both components should be readily
testable without requiring complicated setups.
[1] http://svn.apache.org/repos/asf/incubator/sling/whiteboard/jcrinstall/
[2] http://svn.apache.org/repos/asf/incubator/sling/whiteboard/jcrbundles/
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.