@Override public void run(PushServerConfiguration config, Environment environment) throws Exception { SharedMetricRegistries.add(Constants.METRICS_NAME, environment.metrics()); environment.getObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); JedisPool redisClient = new RedisClientFactory(config.getRedisConfiguration()).getRedisClientPool(); ServerAuthenticator serverAuthenticator = new ServerAuthenticator(config.getAuthenticationConfiguration()); List<Server> servers = config.getAuthenticationConfiguration().getServers(); UnregisteredQueue apnQueue = new UnregisteredQueue(redisClient, environment.getObjectMapper(), servers, "apn"); UnregisteredQueue gcmQueue = new UnregisteredQueue(redisClient, environment.getObjectMapper(), servers, "gcm"); APNSender apnSender = initializeApnSender(redisClient, apnQueue, config.getApnConfiguration()); GCMSender gcmSender = initializeGcmSender(gcmQueue, config.getGcmConfiguration()); environment.lifecycle().manage(apnSender); environment.lifecycle().manage(gcmSender); environment.jersey().register(AuthFactory.binder(new BasicAuthFactory<>(serverAuthenticator, "PushServer", Server.class))); environment.jersey().register(new PushController(apnSender, gcmSender)); environment.jersey().register(new FeedbackController(gcmQueue, apnQueue)); environment.healthChecks().register("Redis", new RedisHealthCheck(redisClient)); }