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 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 ? 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 > > >