예제 #1
0
  @Override
  public void run() {
    if (log.isInfoEnabled()) {
      log.info("Cartridge agent started");
    }

    eventListenerns = new CartridgeAgentEventListeners();

    validateRequiredSystemProperties();
    if (log.isInfoEnabled()) {
      log.info("Cartridge agent validated system properties done");
    }

    // Start topology event receiver thread
    registerTopologyEventListeners();
    if (log.isInfoEnabled()) {
      log.info("Cartridge agent registerTopologyEventListeners done");
    }

    if (log.isInfoEnabled()) {
      log.info("Waiting for CompleteTopologyEvent..");
    }

    ExtensionUtils.waitForCompleteTopology();
    if (log.isInfoEnabled()) {
      log.info("CompleteTopologyEvent received.");
    }

    // wait till the member spawned event
    while (!CartridgeAgentConfiguration.getInstance().isInitialized()) {
      try {
        if (log.isDebugEnabled()) {
          log.info("Waiting for Cartridge Agent to be initialized...");
        }
        Thread.sleep(1000);
      } catch (InterruptedException ignore) {
      }
    }

    if (log.isInfoEnabled()) {
      log.info("Cartridge agent initialized done");
    }

    // Start instance notifier listener thread
    registerInstanceNotifierEventListeners();
    if (log.isInfoEnabled()) {
      log.info("Cartridge agent registerInstanceNotifierEventListeners done");
    }

    // Start tenant event receiver thread
    /*
    registerTenantEventListeners();
    if (log.isInfoEnabled()) {
        log.info("Cartridge agent registerTenantEventListeners done");
    } */

    // Start application event receiver thread
    registerApplicationEventListeners();
    if (log.isInfoEnabled()) {
      log.info("Cartridge agent registering all event listeners ... done");
    }

    // Execute instance started shell script
    extensionHandler.onInstanceStartedEvent();
    if (log.isInfoEnabled()) {
      log.info("Cartridge agent onInstanceStartedEvent done");
    }

    // Publish instance started event
    CartridgeAgentEventPublisher.publishInstanceStartedEvent();

    // Execute start servers extension
    try {
      extensionHandler.startServerExtension();
    } catch (Exception e) {
      if (log.isErrorEnabled()) {
        log.error("Error processing start servers event", e);
      }
    }

    if (log.isInfoEnabled()) {
      log.info("Cartridge agent startServerExtension done");
    }

    // Check repo url
    String repoUrl = CartridgeAgentConfiguration.getInstance().getRepoUrl();
    if (log.isInfoEnabled()) {
      log.info("Cartridge agent getRepoUrl done");
    }

    if ("null".equals(repoUrl) || StringUtils.isBlank(repoUrl)) {
      if (log.isInfoEnabled()) {
        log.info("No artifact repository found. Publishing InstanceActivatedEvent.");
      }

      // Publish instance activated event
      CartridgeAgentEventPublisher.publishInstanceActivatedEvent();
      // Execute instance activated shell script
      extensionHandler.onInstanceActivatedEvent();
      if (log.isInfoEnabled()) {
        log.info("Cartridge agent onInstanceActivatedEvent done");
      }
    } else {
      if (log.isInfoEnabled()) {
        log.info(
            "Artifact repository found. Waiting for ArtifactUpdatedEvent to commence cloning.");
      }
    }

    String persistenceMappingsPayload =
        CartridgeAgentConfiguration.getInstance().getPersistenceMappings();
    if (persistenceMappingsPayload != null) {
      extensionHandler.volumeMountExtension(persistenceMappingsPayload);
    }

    // start log publishing
    LogPublisherManager logPublisherManager = new LogPublisherManager();
    publishLogs(logPublisherManager);

    // Keep the thread live until terminated
    while (!terminated) {
      try {
        Thread.sleep(1000);
      } catch (InterruptedException ignore) {
      }
    }

    logPublisherManager.stop();
  }