--- dao/DaoAdresseService/src/dk/daoas/daoadresseservice/ContextListener.java 2015/02/23 12:30:41 2337 +++ dao/DaoAdresseService/src/main/java/dk/daoas/daoadresseservice/ContextListener.java 2015/07/14 08:32:56 2605 @@ -1,10 +1,28 @@ package dk.daoas.daoadresseservice; +import java.io.FileReader; +import java.io.IOException; +import java.util.Properties; + import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; +import javax.servlet.ServletRegistration; import javax.servlet.annotation.WebListener; +import org.apache.commons.lang3.SystemUtils; + +import com.jcabi.manifests.Manifests; +import com.jcabi.manifests.ServletMfs; + +import dk.daoas.daoadresseservice.admin.ServiceConfig; +import dk.thoerup.circuitbreaker.CircuitBreaker; +import dk.thoerup.circuitbreaker.CircuitBreakerManager; +import dk.thoerup.circuitbreaker.statistics.AccountingStatistics; +import dk.thoerup.circuitbreaker.web.CircuitBreakerServletBase; +import dk.thoerup.webconfig.ConfigServlet; +import dk.thoerup.webconfig.PropertiesConfigLoader; + /** * Application Lifecycle Listener implementation class ContextListener * @@ -12,7 +30,7 @@ @WebListener public class ContextListener implements ServletContextListener { - + public ContextListener() { @@ -23,17 +41,99 @@ // TODO Auto-generated method stub } + @SuppressWarnings("deprecation") + @Override public void contextInitialized(ServletContextEvent ctxtEvt) { System.out.println("Starting DAO Context"); + + ServletContext ctxt = ctxtEvt.getServletContext(); - DataLoader load = new DataLoader(ctxt); + + ServiceConfig conf = null; + try { + conf = initConfig(ctxt); + } catch (IOException e) { + System.out.println("Error loading config " + e.getMessage()); + throw new RuntimeException(e); + } + + initDataLoader(ctxt, conf); + + initCircuitBreakers(ctxt, conf); + + + try { + Manifests.DEFAULT.append(new ServletMfs(ctxt)); + } catch (Exception e) { + System.out.println("Error loading config " + e.getMessage()); + } + + System.out.println("DAO Context done"); + } + + + + + private ServiceConfig initConfig(ServletContext ctxt) throws IOException { + + final String CONF_FILE_NAME = "daoadresseservice.conf"; + + + ServiceConfig conf = new ServiceConfig(); + + String file = null; + if (SystemUtils.IS_OS_WINDOWS) { + file = "C:\\" + CONF_FILE_NAME; + } else { + file = "/etc/" + CONF_FILE_NAME; + } + + Properties propsFile = new Properties(); + try (FileReader reader = new FileReader(file) ) { + propsFile.load(reader); + } + + + new PropertiesConfigLoader(propsFile).loadConfig(conf); + + + ctxt.setAttribute("config", conf); + + // ///////////////////////////////////// + ConfigServlet servlet = new ConfigServlet(); + servlet.setConfigObject( conf ); + ServletRegistration.Dynamic dynconf = ctxt.addServlet("webconfig", servlet ); + dynconf.addMapping("/ConfigServlet"); + + return conf; + } + + private void initDataLoader(ServletContext ctxt, ServiceConfig conf) { + DataLoader load = new DataLoader(ctxt,conf); ctxt.setAttribute("dataloader", load); load.doLoad(); + } + + private void initCircuitBreakers(ServletContext ctxt, ServiceConfig conf) { + CircuitBreakerManager mgr = CircuitBreakerManager.getManager(); + CircuitBreaker osm = new CircuitBreaker("osm", conf); + osm.setStatistics( new AccountingStatistics() ); + mgr.addCircuitBreaker( osm ); + CircuitBreaker google = new CircuitBreaker("google", conf); + google.setStatistics( new AccountingStatistics() ); + mgr.addCircuitBreaker( google ); - System.out.println("DAO Context done"); + + // + CircuitBreakerServletBase servlet = new CircuitBreakerServletBase(); + ServletRegistration.Dynamic dynconf = ctxt.addServlet("circuitbreaker", servlet); + dynconf.addMapping("/CircuitBreakerServlet"); + dynconf.setInitParameter("readonly", "1"); + } + }