public static void check() {
   for (String ctx : PersistenceContexts.list()) {
     try {
       DatabaseClusterMBean db = lookup(ctx, TimeUnit.SECONDS.toMillis(5));
       for (String host : db.getactiveDatabases()) {
         Host hostEntry = Hosts.lookup(host);
         if (hostEntry == null) {
           disable(host);
         } else if (!Hosts.contains(hostEntry.getGroupsId())) {
           Hosts.remove(host); // GRZE: this will clean up group state and de-activate db.
         }
       }
     } catch (NoSuchElementException ex) {
       LOG.error(ex, ex);
     }
     return;
   }
 }
 private static Set<String> listDatabases(
     final String clusterName, final boolean active, final Optional<Integer> weight) {
   final Set<String> databases = Sets.newLinkedHashSet();
   try {
     final DatabaseClusterMBean cluster = lookup(clusterName, 0);
     final Iterable<String> databaseIds =
         active ? cluster.getactiveDatabases() : cluster.getinactiveDatabases();
     for (final String databaseId : databaseIds)
       try {
         final DriverDatabaseMBean database = lookupDatabase(clusterName, databaseId);
         if (!weight.isPresent() || database.getweight() == weight.get()) {
           databases.add(databaseId);
         }
       } catch (NoSuchElementException e) {
         // ignore database
       }
   } catch (NoSuchElementException e) {
     // no databases
   } catch (Exception e) {
     LOG.error(e, e);
   }
   return databases;
 }