[ https://issues.apache.org/jira/browse/ARIES-1940?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16970933#comment-16970933 ]
Christian Schneider commented on ARIES-1940: -------------------------------------------- I think you are right about the cleanup. Do you have an idea how to improve this? > Failure during service export is not properly handled by > RemoteServiceAdminCore > ------------------------------------------------------------------------------- > > Key: ARIES-1940 > URL: https://issues.apache.org/jira/browse/ARIES-1940 > Project: Aries > Issue Type: Bug > Components: Remote Service Admin > Affects Versions: rsa-1.14.0 > Environment: Apache Aries 1.14.0 > Apache Felix Framework 6.0.2 > Reporter: Arnoud Glimmerveen > Assignee: Christian Schneider > Priority: Major > Fix For: rsa-1.15.0 > > Time Spent: 20m > Remaining Estimate: 0h > > When a DistributionProvider throws an Exception from the > DistributionProvider.exportService() method, the RemoteServiceAdminCore > detects this properly and keeps track of this failure by creating a > ExportRegistration instance that references the thrown Exception. > The specification mandates that if a service export failed, the > ExportRegistration should provide access to the thrown Exception (which the > current implementation does) and that the ExportReference of the > ExportRegistration should throw an IllegalStateException. > The current implementation of RemoteServiceAdminCore handles this in an > inconsistent way: > * The ExportRegistration.getExportReference() returns null rather then > throwing the IllegalStateException > * The use of ExportRegistration assumes that there always is an > ExportReference instance. This assumption is wrong in cases that the export > failed. > The latter triggers exceptions such as as the one below; typically triggered > by an event unrelated to the export service failure: > {noformat} > java.lang.NullPointerException > at > org.apache.aries.rsa.core.RemoteServiceAdminCore.removeServiceExports(RemoteServiceAdminCore.java:505) > at > org.apache.aries.rsa.core.RemoteServiceAdminCore$2.serviceChanged(RemoteServiceAdminCore.java:104) > at > org.apache.felix.framework.EventDispatcher.invokeServiceListenerCallback(EventDispatcher.java:990) > at > org.apache.felix.framework.EventDispatcher.fireEventImmediately(EventDispatcher.java:838) > at > org.apache.felix.framework.EventDispatcher.fireServiceEvent(EventDispatcher.java:545) > at > org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:4833) > at org.apache.felix.framework.Felix.access$000(Felix.java:112) > at > org.apache.felix.framework.Felix$1.serviceChanged(Felix.java:434) > at > org.apache.felix.framework.ServiceRegistry.unregisterService(ServiceRegistry.java:170) > at > org.apache.felix.framework.ServiceRegistrationImpl.unregister(ServiceRegistrationImpl.java:145) > ... > {noformat} -- This message was sent by Atlassian Jira (v8.3.4#803005)