Fix leak of "this" ref in UserManager constructor 02/30402/2
authorGary Wu <gary.wu1@huawei.com>
Mon, 30 Nov 2015 20:55:52 +0000 (12:55 -0800)
committerGary Wu <gary.wu1@huawei.com>
Mon, 30 Nov 2015 21:00:25 +0000 (13:00 -0800)
UserManager constructor was improperly leaking the
reference to "this" while doing RPC registration
in the constructor.  Refactor to fix this issue.

Change-Id: I5ab9f7bef36aa8f92f8bfe960b3f43e53c638336
Signed-off-by: Gary Wu <gary.wu1@huawei.com>
nemo-impl/src/main/java/org/opendaylight/nemo/user/UserManager.java
nemo-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/nemo/engine/impl/rev151010/NemoEngineModule.java
nemo-impl/src/test/java/org/opendaylight/nemo/user/UserManagerTest.java

index 78f455e8330609eec41e3e9d70db587dd4b8fc98..2d4ca33217ddb1b8c9cdfa9af9dc8de8e6116ff6 100644 (file)
@@ -11,8 +11,6 @@ import static org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.n
 import static org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.CommonRpcResult.ResultCode.Ok; \r
 \r
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;\r
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RpcRegistration;\r
-import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;\r
 import org.opendaylight.nemo.intent.IntentResolutionException;\r
 import org.opendaylight.nemo.intent.IntentResolver;\r
 import org.opendaylight.nemo.intent.computation.VNMappingException;\r
@@ -35,10 +33,9 @@ import java.util.concurrent.Future;
 /**\r
  * Created by z00293636 on 2015/9/7.\r
  */\r
-public class UserManager implements NemoIntentService, AutoCloseable {\r
+public class UserManager implements NemoIntentService {\r
 \r
-    private DataBroker dataBroker;\r
-    private RpcProviderRegistry rpcProviderRegistry;\r
+    private final DataBroker dataBroker;\r
 \r
     private VNSpaceManagement vnSpaceManagement;\r
     private RegisterUser registerUser;\r
@@ -55,15 +52,11 @@ public class UserManager implements NemoIntentService, AutoCloseable {
     Boolean transaction;\r
     Boolean informresolver;\r
 \r
-    private RpcRegistration<NemoIntentService> rpcRegistration;\r
-\r
-    public UserManager(DataBroker dataBroker, RpcProviderRegistry rpcProviderRegistry,\r
-                       IntentResolver intentResolver)\r
+    public UserManager(DataBroker dataBroker0, IntentResolver intentResolver0)\r
     {\r
-        this.dataBroker = dataBroker;\r
-        this.rpcProviderRegistry = rpcProviderRegistry;\r
+        this.dataBroker = dataBroker0;\r
 \r
-        this.intentResolver = intentResolver;\r
+        this.intentResolver = intentResolver0;\r
         vnSpaceManagement = new VNSpaceManagement(dataBroker);\r
         tenantManage = new TenantManage(dataBroker);\r
         aaa = new AAA(tenantManage);\r
@@ -78,8 +71,6 @@ public class UserManager implements NemoIntentService, AutoCloseable {
 \r
         transaction = false;\r
         informresolver = false;\r
-\r
-        rpcRegistration = rpcProviderRegistry.addRpcImplementation(NemoIntentService.class, this);\r
     }\r
 \r
     @Override\r
@@ -245,11 +236,4 @@ public class UserManager implements NemoIntentService, AutoCloseable {
 \r
         return RpcResultBuilder.success(outputBuilder).buildFuture();\r
     }\r
-\r
-    @Override\r
-    public void close() throws Exception {\r
-        if ( null != rpcRegistration ) {\r
-            rpcRegistration.close();\r
-        }\r
-    }\r
 }\r
index 2442f1ca8165da5dd3374cbe9947daceee4283b4..5e213e08e1835874098c462a7e4ff656f783c0f2 100644 (file)
@@ -1,9 +1,11 @@
 package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.impl.rev151010;
 
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RpcRegistration;
 import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
 import org.opendaylight.nemo.intent.IntentResolver;
 import org.opendaylight.nemo.user.UserManager;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.NemoIntentService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -25,24 +27,28 @@ public class NemoEngineModule extends org.opendaylight.yang.gen.v1.urn.opendayli
 
     @Override
     public AutoCloseable createInstance() {
-        DataBroker dataBroker = getDataBrokerDependency();
-        RpcProviderRegistry rpcProviderRegistry = getRpcRegistryDependency();
-
-        final IntentResolver intentResolver = new IntentResolver(dataBroker);
-        final UserManager userManager = new UserManager(dataBroker, rpcProviderRegistry, intentResolver);
+        final DataBroker dataBroker = getDataBrokerDependency();
+        final RpcProviderRegistry rpcProviderRegistry = getRpcRegistryDependency();
 
         final class NemoEngine implements AutoCloseable {
+
+            private final IntentResolver intentResolver = new IntentResolver(dataBroker);
+            private final UserManager userManager = new UserManager(dataBroker, intentResolver);
+            private final RpcRegistration<NemoIntentService> rpcRegistration;
+
+            public NemoEngine() {
+                rpcRegistration = rpcProviderRegistry.addRpcImplementation(NemoIntentService.class, userManager);
+            }
+            
             @Override
             public void close() throws Exception {
+                if (null != rpcRegistration) {
+                    rpcRegistration.close();
+                }
+                
                 if ( null != intentResolver ) {
                     intentResolver.close();
                 }
-
-                if ( null != userManager ) {
-                    userManager.close();
-                }
-
-                return;
             }
         }
 
index 1a8a3f50166dd81e94f420f1a1d23d7a0af0e286..11b0c66cf2a3c14578f976a445629609ae1cdcf9 100644 (file)
@@ -95,11 +95,4 @@ public class UserManagerTest extends TestCase {
         Assert.assertNotNull(userManagerTest);\r
         verify(userManagerTest).structureStyleNemoUpdate(structureStyleNemoUpdateInput);\r
     }\r
-\r
-    @org.junit.Test\r
-    public void testClose() throws Exception {\r
-        userManagerTest.close();\r
-        Assert.assertNotNull(userManagerTest);\r
-        verify(userManagerTest).close();\r
-    }\r
 }
\ No newline at end of file