Sorry, here are the attachments... http://old.nabble.com/file/p30806605/ipojo.testcase.C1-0.0.1-SNAPSHOT.jar ipojo.testcase.C1-0.0.1-SNAPSHOT.jar http://old.nabble.com/file/p30806605/ipojo.testcase.C2-0.0.1-SNAPSHOT.jar ipojo.testcase.C2-0.0.1-SNAPSHOT.jar http://old.nabble.com/file/p30806605/ipojo.testcase.C3-0.0.1-SNAPSHOT.jar ipojo.testcase.C3-0.0.1-SNAPSHOT.jar http://old.nabble.com/file/p30806605/ipojo.testcase.C4-0.0.1-SNAPSHOT.jar ipojo.testcase.C4-0.0.1-SNAPSHOT.jar
Olivier Bigard wrote: > > Hi Clément, > > We tried to execute your sample in our environment: it produced the same > error described below. > We just modified a little your sources to make them run: we add a C4 > Bundle that contains an iPojo instance that calls C3 "getFilter()" method > in its "validate" callback. > We created one OSGi Bundle per component. > You can find these 4 OSGi Bundles in attachments. > Can you try to do following: > - start the 4 Bundles (C4 "validate" callback is correctly called) -> > "My > filter ... called" is produced in standard output > - stop C1 and C2 Bundles > - restart C1 and C2 Bundles > - "validate" callback is not correctly called -> only "My filter ..." is > produced in standard output and the stacktrace below is produced > > Thanks > Olivier > > -----Message d'origine----- > De : Clement Escoffier [mailto:[email protected]] > Envoyé : vendredi 28 janvier 2011 17:28 > À : Apache Felix - Users Mailing List > Objet : Re: iPojo inner class instrumentation > > Hi, > > Invalid Bundle Context means that the bundle is stopping or already > stopped, and so is not able to access the service registry anymore. Is it > your case? > > Regards, > > Clement > > On 28.01.11 17:11, "Bigard Olivier" <[email protected]> wrote: > >>Hi Clément, >> >>Sorry to answer so late, but we just test your proposal. >> >>We tried to disable "proxy" on C2 as suggested below, but no positive >>effect. >> >>After that we tried to test our use-case with last 1.8.0 iPojo version. >>We still had an exception, but with more information. Here it is: >> >> java.lang.IllegalStateException: Cannot create the Nullable object, >>an unexpected error occurs: Invalid BundleContext. >> at >>org.apache.felix.ipojo.handlers.dependency.Dependency.createNullableObject >>(Dependency.java:377) >> at >>org.apache.felix.ipojo.handlers.dependency.Dependency.createServiceObject( >>Dependency.java:656) >> at >>org.apache.felix.ipojo.handlers.dependency.Dependency.onGet(Dependency.jav >>a:632) >> at >>org.apache.felix.ipojo.InstanceManager.onGet(InstanceManager.java:1035) >> at >>c4z.usecase.consumer.UseCaseConsumer.__getprovider(UseCaseConsumer.java) >> at >>c4z.usecase.consumer.UseCaseConsumer.__authenticate(UseCaseConsumer.java:3 >>7) >> at >>c4z.usecase.consumer.UseCaseConsumer.authenticate(UseCaseConsumer.java) >> at >>c4z.usecase.rest.RestApiProviderKO$1.authenticate(RestApiProviderKO.java:6 >>7) >> at >>c4z.usecase.rest.MyRestApiListener.__addApi(MyRestApiListener.java:49) >> at >>c4z.usecase.rest.MyRestApiListener.addApi(MyRestApiListener.java) >> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native >>Method) >> at >>sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java: >>39) >> at >>sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorIm >>pl.java:25) >> at java.lang.reflect.Method.invoke(Method.java:597) >> at >>org.apache.felix.ipojo.util.Callback.call(Callback.java:237) >> at >>org.apache.felix.ipojo.handlers.dependency.DependencyCallback.call(Depende >>ncyCallback.java:237) >> at >>org.apache.felix.ipojo.handlers.dependency.Dependency.invokeCallback(Depen >>dency.java:312) >> at >>org.apache.felix.ipojo.handlers.dependency.Dependency.callBindMethod(Depen >>dency.java:354) >> at >>org.apache.felix.ipojo.handlers.dependency.Dependency.onServiceArrival(Dep >>endency.java:475) >> at >>org.apache.felix.ipojo.util.DependencyModel.manageArrival(DependencyModel. >>java:392) >> at >>org.apache.felix.ipojo.util.DependencyModel.addedService(DependencyModel.j >>ava:335) >> at >>org.apache.felix.ipojo.util.Tracker$Tracked.trackAdding(Tracker.java:725) >> at >>org.apache.felix.ipojo.util.Tracker$Tracked.track(Tracker.java:686) >> at >>org.apache.felix.ipojo.util.Tracker$Tracked.serviceChanged(Tracker.java:64 >>7) >> at >>org.apache.felix.framework.util.EventDispatcher.invokeServiceListenerCallb >>ack(EventDispatcher.java:864) >> at >>org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(Event >>Dispatcher.java:732) >> at >>org.apache.felix.framework.util.EventDispatcher.fireServiceEvent(EventDisp >>atcher.java:662) >> at >>org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:3726) >> at >>org.apache.felix.framework.Felix.access$000(Felix.java:80) >> at >>org.apache.felix.framework.Felix$2.serviceChanged(Felix.java:717) >> at >>org.apache.felix.framework.ServiceRegistry.registerService(ServiceRegistry >>.java:107) >> at >>org.apache.felix.framework.Felix.registerService(Felix.java:2847) >> at >>org.apache.felix.framework.BundleContextImpl.registerService(BundleContext >>Impl.java:251) >> at >>org.apache.felix.ipojo.IPojoContext.registerService(IPojoContext.java:338) >> at >>org.apache.felix.ipojo.handlers.providedservice.ProvidedService.registerSe >>rvice(ProvidedService.java:345) >> at >>org.apache.felix.ipojo.handlers.providedservice.ProvidedServiceHandler.__s >>tateChanged(ProvidedServiceHandler.java:494) >> at >>org.apache.felix.ipojo.handlers.providedservice.ProvidedServiceHandler.sta >>teChanged(ProvidedServiceHandler.java) >> at >>org.apache.felix.ipojo.InstanceManager.setState(InstanceManager.java:471) >> at >>org.apache.felix.ipojo.InstanceManager.stateChanged(InstanceManager.java:1 >>314) >> at >>org.apache.felix.ipojo.InstanceManager.setState(InstanceManager.java:496) >> at >>org.apache.felix.ipojo.HandlerManager.stateChanged(HandlerManager.java:239 >>) >> at >>org.apache.felix.ipojo.Handler.setValidity(Handler.java:174) >> at >>org.apache.felix.ipojo.handlers.dependency.DependencyHandler.__checkContex >>t(DependencyHandler.java:186) >> at >>org.apache.felix.ipojo.handlers.dependency.DependencyHandler.checkContext( >>DependencyHandler.java) >> at >>org.apache.felix.ipojo.handlers.dependency.DependencyHandler.__validate(De >>pendencyHandler.java:149) >> at >>org.apache.felix.ipojo.handlers.dependency.DependencyHandler.validate(Depe >>ndencyHandler.java) >> at >>org.apache.felix.ipojo.util.DependencyModel.validate(DependencyModel.java: >>642) >> at >>org.apache.felix.ipojo.util.DependencyModel.computeDependencyState(Depende >>ncyModel.java:310) >> at >>org.apache.felix.ipojo.util.DependencyModel.manageArrival(DependencyModel. >>java:399) >> at >>org.apache.felix.ipojo.util.DependencyModel.addedService(DependencyModel.j >>ava:335) >> at >>org.apache.felix.ipojo.util.Tracker$Tracked.trackAdding(Tracker.java:725) >> at >>org.apache.felix.ipojo.util.Tracker$Tracked.track(Tracker.java:686) >> at >>org.apache.felix.ipojo.util.Tracker$Tracked.serviceChanged(Tracker.java:64 >>7) >> at >>org.apache.felix.framework.util.EventDispatcher.invokeServiceListenerCallb >>ack(EventDispatcher.java:864) >> at >>org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(Event >>Dispatcher.java:732) >> at >>org.apache.felix.framework.util.EventDispatcher.fireServiceEvent(EventDisp >>atcher.java:662) >> at >>org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:3726) >> at >>org.apache.felix.framework.Felix.access$000(Felix.java:80) >> at >>org.apache.felix.framework.Felix$2.serviceChanged(Felix.java:717) >> at >>org.apache.felix.framework.ServiceRegistry.registerService(ServiceRegistry >>.java:107) >> at >>org.apache.felix.framework.Felix.registerService(Felix.java:2847) >> at >>org.apache.felix.framework.BundleContextImpl.registerService(BundleContext >>Impl.java:251) >> at >>org.apache.felix.ipojo.IPojoContext.registerService(IPojoContext.java:338) >> at >>org.apache.felix.ipojo.handlers.providedservice.ProvidedService.registerSe >>rvice(ProvidedService.java:345) >> at >>org.apache.felix.ipojo.handlers.providedservice.ProvidedServiceHandler.__s >>tateChanged(ProvidedServiceHandler.java:494) >> at >>org.apache.felix.ipojo.handlers.providedservice.ProvidedServiceHandler.sta >>teChanged(ProvidedServiceHandler.java) >> at >>org.apache.felix.ipojo.InstanceManager.setState(InstanceManager.java:471) >> at >>org.apache.felix.ipojo.InstanceManager.stateChanged(InstanceManager.java:1 >>314) >> at >>org.apache.felix.ipojo.InstanceManager.setState(InstanceManager.java:496) >> at >>org.apache.felix.ipojo.HandlerManager.stateChanged(HandlerManager.java:239 >>) >> at >>org.apache.felix.ipojo.Handler.setValidity(Handler.java:174) >> at >>org.apache.felix.ipojo.handlers.dependency.DependencyHandler.__checkContex >>t(DependencyHandler.java:186) >> at >>org.apache.felix.ipojo.handlers.dependency.DependencyHandler.checkContext( >>DependencyHandler.java) >> at >>org.apache.felix.ipojo.handlers.dependency.DependencyHandler.__validate(De >>pendencyHandler.java:149) >> at >>org.apache.felix.ipojo.handlers.dependency.DependencyHandler.validate(Depe >>ndencyHandler.java) >> at >>org.apache.felix.ipojo.util.DependencyModel.validate(DependencyModel.java: >>642) >> at >>org.apache.felix.ipojo.util.DependencyModel.computeDependencyState(Depende >>ncyModel.java:310) >> at >>org.apache.felix.ipojo.util.DependencyModel.manageArrival(DependencyModel. >>java:399) >> at >>org.apache.felix.ipojo.util.DependencyModel.addedService(DependencyModel.j >>ava:335) >> at >>org.apache.felix.ipojo.util.Tracker$Tracked.trackAdding(Tracker.java:725) >> at >>org.apache.felix.ipojo.util.Tracker$Tracked.track(Tracker.java:686) >> at >>org.apache.felix.ipojo.util.Tracker$Tracked.serviceChanged(Tracker.java:64 >>7) >> at >>org.apache.felix.framework.util.EventDispatcher.invokeServiceListenerCallb >>ack(EventDispatcher.java:864) >> at >>org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(Event >>Dispatcher.java:732) >> at >>org.apache.felix.framework.util.EventDispatcher.fireServiceEvent(EventDisp >>atcher.java:662) >> at >>org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:3726) >> at >>org.apache.felix.framework.Felix.access$000(Felix.java:80) >> at >>org.apache.felix.framework.Felix$2.serviceChanged(Felix.java:717) >> at >>org.apache.felix.framework.ServiceRegistry.registerService(ServiceRegistry >>.java:107) >> at >>org.apache.felix.framework.Felix.registerService(Felix.java:2847) >> at >>org.apache.felix.framework.BundleContextImpl.registerService(BundleContext >>Impl.java:251) >> at >>org.apache.felix.ipojo.IPojoContext.registerService(IPojoContext.java:338) >> at >>org.apache.felix.ipojo.handlers.providedservice.ProvidedService.registerSe >>rvice(ProvidedService.java:345) >> at >>org.apache.felix.ipojo.handlers.providedservice.ProvidedServiceHandler.__s >>tateChanged(ProvidedServiceHandler.java:494) >> at >>org.apache.felix.ipojo.handlers.providedservice.ProvidedServiceHandler.sta >>teChanged(ProvidedServiceHandler.java) >> at >>org.apache.felix.ipojo.InstanceManager.setState(InstanceManager.java:471) >> at >>org.apache.felix.ipojo.InstanceManager.start(InstanceManager.java:353) >> at >>org.apache.felix.ipojo.ComponentFactory.createInstance(ComponentFactory.ja >>va:166) >> at >>org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.j >>ava:301) >> at >>org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.j >>ava:238) >> at >>org.apache.felix.ipojo.IPojoFactory.updated(IPojoFactory.java:634) >> at >>org.apache.felix.cm.impl.ConfigurationManager$UpdateConfiguration.run(Conf >>igurationManager.java:1460) >> at >>org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:88) >> >>Maybe the "Invalid BundleContext" is the cause of our problem? >> >>We will test the use-case you mentioned below in our environment to check >>if it's working. >> >>Thanks, >>Olivier >> >> >>-----Message d'origine----- >>De : Clement Escoffier [mailto:[email protected]] >>Envoyé : lundi 13 décembre 2010 16:38 >>À : [email protected] >>Objet : Re: iPojo inner class instrumentation >> >>Hi, >> >>I've tried to reproduce your scenario in: >>http://svn.apache.org/viewvc?view=revision&revision=1045175 >> >>However, it works for me. I just remove C4 and directly call C3. Could you >>highlight the differences ? >> >>Regards, >> >>Clement >> >>On 13.12.10 16:07, "Bigard Olivier" <[email protected]> wrote: >> >>>Ok, I'll check with disabled proxy on C2. >>> >>>-----Message d'origine----- >>>De : Clement Escoffier [mailto:[email protected]] >>>Envoyé : lundi 13 décembre 2010 15:57 >>>À : [email protected] >>>Objet : Re: iPojo inner class instrumentation >>> >>>Hi, >>> >>>Just a quick check, >>>Could you try to disable 'proxy' on c2 >>>@Requires(proxy=false) >>>C2 c2; >>> >>>Regards, >>> >>>Clement >>> >>>On 13.12.10 15:43, "Bigard Olivier" <[email protected]> wrote: >>> >>>>Hi Clement, >>>> >>>>We are using iPojo Core 1.6.4 (with Annotations). >>>>We are also using the Maven plugin version 1.4.2. Maybe this version is >>>>too old and there is a compatibility problem. I'll check with an earlier >>>>version... >>>> >>>>Regards, >>>>Olivier >>>> >>>>-----Message d'origine----- >>>>De : Clement Escoffier [mailto:[email protected]] >>>>Envoyé : lundi 13 décembre 2010 14:52 >>>>À : [email protected] >>>>Objet : Re: iPojo inner class instrumentation >>>> >>>>Hello, >>>> >>>>On 13.12.10 11:41, "Bigard Olivier" <[email protected]> wrote: >>>> >>>>>Hello, >>>>> >>>>> >>>>> >>>>>We have an interrogation regarding iPojo instrumentation. We read >>>>>somewhere in the forum that iPopo can instrument inner classes, but we >>>>>are facing a problem when using them in our project. >>>>> >>>>>Here is our use case: >>>>> >>>>> >>>>> >>>>>A first component C1 provides a service with a method "callMe()". >>>>>Another component C2 requires this service. >>>>> >>>>> >>>>> >>>>>Class C2 >>>>> >>>>>{ >>>>> >>>>> @Requires >>>>> >>>>> Private C1 c1; >>>>> >>>>> >>>>> >>>>> public boolean authenticate() >>>>> >>>>> { >>>>> >>>>> c1.callMe(); >>>>> >>>>> return true; >>>>> >>>>> } >>>>> >>>>>} >>>>> >>>>> >>>>> >>>>>A third component C3 requires the component C2. This component C2 is >>>>>used inside an inner class MyFilter. >>>>> >>>>> >>>>> >>>>>Class C3 >>>>> >>>>>{ >>>>> >>>>> @Requires >>>>> >>>>> private C2 c2; >>>>> >>>>> >>>>> >>>>> @Override >>>>> >>>>> public MyFilter getFilter() >>>>> >>>>> { >>>>> >>>>> return new MyFilter() >>>>> >>>>> { >>>>> >>>>> >>>>> >>>>> @Override >>>>> >>>>> public boolean authenticate() >>>>> >>>>> { >>>>> >>>>> return c2.authenticate(); >>>>> >>>>> } >>>>> >>>>> }; >>>>> >>>>> } >>>>> >>>>>} >>>>> >>>>> >>>>> >>>>>At last, a component C4 listens for arrival and removal of C3 component >>>>>instances with @Bind/@Unbind methods. >>>>> >>>>> >>>>> >>>>>Class C4 >>>>> >>>>>{ >>>>> >>>>> @Requires(id = "apis", optional = true) >>>>> >>>>> C3[] apis; >>>>> >>>>> >>>>> >>>>> @Bind(id = "apis") >>>>> >>>>> public void addApi(ServiceReference ref) >>>>> >>>>> { >>>>> >>>>> C3 api = (C3) bundleCtxt.getService(ref); >>>>> >>>>> filter = api.getFilter(); >>>>> >>>>> filter.authenticate(); >>>>> >>>>> } >>>>> >>>>>} >>>>> >>>>> >>>>> >>>>>Everything works perfectly the first time all the components are >>>>>started. But when we stop and restart the C1 and C2 instances, a >>>>>NullPointerException occurs when calling the method authenticate() of >>>>>the C2 component, because c1 is null. All the iPojo are present and >>>>>valid after the restart, but it seems c1 reference is not updated in >>>>>c2. >>>>> >>>>> >>>>> >>>>>We manage to make it work by modifiying a little bit the getFilter() >>>>>implementation in the C3 component: >>>>> >>>>> >>>>> >>>>>Class C3 >>>>> >>>>>{ >>>>> >>>>> public MyFilter getFilter() >>>>> >>>>> { >>>>> >>>>> return new MyFilterImpl(c2); >>>>> >>>>> } >>>>> >>>>>} >>>>> >>>>> >>>>> >>>>>where MyFilterImpl is an implementation of the MyFilter interface. >>>>> >>>>> >>>>> >>>>>Does it trouble iPojo instrumentation when we instantiate inner classes >>>>>like we do or are we misusing iPojo in another way ? >>>> >>>> >>>>Normally this should work, but I will test it because it looks pretty >>>>strange. >>>>Which version of iPOJO and of the manipulator are you using? >>>> >>>>Regards, >>>> >>>>Clement >>>> >>>>> >>>>> >>>>> >>>>>Thanks >>>>> >>>>>Olivier >>>>> >>>> >>>> >>>> >>>>--------------------------------------------------------------------- >>>>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] >>> >>> >>>--------------------------------------------------------------------- >>>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] >> > > > > --------------------------------------------------------------------- > 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] > -- View this message in context: http://old.nabble.com/iPojo-inner-class-instrumentation-tp30444200p30806605.html Sent from the Apache Felix - Users mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]

