-
- 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;
- }
- }
- }
- }
-