Fixing cyclic component dependency issue.
Change-Id: I7951df92b4a81f09f8ec3c1ae376a7d1125655df
Showing
2 changed files
with
27 additions
and
7 deletions
... | @@ -119,15 +119,36 @@ public class DistributedClusterStore | ... | @@ -119,15 +119,36 @@ public class DistributedClusterStore |
119 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | 119 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) |
120 | protected MessagingService messagingService; | 120 | protected MessagingService messagingService; |
121 | 121 | ||
122 | - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | 122 | + // This must be optional to avoid a cyclic dependency |
123 | + @Reference(cardinality = ReferenceCardinality.OPTIONAL_UNARY) | ||
123 | protected ComponentConfigService cfgService; | 124 | protected ComponentConfigService cfgService; |
124 | 125 | ||
125 | - @Activate | 126 | + /** |
126 | - public void activate(ComponentContext context) { | 127 | + * Hook for wiring up optional reference to a service. |
127 | - cfgService.registerProperties(getClass()); | 128 | + * |
129 | + * @param service service being announced | ||
130 | + */ | ||
131 | + protected void bindComponentConfigService(ComponentConfigService service) { | ||
132 | + if (cfgService == null) { | ||
133 | + cfgService = service; | ||
134 | + cfgService.registerProperties(getClass()); | ||
135 | + } | ||
136 | + } | ||
128 | 137 | ||
129 | - modified(context); | 138 | + /** |
139 | + * Hook for unwiring optional reference to a service. | ||
140 | + * | ||
141 | + * @param service service being withdrawn | ||
142 | + */ | ||
143 | + protected void unbindComponentConfigService(ComponentConfigService service) { | ||
144 | + if (cfgService == service) { | ||
145 | + cfgService.unregisterProperties(getClass(), false); | ||
146 | + cfgService = null; | ||
147 | + } | ||
148 | + } | ||
130 | 149 | ||
150 | + @Activate | ||
151 | + public void activate() { | ||
131 | localNode = clusterMetadataService.getLocalNode(); | 152 | localNode = clusterMetadataService.getLocalNode(); |
132 | 153 | ||
133 | messagingService.registerHandler(HEARTBEAT_MESSAGE, | 154 | messagingService.registerHandler(HEARTBEAT_MESSAGE, |
... | @@ -143,7 +164,6 @@ public class DistributedClusterStore | ... | @@ -143,7 +164,6 @@ public class DistributedClusterStore |
143 | 164 | ||
144 | @Deactivate | 165 | @Deactivate |
145 | public void deactivate() { | 166 | public void deactivate() { |
146 | - cfgService.unregisterProperties(getClass(), false); | ||
147 | messagingService.unregisterHandler(HEARTBEAT_MESSAGE); | 167 | messagingService.unregisterHandler(HEARTBEAT_MESSAGE); |
148 | heartBeatSender.shutdownNow(); | 168 | heartBeatSender.shutdownNow(); |
149 | heartBeatMessageHandler.shutdownNow(); | 169 | heartBeatMessageHandler.shutdownNow(); | ... | ... |
... | @@ -29,7 +29,7 @@ public class DistributedClusterStoreTest { | ... | @@ -29,7 +29,7 @@ public class DistributedClusterStoreTest { |
29 | @Before | 29 | @Before |
30 | public void setUp() throws Exception { | 30 | public void setUp() throws Exception { |
31 | distributedClusterStore = new DistributedClusterStore(); | 31 | distributedClusterStore = new DistributedClusterStore(); |
32 | - distributedClusterStore.activate(null); | 32 | + distributedClusterStore.activate(); |
33 | } | 33 | } |
34 | 34 | ||
35 | @After | 35 | @After | ... | ... |
-
Please register or login to post a comment