Arneh Jain created SLING-7687:
---------------------------------
Summary: Some Adapters don't work during service deactivation
Key: SLING-7687
URL: https://issues.apache.org/jira/browse/SLING-7687
Project: Sling
Issue Type: Bug
Components: Apache Sling Testing Rules
Affects Versions: Testing Sling Mock 2.2.18
Reporter: Arneh Jain
Attachments: patch.txt
If we have an AdapterFactory and a Service registered by the following code:
{code:java}
// code placeholder
SlingContext context = new SlingContext();
context.registerInjectActivateService(new TestAdapterFactory());
context.registerInjectActivateService(new TestService());{code}
it turns out that adapting a Resource to another Class (defined by the
TestAdapterFactory) returns null when done in the deactivate method of the
TestService, i.e.
{code:java}
resource.adaptTo(TestClass.class) // returns null in the deactivate method.
resource.adaptTo(TestClass.class) // works correctly in any other method.{code}
Reason:
It looks like the registered adapters are cleaned up before registered services
are deactivated in the tearDown method of SlingContextImpl.
{code:java}
// SlingContextImpl
void tearDown() {
...
MockSling.clearAdapterManagerBundleContext();
...
super.tearDown(); // calls the deactivate of the registered services.
}{code}
Cleaning up the registered adapters after deactivating the services seems to
solve the issue.
{code:java}
// SlingContextImpl
void tearDown() {
...
super.tearDown();
MockSling.clearAdapterManagerBundleContext();
}
{code}
but I'm not sure about any other potential impacts of this change (attached
patch).
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)