How do you include the org.osgi.service.cm package? This is trivial in bnd but
I recall it was tricky in PDE?
Did you verify that the package is inside the bundle?
Kind regards,
Peter Kriens
> On 26 Apr 2017, at 10:02, Fauth Dirk (AA-AS/EIS2-EU)
> <[email protected]> wrote:
>
> Interestingly this works fine when running from Bndtools with Felix.
>
> If I try the same with Equinox for projects created with PDE I get a
> NullPointerException. IIRC Private-Package is something special to Bnd. Is
> that correct? I wonder if that exception is caused by some PDE flaws or if it
> is an issue in Equinox Oxygen. In both cases Apache Felix SCR 2.0 is used.
> (in Oxygen 2.0.8 and in Bndtools 2.0.2)
>
> org.osgi.framework.ServiceException: Exception in
> org.apache.felix.scr.impl.manager.SingleComponentManager.getService()
> at
> org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:222)
> at
> org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.getService(ServiceFactoryUse.java:111)
> at
> org.eclipse.osgi.internal.serviceregistry.ServiceConsumer$2.getService(ServiceConsumer.java:45)
> at
> org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:508)
> at
> org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:461)
> at
> org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:624)
> at
> org.apache.felix.scr.impl.manager.SingleRefPair.getServiceObject(SingleRefPair.java:72)
> at
> org.apache.felix.scr.impl.inject.FieldHandler$ReferenceMethodImpl.getServiceObject(FieldHandler.java:985)
> at
> org.apache.felix.scr.impl.manager.DependencyManager.getServiceObject(DependencyManager.java:2201)
> at
> org.apache.felix.scr.impl.manager.DependencyManager$MultipleStaticReluctantCustomizer.prebind(DependencyManager.java:699)
> at
> org.apache.felix.scr.impl.manager.DependencyManager.prebind(DependencyManager.java:1520)
> at
> org.apache.felix.scr.impl.manager.AbstractComponentManager.collectDependencies(AbstractComponentManager.java:1006)
> at
> org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:859)
> at
> org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:823)
> at
> org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse$1.run(ServiceFactoryUse.java:212)
> at java.security.AccessController.doPrivileged(Native Method)
> at
> org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:210)
> at
> org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.getService(ServiceFactoryUse.java:111)
> at
> org.eclipse.osgi.internal.serviceregistry.ServiceConsumer$2.getService(ServiceConsumer.java:45)
> at
> org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:508)
> at
> org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:461)
> at
> org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:624)
> at
> org.apache.felix.gogo.runtime.CommandProxy.getTarget(CommandProxy.java:50)
> at
> org.apache.felix.gogo.runtime.CommandProxy.execute(CommandProxy.java:72)
> at org.apache.felix.gogo.runtime.Closure.executeCmd(Closure.java:477)
> at
> org.apache.felix.gogo.runtime.Closure.executeStatement(Closure.java:403)
> at org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108)
> at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:183)
> at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:120)
> at
> org.apache.felix.gogo.runtime.CommandSessionImpl.execute(CommandSessionImpl.java:89)
> at org.apache.felix.gogo.shell.Console.run(Console.java:62)
> at org.apache.felix.gogo.shell.Shell.console(Shell.java:203)
> at org.apache.felix.gogo.shell.Shell.gosh(Shell.java:128)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:498)
> at org.apache.felix.gogo.runtime.Reflective.invoke(Reflective.java:137)
> at
> org.apache.felix.gogo.runtime.CommandProxy.execute(CommandProxy.java:82)
> at org.apache.felix.gogo.runtime.Closure.executeCmd(Closure.java:477)
> at
> org.apache.felix.gogo.runtime.Closure.executeStatement(Closure.java:403)
> at org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108)
> at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:183)
> at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:120)
> at
> org.apache.felix.gogo.runtime.CommandSessionImpl.execute(CommandSessionImpl.java:89)
> at org.apache.felix.gogo.shell.Activator.run(Activator.java:75)
> at java.lang.Thread.run(Thread.java:745)
> Caused by: java.lang.NullPointerException
> at
> org.apache.felix.scr.impl.inject.FieldHandler.validateField(FieldHandler.java:279)
> at
> org.apache.felix.scr.impl.inject.FieldHandler.access$500(FieldHandler.java:51)
> at
> org.apache.felix.scr.impl.inject.FieldHandler$NotResolved.resolve(FieldHandler.java:839)
> at
> org.apache.felix.scr.impl.inject.FieldHandler$NotResolved.fieldExists(FieldHandler.java:864)
> at
> org.apache.felix.scr.impl.inject.FieldHandler.fieldExists(FieldHandler.java:918)
> at
> org.apache.felix.scr.impl.inject.FieldHandler$3.init(FieldHandler.java:1018)
> at
> org.apache.felix.scr.impl.manager.DependencyManager.invokeInitMethod(DependencyManager.java:1657)
> at
> org.apache.felix.scr.impl.manager.DependencyManager.open(DependencyManager.java:1533)
> at
> org.apache.felix.scr.impl.manager.SingleComponentManager.createImplementationObject(SingleComponentManager.java:261)
> at
> org.apache.felix.scr.impl.manager.SingleComponentManager.createComponent(SingleComponentManager.java:109)
> at
> org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:906)
> at
> org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:879)
> at
> org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:823)
> at
> org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse$1.run(ServiceFactoryUse.java:212)
> at java.security.AccessController.doPrivileged(Native Method)
> at
> org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:210)
> ... 46 more
>
> Mit freundlichen Grüßen / Best regards
>
> Dirk Fauth
>
> Automotive Service Solutions, ESI application (AA-AS/EIS2-EU)
> Robert Bosch GmbH | Postfach 11 29 | 73201 Plochingen | GERMANY |
> www.bosch.com <http://www.bosch.com/>
> Tel. +49(7153)666-1155 | [email protected]
> <mailto:[email protected]>
>
> Sitz: Stuttgart, Registergericht: Amtsgericht Stuttgart, HRB 14000;
> Aufsichtsratsvorsitzender: Franz Fehrenbach; Geschäftsführung: Dr. Volkmar
> Denner,
> Prof. Dr. Stefan Asenkerschbaumer, Dr. Rolf Bulander, Dr. Stefan Hartung, Dr.
> Markus Heyn, Dr. Dirk Hoheisel,
> Christoph Kübel, Uwe Raschke, Peter Tyroller
>
>
> Von: [email protected] [mailto:[email protected]]
> Im Auftrag von Peter Kriens
> Gesendet: Mittwoch, 26. April 2017 09:14
> An: OSGi Developer Mail List <[email protected]>
> Betreff: Re: [osgi-dev] handling optional/dynamic imports in DS
>
> I used to import the package optional and then provide it as an internal
> Private-Package. The import has priority but the internal package is used
> when the import fails to resolve. Since you’re then always wired to a package
> you can handle dependencies on the place they should be handled: services.
>
> This keeps everybody happy internally for very little cost. I’ve included a
> bndtools/enRoute example.
>
> Kind regards,
>
> Peter Kriens
>
>
> ————————————————— bnd.bnd
> Private-Package: \
> org.osgi.service.cm,\
> com.foo.provider
>
> Import-Package: \
> org.osgi.service.cm;resolution:=optional,\
> *
>
> -buildpath: \
> osgi.enroute.base.api
> -runrequires: \
> osgi.identity;filter:='(osgi.identity=com.foo.provider)',\
>
> osgi.identity;filter:='(osgi.identity=org.apache.felix.gogo.runtime)',\
>
> osgi.identity;filter:='(osgi.identity=org.apache.felix.gogo.shell)',\
>
> osgi.identity;filter:='(osgi.identity=org.apache.felix.gogo.command)'
> -runbundles: \
> com.foo.provider;version=snapshot,\
> org.apache.felix.log;version='[1.0.1,1.0.2)',\
> org.apache.felix.scr;version='[2.0.2,2.0.3)',\
> org.apache.felix.gogo.runtime,\
> org.apache.felix.gogo.shell;version=0.16
>
> ————————————————— com.foo.provider.Optional
> @Component
> public class Optional
> {
> @Reference(cardinality=ReferenceCardinality.OPTIONAL)
> ConfigurationAdmin admin;
>
> @Activate
> void activate() {
> System.out.println("activate " + admin);
> }
> }
>
> On 25 Apr 2017, at 23:10, Raymond Auge <[email protected]
> <mailto:[email protected]>> wrote:
>
> I'm wondering if there is a reasonable model for handling optional or dynamic
> package imports in DS.
>
> While optionality at the package level is not an ideal model, sometimes it
> can't be avoided.
>
> I'd like to know if others have come across a "reasonable" way to model this
> in DS.
>
> Sincerely,
> --
> Raymond Augé <http://www.liferay.com/web/raymond.auge/profile> (@rotty3000)
> Senior Software Architect Liferay, Inc. <http://www.liferay.com/> (@Liferay)
> Board Member & EEG Co-Chair, OSGi Alliance <http://osgi.org/> (@OSGiAlliance)
> _______________________________________________
> OSGi Developer Mail List
> [email protected] <mailto:[email protected]>
> https://mail.osgi.org/mailman/listinfo/osgi-dev
> <https://mail.osgi.org/mailman/listinfo/osgi-dev>
>
> _______________________________________________
> OSGi Developer Mail List
> [email protected] <mailto:[email protected]>
> https://mail.osgi.org/mailman/listinfo/osgi-dev
> <https://mail.osgi.org/mailman/listinfo/osgi-dev>
_______________________________________________
OSGi Developer Mail List
[email protected]
https://mail.osgi.org/mailman/listinfo/osgi-dev