Felix; After replaying my test many times, it turns out that SCR is working like a charm and I don't reproduce my issue anymore ... Sorry for this bad alert !
BR /pierre On Fri, Aug 13, 2010 at 5:22 PM, Felix Meschberger <fmesc...@gmail.com>wrote: > Hi, > > On 13.08.2010 17:11, Pierre De Rop wrote: > > Hi Felix, > > > > Thanks for your quick response. > > I tested also with scr 1.2.0 (and 1.4.0), and it seems that I still have > the > > Bad- but somewhat glad its not a new issue. > > > same problem: > > > > DEBUG: com.alcatel_lucent.samples.multiversion2.0.0 (10): > > [com.alcatel_lucent.samples.multiversion.implv2.ServiceImpl] State > > transition : Registered -> Active > > ERROR: com.alcatel_lucent.samples.multiversion.client1.0.0 (11): > > [com.alcatel_lucent.samples.multiversion.client.Client] The bindService > > method could not be called > > java.lang.IllegalArgumentException: argument type mismatch > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > > at > > > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > > at > > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > > at java.lang.reflect.Method.invoke(Method.java:597) > > at > > > org.apache.felix.scr.impl.helper.BaseMethod.invokeMethod(BaseMethod.java:213) > > at > > > org.apache.felix.scr.impl.helper.BaseMethod.access$500(BaseMethod.java:38) > > at > > > org.apache.felix.scr.impl.helper.BaseMethod$Resolved.invoke(BaseMethod.java:542) > > at > > > org.apache.felix.scr.impl.helper.BaseMethod$NotResolved.invoke(BaseMethod.java:500) > > at > > org.apache.felix.scr.impl.helper.BaseMethod.invoke(BaseMethod.java:434) > > at > > > org.apache.felix.scr.impl.manager.DependencyManager.invokeBindMethod(DependencyManager.java:948) > > at > > > org.apache.felix.scr.impl.manager.DependencyManager.bind(DependencyManager.java:884) > > at > > > org.apache.felix.scr.impl.manager.DependencyManager.open(DependencyManager.java:808) > > at > > > org.apache.felix.scr.impl.manager.ImmediateComponentManager.createImplementationObject(ImmediateComponentManager.java:199) > > > > > > > > May I post a jira issue in order to attach my sample code ? In this way > you > > could then have a look at what I am testing ? > > Yes, that would be nice. Thanks. > > Regards > Felix > > > > > thanks > > > > > > > > On Fri, Aug 13, 2010 at 4:55 PM, Felix Meschberger <fmesc...@gmail.com > >wrote: > > > >> Hi, > >> > >> I did change some argument checking for bind methods shortly before the > >> 1.6.0 release (The 1.6.1-SNAPSHOT is essentially still the same as the > >> 1.6.0 release currently being voted) to get SCR pass the CT. > >> > >> I cannot exclude the possibility of this introducing a nasty side effect > >> bug. > >> > >> Can you test your scenario with the prior 1.4.0 release ? Does it > >> exhibit the same issue ? > >> > >> Nevertheless, I would assume this to be a bug, yes. > >> > >> Regards > >> Felix > >> > >> On 13.08.2010 16:42, Pierre De Rop wrote: > >>> Hi everyone; > >>> > >>> I would like to test a multi versioned service using declarative > service > >>> (I'm using latest SCR from trunk: 1.6.1.SNAPSHOT + fwk 3.0.1. > >>> So, I have a first bundle service-1.0.0.jar which exports a Service > whose > >>> package is exported using version=1.0.0 > >>> I then have another bundle service-2.0.0.jar which exports the same > >> Service > >>> (same package), but with version = 2.0.0; > >>> and the Service interface is incompatible (that's why the version major > >>> number is different). > >>> Each bundle have its implementation included in a private package. > >>> > >>> Now, I have a third bundle (client.jar), which imports the Service API, > >>> using the version range "[1.0.0, 2)" > >>> and the client is referencing the Service like this: > >>> > >>> <?xml version='1.0' encoding='utf-8'?> > >>> <component name='com.alcatel_lucent.samples.multiversion.client.Client' > >>> xmlns='http://www.osgi.org/xmlns/scr/v1.1.0' immediate='true' > >>> activate='start'> > >>> <implementation > >>> class='com.alcatel_lucent.samples.multiversion.client.Client'/> > >>> <reference name='service' > >>> interface='com.alcatel_lucent.samples.multiversion.Service' > >>> bind='bindService'/> > >>> </component> > >>> > >>> The problem is that when I start my two versioned Service bundles > (v1.0.0 > >> + > >>> v2.0.0), the v2.0.0 bundle is started first, and SCR seems to try to > >> inject > >>> it to my client bundle, > >>> even if the client bundle imports the v1.0.0 API ... > >>> So, SCR logs the following exception, when attempting to invoke the > >>> bindService(Service) method : > >>> > >>> DEBUG: com.alcatel_lucent.samples.multiversion.client1.0.0 (11): > >>> [com.alcatel_lucent.samples.multiversion.client.Client] invoking bind: > >>> bindService > >>> DEBUG: com.alcatel_lucent.samples.multiversion2.0.0 (10): > >>> [com.alcatel_lucent.samples.multiversion.implv2.ServiceImpl] getting > >>> activate: activate > >>> DEBUG: com.alcatel_lucent.samples.multiversion2.0.0 (10): > >>> [com.alcatel_lucent.samples.multiversion.implv2.ServiceImpl] Locating > >> method > >>> activate in class > >> com.alcatel_lucent.samples.multiversion.implv2.ServiceImpl > >>> DEBUG: com.alcatel_lucent.samples.multiversion2.0.0 (10): > >>> [com.alcatel_lucent.samples.multiversion.implv2.ServiceImpl] Declared > >> Method > >>> > >> > com.alcatel_lucent.samples.multiversion.implv2.ServiceImpl.activate([interface > >>> org.osgi.service.component.ComponentContext]) not found > >>> DEBUG: com.alcatel_lucent.samples.multiversion2.0.0 (10): > >>> [com.alcatel_lucent.samples.multiversion.implv2.ServiceImpl] Locating > >> method > >>> activate in class java.lang.Object > >>> DEBUG: com.alcatel_lucent.samples.multiversion2.0.0 (10): > >>> [com.alcatel_lucent.samples.multiversion.implv2.ServiceImpl] Declared > >> Method > >>> java.lang.Object.activate([interface > >>> org.osgi.service.component.ComponentContext]) not found > >>> DEBUG: com.alcatel_lucent.samples.multiversion2.0.0 (10): > >>> [com.alcatel_lucent.samples.multiversion.implv2.ServiceImpl] activate > >> method > >>> [activate] not found, ignoring > >>> DEBUG: com.alcatel_lucent.samples.multiversion2.0.0 (10): > >>> [com.alcatel_lucent.samples.multiversion.implv2.ServiceImpl] State > >>> transition : Registered -> Active > >>> ERROR: com.alcatel_lucent.samples.multiversion.client1.0.0 (11): > >>> [com.alcatel_lucent.samples.multiversion.client.Client] The bindService > >>> method has thrown an exception > >>> java.lang.IllegalArgumentException: argument type mismatch > >>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > >>> at > >>> > >> > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > >>> at > >>> > >> > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > >>> at java.lang.reflect.Method.invoke(Method.java:597) > >>> at > >>> > >> > org.apache.felix.scr.impl.helper.BaseMethod.invokeMethod(BaseMethod.java:227) > >>> at > >>> > >> > org.apache.felix.scr.impl.helper.BaseMethod.access$500(BaseMethod.java:38) > >>> at > >>> > >> > org.apache.felix.scr.impl.helper.BaseMethod$Resolved.invoke(BaseMethod.java:591) > >>> at > >>> > >> > org.apache.felix.scr.impl.helper.BaseMethod$NotResolved.invoke(BaseMethod.java:548) > >>> at > >>> org.apache.felix.scr.impl.helper.BaseMethod.invoke(BaseMethod.java:472) > >>> at > >>> > >> > org.apache.felix.scr.impl.manager.DependencyManager.invokeBindMethod(DependencyManager.java:1028) > >>> at > >>> > >> > org.apache.felix.scr.impl.manager.DependencyManager.bind(DependencyManager.java:944) > >>> at > >>> > >> > org.apache.felix.scr.impl.manager.DependencyManager.open(DependencyManager.java:868) > >>> at > >>> > >> > org.apache.felix.scr.impl.manager.ImmediateComponentManager.createImplementationObject(ImmediateComponentManager.java:200) > >>> at > >>> > >> > org.apache.felix.scr.impl.manager.ImmediateComponentManager.createComponent(ImmediateComponentManager.java:118) > >>> at > >>> > >> > org.apache.felix.scr.impl.manager.AbstractComponentManager$Unsatisfied.activate(AbstractComponentManager.java:997) > >>> at > >>> > >> > org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:333) > >>> at > >>> > >> > org.apache.felix.scr.impl.manager.DependencyManager.serviceAdded(DependencyManager.java:283) > >>> at > >>> > >> > org.apache.felix.scr.impl.manager.DependencyManager.serviceChanged(DependencyManager.java:170) > >>> at > >>> > >> > org.apache.felix.framework.util.EventDispatcher.invokeServiceListenerCallback(EventDispatcher.java:864) > >>> at > >>> > >> > org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:732) > >>> at > >>> > >> > org.apache.felix.framework.util.EventDispatcher.fireServiceEvent(EventDispatcher.java:662) > >>> > >>> > >>> Did I come across I bug ? > >>> Indeed, so far, I was thinking that SCR does not inject a Service whose > >>> class loader is not compatible with the requesting client ? > >>> Am I correct ? or should my two Services be provided with a specific > >> service > >>> property, in order to distinguish the two versions ? > >>> I mean: should the client do a Reference with a filter like > >>> "(serviceVersion=2.0.0)" ? > >>> > >>> > >>> Thanks in advance; > >>> /pierre > >>> > >> > > >