On Aug 9, 2010, at 4:59 AM, Felix Meschberger <fmesc...@gmail.com> wrote:

> Hi,
> 
> On 06.08.2010 21:07, Justin Edelson wrote:
>> Apologies in advance for reordering the bits from Carsten's email, but
>> I think my response will make more sense this way.
>> 
>> On Wed, Aug 4, 2010 at 9:53 AM, Carsten Ziegeler <cziege...@apache.org> 
>> wrote:
>>> 
>>> Currently the launchpad copies the initial set of bundles to a file
>>> directory and creates a structure based on the start levels there.
>>> Bundles are then picked up from there and installed.
>>> 
>> Personally, I'd like to revisit this design. It seems unnecessary to
>> copy the bundles to the file system vs. reading them directly from the
>> InputStream. AFAICT, this was originally done to allow for additional
>> bundles (i.e. ones not in the launchpad archive) to be placed in the
>> startup directory, but that's exactly where FileInstall *should* be
>> used.
> 
> That is, as I understand it, the exact goal right now: Instead of
> duplicating implementation code with File Install we leverage File Install.
AFAICT, the bundles (and now configs) will still be extracted from the 
launchpad artifact. I agree that if we're going to extract these files, we 
should use FileInstall. However, I don't agree that we should be doing this 
extraction in the first place.

> 
> This makes our Launchpad code base smaller and easier to understand and
> maintain while even extending the overall functionality.
> 
>> 
>> What I would like to see is that the ResourceProvider interface (the
>> launchpad one, not the Sling API one) is treated like a virtual file
>> system and that resources from this VFS are used directly by:
>> 1) the bits in launchpad which install/start bundles
>> 2) some ConfigAdmin bridge thingy
>> 3) the jackrabbit.server bundle (in order to load the JR config from
>> inside the archive)
> 
> I agree, that the Jackrabbit Configuration file is a real issue right
> now. Because it currently is hard to easily overwrite in a fresh
> installation. We should look for a solution to this problem....
> 
>> 
>> Yes... disk is cheap, but it seems wasteful that in a typical Sling
>> install you end up with three copies of each bundle - one inside the
>> archive, one in the startup directory, and one in the Felix cache.
> 
> Yes, this ssems odd and overkill. But I valuate this not as critical as
> duplicating code.

Agreed. But what I think we both value more than overkill and code duplication 
is ease of comprehension and this is where I think the current scheme fails us.

Justin
> 
> If this is a concern I suggest generating a ZIP (or compressed tar) file
> consisting of something like this:
> 
>   * raw launchpad with just the log and file install bundles
>   * bundles and configurations to be installed
> 
> After unpacking the package file can be discarded.
> 
> (Of course I still think the all-encompassing executable JAR-file a
> major asset of Sling)
> 
>> 
>>> while trying to implement handling of initial configurations for the
>>> ConfigAdmin within our launchpad, I noticed that this is more difficult
>>> than I thought. The final problem is a class loading issue as the
>>> launchpad does not contain the compendium class (for config admin).
>>> For the same reason, the current support of deployment packages is
>>> broken in launchpad.
>> 
>> The other obvious solution is to embed ConfigAdmin in Launchpad. I'm
>> sure there are reasons not to do this, but I suspect that these are
>> somewhat academic in nature given how stable the
>> Felix ConfigAdmin implementation appears to be.
> 
> It is really about the Configuration Admin service package. Of course we
> will never integrate the Configuration Admin implementation with
> Launchpad Base (this would severly violate the separation of concerns
> principle).
> 
> Still, I would discourage adding the Configuration Admin service package
> to launchpad base. Because this might cause problems should the API be
> extended in the future (or increase the version number as has been done
> in R 4.2).
> 
>> 
>>> While trying to workarund these problems I came back to an idea I had a
>>> long time ago: instead of doing all these installs (bundle, configs,
>>> depl. pcks etc.) in our own code, why not use existing stuff?
>>> The FileInstall bundle from Apache Felix covers most of our use cases -
>>> there are some minor pieces missing. But we can add the required
>>> features there and avoid duplicate code by just using File Install.
>> I'm not sure these missing pieces are so minor... last I looked, File
>> Install doesn't support start levels. Although I'm not sure Sling
>> *needs* start levels, they are useful from an administrative
>> perspective.
> 
> Sling definitely doesn't require start levels.
> 
> We introduced them to workaround an implementation issue with early
> Felix framework releases with respect to finding a consistent classspace
> for imports/exports and to somehow create kind of a layered system setup.
> 
> And yes, File Install does not have support for start levels yet and
> such support will have to be added. But I would assume, that we are not
> the only ones with a requirement to add start level support to file install.
> 
>> 
>> It seems to me that what's really needed is a refactoring of
>> ConfigAdmin and FileInstall (and JCR Install for that matter) to
>> provide a unified, standalone config parsing library. I believe I saw
>> some discussion on felix-dev about having FileInstall use the config
>> parsing bits from the ConfigAdmin bundle. This is better than having
>> code duplication, but a standalone library still seems better to me.
> 
> A standalone library with a single file (or two files) in it is probably
> not worth the effort ;-)
> 
> And the discussion on felix-dev was exactly to leverage the
> configuration file format of the Configuration Admin service and to
> reuse the configuration file parser in File Install by means of the
> Embed-Dependency functionality of the bundle plugin.
> 
>> 
>> All that said, I'm on vacation and haven't been able to fully process
>> this. But I did want to raise my concerns now before this got too far.
> 
> Thanks alot for sharing and keep on enjoying your vacation ;-)
> 
> Regards
> Felix
> 
>> 
>> Justin
>> 
>>> Note, that File Install is mainly used to get initial configuration into
>>> the system - so it's more bootstrapping - for everything else jcr
>>> install can be used. Or File Install is nice for all those scenarios
>>> where no repository is used :)
>>> 
>>> WDYT?
>>> 
>>> Carsten
>>> --
>>> Carsten Ziegeler
>>> cziege...@apache.org
>>> 
>> 

Reply via email to