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

Reply via email to