+
+ private static synchronized final ActorSystem getActorSystem(final BundleContext bundleContext,
+ AkkaConfigurationReader configurationReader) {
+ if (actorSystem == null) {
+ // Create an OSGi bundle classloader for actor system
+ BundleDelegatingClassLoader classLoader = new BundleDelegatingClassLoader(bundleContext.getBundle(),
+ Thread.currentThread().getContextClassLoader());
+
+ actorSystem = ActorSystem.create(ACTOR_SYSTEM_NAME,
+ ConfigFactory.load(configurationReader.read()).getConfig(CONFIGURATION_NAME), classLoader);
+ actorSystem.actorOf(Props.create(TerminationMonitor.class), "termination-monitor");
+ }
+
+ return actorSystem;
+ }
+
+ public static synchronized void destroyInstance(DistributedDataStore dataStore){
+ Preconditions.checkNotNull(dataStore, "dataStore should not be null");
+
+ LOG.info("Destroy data store instance of type : {}", dataStore.getActorContext().getDataStoreType());
+
+ if(createdInstances.remove(dataStore)){
+ if(createdInstances.size() == 0){
+ if(actorSystem != null) {
+ actorSystem.shutdown();
+ try {
+ actorSystem.awaitTermination(Duration.create(10, TimeUnit.SECONDS));
+ } catch (Exception e) {
+ LOG.warn("Error awaiting actor termination", e);
+ }
+ actorSystem = null;
+ }
+ }
+ }
+ }
+