[ 
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.

Reply via email to