2009/3/6 <alexander.ber...@finnova.ch>

> From time to time I get the following exception when using Apache Felix
> SCR. I am not yet sure if this is a problem of SCR or a framework bug. For
> me it looks like a framework bug caused by the hashCode() function of
> org.apache.felix.framework.ServiceReferenceImpl respectively
> org.apache.felix.framework.ServiceRegistrationImpl. These functions throw a
> IllegalStateException when the ServiceRegistration is not valid anymore. As
> to my understanding hashCode() should never throw an exception and always
> return the same integer value for the same object instance. If this contract
> is violated classes like HashMap will not work correctly, possibly
> introducing memory leaks if the Map (Set or whatever) entries are not
> removed due to changing hash codes or thrown exceptions.
>
> java.lang.IllegalStateException The service registration is no longer
> valid.
>    org.apache.felix.framework.ServiceRegistrationImpl getReference
> ServiceRegistrationImpl.java 88
>    org.apache.felix.framework.ServiceReferenceImpl hashCode
> ServiceReferenceImpl.java 87
>    java.util.HashMap removeEntryForKey HashMap.java 548
>    java.util.HashMap remove HashMap.java 538
>    java.util.Collections$SynchronizedMap remove Collections.java 1982
>    org.apache.felix.scr.impl.DependencyManagerun getService
> DependencyManager.java 578
>    org.apache.felix.scr.impl.DependencyManager close DependencyManager.java
> 374
>    org.apache.felix.scr.impl.AbstractComponentManager disableInternal
> AbstractComponentManager.java 589
>    org.apache.felix.scr.impl.AbstractComponentManager disposeInternal
> AbstractComponentManager.java 616
>    org.apache.felix.scr.impl.AbstractComponentManager dispose
> AbstractComponentManager.java 272
>    org.apache.felix.scr.impl.ImmediateComponentManager dispose
> ImmediateComponentManager.java 120
>    org.apache.felix.scr.impl.BundleComponentActivator dispose
> BundleComponentActivator.java 261
>    org.apache.felix.scr.impl.Activator disposeComponents Activator.java 264
>    org.apache.felix.scr.impl.Activator bundleChanged Activator.java 177
>    org.apache.felix.framework.util.EventDispatcher
> invokeBundleListenerCallback EventDispatcher.java 745
>    org.apache.felix.framework.util.EventDispatcher fireEventImmediately
> EventDispatcher.java 674
>    org.apache.felix.framework.util.EventDispatcher fireBundleEvent
> EventDispatcher.java 587
>    org.apache.felix.framework.Felix fireBundleEvent Felix.java 3629
>    org.apache.felix.framework.Felix _stopBundle Felix.java 2076
>    org.apache.felix.framework.Felix stopBundle Felix.java 2034
>    org.apache.felix.framework.BundleImpl stop BundleImpl.java 418
>    org.apache.felix.framework.BundleImpl stop BundleImpl.java 405
>    org.apache.felix.shell.impl.StopCommandImpl execute StopCommandImpl.java
> 70
>    org.apache.felix.shell.impl.Activator$ShellServiceImpl executeCommand
> Activator.java 276
>    org.apache.felix.shell.remote.Shell run Shell.java 109
>    java.lang.Thread run Thread.java 619
>
> Please tell me if I am wrong else I will open a JIRA issue for this
> problem.
>

I believe this has already been fixed in trunk: a single service reference
is
now cached inside the registration (it uses an inner class) and neither the
registration or the reference now override the hashcode() method


> Kind regards
> - Alex
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@felix.apache.org
> For additional commands, e-mail: users-h...@felix.apache.org
>
>


-- 
Cheers, Stuart

Reply via email to