[
https://issues.apache.org/jira/browse/SLING-1078?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Carsten Ziegeler closed SLING-1078.
-----------------------------------
> jcrinstall - take four
> ----------------------
>
> Key: SLING-1078
> URL: https://issues.apache.org/jira/browse/SLING-1078
> Project: Sling
> Issue Type: Improvement
> Components: Installer
> Affects Versions: JCR Installer 3.0.0
> Reporter: Bertrand Delacretaz
> Fix For: Installer Core 3.0.0, JCR Installer 3.0.0
>
>
> After splitting the jcrinstall code for SLING-904, we have reviewed it with
> Felix and Carsten, and come to the conclusion that moving more logic to the
> osgi.installer module will help.
> Here are (rough) notes from our review session, on which I'll base the next
> (and hopefully last ;-) rewrite of jcrinstall.
> = Redesign =
> OSGi controller keeps track of all supplied resources, with states:
> installed, ignored, etc. It stores RegisteredResource objects which are
> derived from InstallableData.
> At startup, jcrinstall client informs osgi.installer of all installable
> resources which are present. Installer can then detect which resources are
> gone since last startup ("rendez-vous").
> OsgiController rendezvous method: client provides list of existing
> InstallableData, URL scheme ("jcrinstall://")
> OsgiController methods: resourceUpdated(InstallableData),
> resourceDeleted(InstallableData). Or maybe register/unregister resource.
> Use a Comparator to decide on bundle priorities: higher versions over lower
> versions, take into account the Maven -SNAPSHOT convention, and let clients
> provide a priority value as part of the InstallableData. Jcrinstall uses that
> priority to give precedence to bundles found in /apps over those found in
> /libs.
> jcrinstall must call rendez-vous if a watched folder is deleted - test what
> happens if for example parent folder (/apps) is deleted.
> Those /apps and /libs path come from the ResourceResolver search path, not
> hardcoded anymore.
> InstallableData methods: getURL, getDigest, getPriority + data access.
> InstallableData becomes a RegisteredResource inside the osgi.installer - do
> not hang on to InstallableData instances, to avoid problems if jcrinstall
> module goes away.
> OSGi console displays list of RegisteredResource objects, using a Servlet as
> the plugin to minimize coupling with webconsole.
> OsgiController admin APIs: executeScheduledOperations, getRegisteredResources
> (uninstall method?)
> Use a real worker thread.
> Handle resource priorities right before creating OSGi tasks, and remove the
> ones who are overridden by priority - installer walks the list of
> RegisteredResources, and creates OSGi tasks (install/uninstall/update etc.)
> based on that list.
> RegisteredResource has two state fields: desired and actual, and by comparing
> them we create OSGi tasks.
> The list of RegisteredResource is ordered by priority, to compute overrides,
> and grouped by "OSGi entity": which bundle or config the resource maps to.
> RegisteredResource.getEntityId() returns bundle ID, config PID, etc
> Modules structure: installer/osgi, installer/jcr, installer/jcr/testing
> = Code cleanup =
> Can we remove JcrInstallService? only used for testing
> NodeConverter can be in implementation package
> RunMode in ConfigNodeConverter should be removed - use folders only for
> override, to avoid confusion.
> Merge PropertiesUtil with its single user classRepositoryObserver:
> propertiesUtil.loadProperties(serviceDataFile) not needed anymore, if OSGi
> controller keeps the list of all registered resources
> Delay RepositoryObserver startup to make non-first startups faster?
> WatchedFolder scanning might be simplified
> Subclasses: DictionaryInstallableData, FileInstallableData
> InstallResultCode should go
> JcrInstallException should go
> OsgiControllerServices is implementation
> OsgiResourceProcessor can be removed
> MissingServiceException: unused?
> EventsCounterImpl -> make Activator the listener, and increment a static long
> volatile counter
> DictionaryReader -> move to tasks package?
> MissingServiceException can go?
> OsgiControllerTaskContext is not needed, pass OsgiControllerImpl?
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.