package com.mozilla.grouperfish.bootstrap;
import java.util.Properties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.bridge.SLF4JBridgeHandler;
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Module;
import com.google.inject.Provider;
import com.mozilla.grouperfish.base.PropertiesTool;
import com.mozilla.grouperfish.batch.api.guice.BatchSystem;
import com.mozilla.grouperfish.rest.api.RestService;
import com.mozilla.grouperfish.rest.jersey.JerseyGuiceRestService;
import com.mozilla.grouperfish.rest.jersey.ResourceConfig;
import com.mozilla.grouperfish.services.api.guice.Services;
/** Entry class to set up the Grouperfish service. */
public class Grouperfish {
public static final int DEFAULT_PORT = 0xF124;
static final Logger log = LoggerFactory.getLogger(Grouperfish.class);
/**
* Starts the Grouperfish engine.
* REST resources will be autodiscovered by Jersey (JAX-RS).
*
* @param arguments not used
* @throws Exception
*/
public static void main(final String[] arguments) throws Exception {
final Properties properties =
PropertiesTool.load(Grouperfish.class, "grouperfish.properties");
new Grouperfish(
new Services(properties),
new BatchSystem(),
new AbstractModule() {
@Override protected void configure() {
bind(Properties.class).toProvider(new Provider<Properties>() {
@Override public Properties get() { return properties; }
}).asEagerSingleton();
}
}
);
}
public Grouperfish(final Module... modules) {
SLF4JBridgeHandler.install();
final Injector injector = Guice.createInjector(modules);
final RestService rest = new JerseyGuiceRestService(injector, ResourceConfig.class);
rest.start();
log.info("Grouperfish started.");
log.debug("Configured port: {}, default: {}",
System.getProperty(JerseyGuiceRestService.PROPERTY_PORT), DEFAULT_PORT);
}
}