package no.brodwall.web.integration; import javax.servlet.ServletContext; import javax.sql.DataSource; import org.mortbay.jetty.Server; import org.mortbay.jetty.plus.naming.NamingEntry; import org.mortbay.jetty.plus.naming.Resource; import org.mortbay.jetty.webapp.WebAppContext; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; public class JettyTestServer { private Server server; private String contextName; public JettyTestServer(DataSource dataSource) { this(0, "/web-demo", dataSource); } public JettyTestServer(int port, String contextName, DataSource dataSource) { // Port 0 means "assign arbitrarily port number" this.contextName = contextName; server = new Server(port); WebAppContext webAppContext = new WebAppContext("src/main/webapp", contextName); //webAppContext.setParentLoaderPriority(true); webAppContext.setConfigurationClasses(new String[] { // All except org.mortbay.jetty.plus.webapp.EnvConfiguration are // default. We need to add org.mortbay.jetty.plus.webapp.EnvConfiguration // to register resource-ref entries "org.mortbay.jetty.webapp.WebInfConfiguration", "org.mortbay.jetty.plus.webapp.EnvConfiguration", "org.mortbay.jetty.plus.webapp.Configuration", "org.mortbay.jetty.webapp.JettyWebXmlConfiguration", "org.mortbay.jetty.webapp.TagLibConfiguration" }); server.addHandler(webAppContext); // Required by the shared applicationContext.xml try { NamingEntry.setScope(NamingEntry.SCOPE_GLOBAL); new Resource("jdbc/primaryDs", dataSource); server.start(); } catch (Exception e) { throw new RuntimeException("Jetty startup problems", e); } } public String getBaseUrl() { // getLocalPort returns the port that was actually assigned int actualPort = server.getConnectors()[0].getLocalPort(); return "http://localhost:" + actualPort + contextName; } public Object getWebContextBean(String beanName) { WebAppContext jettyWebAppContext = (WebAppContext) server.getHandler(); ServletContext servletContext = jettyWebAppContext.getServletHandler().getServletContext(); WebApplicationContext springWebAppContext = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext); return springWebAppContext.getBean(beanName); } }