package dials.dropwizard.server;
import dials.DialsSystemInitializer;
import dials.dropwizard.server.resources.DialsFeatureStateResource;
import dials.execution.ExecutionContextRecorder;
import dials.execution.LoggingBasedExecutionContextRecorder;
import io.dropwizard.Application;
import io.dropwizard.setup.Bootstrap;
import io.dropwizard.setup.Environment;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import java.util.HashMap;
import java.util.Map;
public class DialsApplication extends Application<DialsApplicationConfiguration> {
public static void main(String[] args) throws Exception {
new DialsApplication().run(args);
}
@Override
public void initialize(Bootstrap bootstrap) {
}
@Override
public void run(DialsApplicationConfiguration configuration, Environment environment) throws Exception {
initializeDials(getEntityManager(configuration));
environment.jersey().register(new DialsFeatureStateResource());
}
private void initializeDials(EntityManagerFactory entityManagerFactory) throws ClassNotFoundException {
ExecutionContextRecorder contextRecorder =
new LoggingBasedExecutionContextRecorder(LoggingBasedExecutionContextRecorder.INFO);
DialsSystemInitializer.getInstance().withEntityManagerFactory(entityManagerFactory)
.withExecutionContextRecorder(contextRecorder).withFailFastEnabled(true).initializeSystem();
}
private EntityManagerFactory getEntityManager(DialsApplicationConfiguration configuration) {
Map<String, String> emfProperties = new HashMap<>();
emfProperties.put("javax.persistence.jdbc.driver", configuration.getDataSourceFactory().getDriverClass());
emfProperties.put("javax.persistence.jdbc.url", configuration.getDataSourceFactory().getUrl());
emfProperties.put("javax.persistence.jdbc.user", configuration.getDataSourceFactory().getUser());
emfProperties.put("javax.persistence.jdbc.password", configuration.getDataSourceFactory().getPassword());
return Persistence.createEntityManagerFactory("dialsManager", emfProperties);
}
}