Esempio n. 1
0
  private DatabaseHandler(final RemoteEventBus eventBus) {
    this.eventBus = eventBus;

    delay =
        ServerStorage.getLocalStorageIfSupported()
                .getInt("APVS.database.updateDelay", DEFAULT_MAX_UPDATE_DELAY)
            * SECONDS;

    log.info("Using update delay: " + delay + " ms");

    database = Database.getInstance();

    RequestRemoteEvent.register(
        this,
        eventBus,
        new RequestRemoteEvent.Handler() {

          @Override
          public void onRequestEvent(RequestRemoteEvent event) {
            String type = event.getRequestedClassName();

            if (type.equals(InterventionMapChangedRemoteEvent.class.getName())) {
              log.info("Request to DB " + event);
              InterventionMapChangedRemoteEvent.fire(this, eventBus, interventions);
            } else if (type.equals(ConnectionStatusChangedRemoteEvent.class.getName())) {
              ConnectionStatusChangedRemoteEvent.fire(
                  eventBus, ConnectionType.databaseConnect, connected, connectedCause);
              ConnectionStatusChangedRemoteEvent.fire(
                  eventBus, ConnectionType.databaseUpdate, updated, updatedCause);
            }
          }
        });

    try {
      checkUpdateAndConnection();
      readInterventions();
    } catch (HibernateException e1) {
      log.warn("Problem", e1);
    }

    ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
    executor.scheduleWithFixedDelay(
        new Runnable() {

          // ScheduledFuture<?> watchdog;

          @Override
          public void run() {
            try {
              if (!checkUpdateAndConnection()) {
                log.warn("DB " + updatedCause);
              } else if (!isConnected()) {
                log.warn("DB " + connectedCause);
              }
            } catch (HibernateException e) {
              log.warn("Could not update or reach DB: ", e);
            }
          }
        },
        0,
        30,
        TimeUnit.SECONDS);
  }