How about addressing this by embedding the ConfigAdmin API in
felix-http.jetty bundle?

All I have done is add org.osgi.service.cm (the ConfigAdmin API package) to
each of Export-Package, Private-Package and Import-Package to
http/jetty/pom.xml:

                        <Export-Package>

org.apache.felix.http.api;version=${pom.version},
                            org.osgi.service.http,

javax.servlet.*;version=2.5;-split-package:=merge-first,
                            *org.osgi.service.cm*
                        </Export-Package>
                        <Private-Package>
                            org.apache.felix.http.base.*,
                            org.apache.felix.http.jetty.*,
                            org.mortbay.*;-split-package:=merge-first,
                            *org.osgi.service.cm*
                        </Private-Package>
                        <Import-Package>
                            javax.net.ssl; javax.security.cert;
                            javax.xml.parsers; org.xml.sax;
                            org.xml.sax.helpers;
                            org.slf4j;resolution:=optional,
                            *org.osgi.service.cm*,
                            *;resolution:=optional
                        </Import-Package>

Adding org.osgi.service.cm to Private-Package causes the ConfigAdmin API to
be embedded in the felix.http.jetty bundle.
Exporting the org.osgi.service.cm package means that it can be resolved
against a better matching bundle, so the embedded version is just used as a
default.

The resulting manifest looks like this (BND has inserted the
org.osgi.service.cm import and export versions):

        Export-Package:
org.apache.felix.http.api;uses:="javax.servlet,org.osgi.service.http";version="2.0.5.SNAPSHOT"

org.osgi.service.http;uses:="javax.servlet.http,javax.servlet";version="1.2"
                javax.servlet.resources;version="2.5"
                javax.servlet;version="2.5"
                javax.servlet.jsp.resources;version="2.5"
                javax.servlet.http;uses:="javax.servlet";version="2.5"
                org.osgi.service.cm;uses:="org.osgi.framework";version="1.2"
        Import-Package: javax.net.ssl;resolution:=optional
                ....
                org.osgi.service.cm;version="1.2"

The resulting bundle is < 1% larger due to embedding the ConfigAdmin API.

Derek

2010/1/12 Sten Roger Sandvik <[email protected]>

> Created a JIRA task (https://issues.apache.org/jira/browse/FELIX-1978) for
> this.
>
> On Mon, Jan 11, 2010 at 10:26 PM, Felix Meschberger <[email protected]>
> wrote:
> > Hi,
> >
> > I fear, the problem is
> >
> >   public final class JettyService
> >    implements ManagedService, Runnable
> >
> > Thus, if the Configuration Admin package cannot be imported, the
> > JettyService cannot be instantiated and thus not be started.
> >
> > The fix is probably to created a small (anonymous or inner) class which
> > implements the ManagedService interface to be instantiated in the
> > JettyService start  (but catching any Errors) method.
> >
> > The ManagedService itself would just forward the updated call to the
> > JettyServide instance.
> >
> > Thus instead of :
> >
> >   this.configServiceReg = this.context.registerService(
> >             ManagedService.class.getName(), this, props);
> >
> > It would be
> >
> >   try {
> >      Object srv = new ManagedService() {
> >            updated(Dictionary props) {
> >                JettyService.this.updated(props);
> >            }
> >      };
> >      this.configServiceReg = this.context.registerService(
> >             ManagedService.class.getName(), this, props);
> >    } catch (Throwable t) {
> >      ...
> >    }
> >
> >
> > Regards
> > Felix
> >
> > On 11.01.2010 01:41, Sten Roger Sandvik wrote:
> >> Hi.
> >>
> >> It's only the packages that is required. You can either install the
> >> configadmin bundle or let the startup environment export the cm.*
> >> compendium packages. I do not think the package dependency can easily
> >> be removed.
> >>
> >> /srs
> >>
> >> On Sun, Jan 10, 2010 at 11:46 PM, Hlusi, Jiri (NSN - FI/Tampere)
> >> <[email protected]> wrote:
> >>> Hello,
> >>>
> >>>
> >>> If I try to run the Felix framework, release 2.0.1, with default
> content
> >>> (framework, obr, shell, shell-tui),
> >>> and install additionally "org.apache.felix.http.bundle-2.0.4.jar" on
> top
> >>> of that, the HTTP bundle won't
> >>> start (will not be resolved) due to missing dependency on CM packages
> >>> (Configuration Admin):
> >>>
> >>> ************
> >>> java.lang.ClassNotFoundException: *** Class
> >>> 'org.osgi.service.cm.ManagedService' was
> >>> not found. Bundle 4 does not import package 'org.osgi.service.cm', nor
> >>> is the package
> >>> exported by any other bundle or available from the system class loader.
> >>> ***
> >>> ************
> >>>
> >>> [ same behavior observed for both, "http.bundle" and "http.jetty"
> >>> bundles ]
> >>>
> >>>
> >>> The manual page
> >>> (http://felix.apache.org/site/apache-felix-http-service.html) says
> >>> configuration
> >>> via OSGi properties and Configuration Admin is possible, but it does
> not
> >>> imply that usage of
> >>> the latter one would be mandatory....
> >>>
> >>>
> >>> So far, I found two work-arounds to get the HTTP service running:
> >>>
> >>>  1) install confadmin-1.2.4
> >>>  2) install osgi.cmpn.jar (update 4.2.0)
> >>>
> >>> Problem with 1) is that overall I'm not intending to utilize
> >>> Configuration Admin for anything
> >>> useful, so I'd rather prefer not to have it loaded just because missing
> >>> interface (package
> >>> export).
> >>>
> >>> Then, looking at 2), the osgi Alliance packages are tagged as "for
> >>> development
> >>> purpose" .... so I'm not sure is it a good idea to use thos in
> >>> production, and what
> >>> eventual side effects there might be.
> >>>
> >>>
> >>> Can anyone advise what would be the best way to move on?
> >>>
> >>> Could the hard dependency on Configration Admin be removed
> >>> somehow in next update of the service?
> >>>
> >>>
> >>>
> >>> Many thanks in advance!
> >>>
> >>> br, Jiri
> >>>
> >>>
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: [email protected]
> >> For additional commands, e-mail: [email protected]
> >>
> >>
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [email protected]
> > For additional commands, e-mail: [email protected]
> >
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>

Reply via email to