You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@felix.apache.org by "Jürgen Albert (Jira)" <ji...@apache.org> on 2024/09/06 13:31:00 UTC
[jira] [Created] (FELIX-6726) One reference can be unset more then once and will cause IllegalStateException in Framework
Jürgen Albert created FELIX-6726:
------------------------------------
Summary: One reference can be unset more then once and will cause IllegalStateException in Framework
Key: FELIX-6726
URL: https://issues.apache.org/jira/browse/FELIX-6726
Project: Felix
Issue Type: Bug
Components: Declarative Services (SCR)
Affects Versions: scr-2.2.12
Reporter: Jürgen Albert
We have a Component Foo registered under Interface A and B. A also extends B.
A Prototype Component Bar references the Service under its interface A.
When the prototype instance is cleaned up, the DependencyManager of SCR calls unget for the instance Foo 2 times, because it thinks that the one Instance are 2 RefPairs. One under the Interface A and one under B. Unget is now called by the DependencyManager 2 times but the Framework only knows about one usage. In this case the IllegalState Exception is thrown.
The relevant parts of the Stacktrace:
{code}
ERROR: Bundle de.jena.udp.modelling.ui.api [20] ServiceRegistrationImpl: Error ungetting service. (java.lang.IllegalArgumentException)
at org.apache.felix.framework.BundleContextImpl$ServiceObjectsImpl.ungetService(BundleContextImpl.java:564)
at org.apache.felix.scr.impl.helper.ComponentServiceObjectsHelper$ComponentServiceObjectsImpl.ungetService(ComponentServiceObjectsHelper.java:214)
at org.apache.felix.scr.impl.manager.AbstractPrototypeRefPair.doUngetService(AbstractPrototypeRefPair.java:103)
at org.apache.felix.scr.impl.manager.AbstractPrototypeRefPair.ungetServiceObject(AbstractPrototypeRefPair.java:67)
at org.apache.felix.scr.impl.manager.DependencyManager.close(DependencyManager.java:1964)
at org.apache.felix.scr.impl.manager.SingleComponentManager.disposeImplementationObject(SingleComponentManager.java:430)
at org.apache.felix.scr.impl.manager.ServiceFactoryComponentManager.ungetService(ServiceFactoryComponentManager.java:177)
at org.apache.felix.framework.ServiceRegistrationImpl.ungetFactoryUnchecked(ServiceRegistrationImpl.java:393)
at org.apache.felix.framework.ServiceRegistrationImpl.ungetService(ServiceRegistrationImpl.java:288)
at org.apache.felix.framework.ServiceRegistry.ungetService(ServiceRegistry.java:517)
at org.apache.felix.framework.Felix.ungetService(Felix.java:3996)
at org.apache.felix.framework.BundleContextImpl$ServiceObjectsImpl.ungetService(BundleContextImpl.java:562)
at org.eclipse.osgitech.rest.factories.JerseyResourceInstanceFactory.disposeInstance(JerseyResourceInstanceFactory.java:115)
at org.eclipse.osgitech.rest.factories.JerseyResourceInstanceFactory.dispose(JerseyResourceInstanceFactory.java:52)
at org.jvnet.hk2.internal.FactoryCreator.dispose(FactoryCreator.java:153)
at org.jvnet.hk2.internal.SystemDescriptor.dispose(SystemDescriptor.java:521)
at org.glassfish.jersey.inject.hk2.RequestContext.lambda$findOrCreate$0(RequestContext.java:60)
at org.glassfish.jersey.internal.inject.ForeignDescriptorImpl.dispose(ForeignDescriptorImpl.java:63)
at org.glassfish.jersey.inject.hk2.Hk2RequestScope$Instance.remove(Hk2RequestScope.java:126)
at java.base/java.lang.Iterable.forEach(Iterable.java:75)
at org.glassfish.jersey.inject.hk2.Hk2RequestScope$Instance.release(Hk2RequestScope.java:143)
at org.glassfish.jersey.process.internal.RequestScope.release(RequestScope.java:246)
at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:267)
at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:240)
at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:697)
at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:394)
at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:346)
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:357)
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:311)
at org.eclipse.osgitech.rest.runtime.WhiteboardServletContainer.service(WhiteboardServletContainer.java:137)
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:205)
at org.apache.felix.http.base.internal.handler.ServletHandler.handle(ServletHandler.java:128)
at org.apache.felix.http.base.internal.dispatch.InvocationChain.doFilter(InvocationChain.java:86)
at org.apache.felix.http.base.internal.dispatch.Dispatcher$1.doFilter(Dispatcher.java:153)
{code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)