Search in sources :

Example 11 with XmlConfiguration

use of org.eclipse.jetty.xml.XmlConfiguration in project jetty.project by eclipse.

the class OverlayedAppProvider method newXmlConfiguration.

/* ------------------------------------------------------------ */
private XmlConfiguration newXmlConfiguration(URL url, Map<String, Object> idMap, Template template, Instance instance) throws SAXException, IOException {
    XmlConfiguration xmlc = new XmlConfiguration(url);
    populateParameters(xmlc.getProperties(), template, instance);
    xmlc.getIdMap().putAll(idMap);
    return xmlc;
}
Also used : XmlConfiguration(org.eclipse.jetty.xml.XmlConfiguration) JettyWebXmlConfiguration(org.eclipse.jetty.webapp.JettyWebXmlConfiguration)

Example 12 with XmlConfiguration

use of org.eclipse.jetty.xml.XmlConfiguration in project jetty.project by eclipse.

the class OverlayedAppProvider method createContextHandler.

/**
     * Create Context Handler.
     * <p>
     * Callback from the deployment manager to create a context handler instance.
     * @see org.eclipse.jetty.deploy.AppProvider#createContextHandler(org.eclipse.jetty.deploy.App)
     */
public synchronized ContextHandler createContextHandler(App app) throws Exception {
    final OverlayedApp overlayed = (OverlayedApp) app;
    final String origin = overlayed.getOriginId();
    final Instance instance = overlayed.getInstance();
    final Template template = instance.getTemplate();
    final Webapp webapp = template.getWebapp();
    final Node node = _node;
    // remember the original loader
    ClassLoader orig_loader = Thread.currentThread().getContextClassLoader();
    try {
        // Look for existing shared resources
        String key = (node == null ? "" : node.getLoadedKey()) + template.getLoadedKey() + (webapp == null ? "" : webapp.getLoadedKey());
        instance.setSharedKey(key);
        TemplateContext shared = _shared.get(key);
        // Create shared resourced
        if (shared == null)
            shared = createTemplateContext(key, webapp, template, node, orig_loader);
        // Build the instance lib loader
        ClassLoader shared_loader = shared.getWebappLoader() != null ? shared.getWebappLoader() : (shared.getLibLoader() != null ? shared.getLibLoader() : orig_loader);
        ClassLoader loader = shared_loader;
        Resource instance_lib = instance.getResource(LIB);
        if (instance_lib.exists()) {
            List<URL> libs = new ArrayList<URL>();
            for (String jar : instance_lib.list()) {
                if (!jar.toLowerCase(Locale.ENGLISH).endsWith(".jar"))
                    continue;
                libs.add(instance_lib.addPath(jar).getURL());
            }
            __log.debug("{}: libs={}", origin, libs);
            loader = URLClassLoader.newInstance(libs.toArray(new URL[] {}), loader);
        }
        // set the thread loader
        Thread.currentThread().setContextClassLoader(loader);
        // Create properties to be shared by overlay.xmls
        Map<String, Object> idMap = new HashMap<String, Object>();
        idMap.putAll(shared.getIdMap());
        idMap.put(_serverID, getDeploymentManager().getServer());
        // Create the instance context for the template
        ContextHandler context = null;
        Resource template_context_xml = template.getResource(OVERLAY_XML);
        if (template_context_xml.exists()) {
            __log.debug("{}: overlay.xml={}", origin, template_context_xml);
            XmlConfiguration xmlc = newXmlConfiguration(template_context_xml.getURL(), idMap, template, instance);
            context = (ContextHandler) xmlc.configure();
            idMap = xmlc.getIdMap();
        } else if (webapp == null)
            // If there is no webapp, this is a plain context
            context = new ContextHandler();
        else
            // It is a webapp context
            context = new WebAppContext();
        // Set the resource base
        final Resource instance_webapp = instance.getResource(WEBAPP);
        if (instance_webapp.exists()) {
            context.setBaseResource(new ResourceCollection(instance_webapp, shared.getBaseResource()));
            // Create the resource cache
            ResourceCache cache = new ResourceCache(shared.getResourceCache(), instance_webapp, context.getMimeTypes(), false, false);
            context.setAttribute(ResourceCache.class.getCanonicalName(), cache);
        } else {
            context.setBaseResource(shared.getBaseResource());
            context.setAttribute(ResourceCache.class.getCanonicalName(), shared.getResourceCache());
        }
        __log.debug("{}: baseResource={}", origin, context.getResourceBase());
        // Set the shared session scavenger timer
        context.setAttribute("org.eclipse.jetty.server.session.timer", _sessionScavenger);
        // Apply any node or instance overlay.xml
        for (Resource context_xml : getLayeredResources(OVERLAY_XML, node, instance)) {
            __log.debug("{}: overlay.xml={}", origin, context_xml);
            XmlConfiguration xmlc = newXmlConfiguration(context_xml.getURL(), idMap, template, instance);
            xmlc.getIdMap().put("Cache", context.getAttribute(ResourceCache.class.getCanonicalName()));
            xmlc.configure(context);
            idMap = xmlc.getIdMap();
        }
        // Is it a webapp?
        if (context instanceof WebAppContext) {
            final WebAppContext webappcontext = (WebAppContext) context;
            if (Arrays.asList(((WebAppContext) context).getServerClasses()).toString().equals(Arrays.asList(WebAppContext.__dftServerClasses).toString())) {
                __log.debug("clear server classes");
                webappcontext.setServerClasses(null);
            }
            // set classloader
            webappcontext.setCopyWebDir(false);
            webappcontext.setCopyWebInf(false);
            webappcontext.setExtractWAR(false);
            if (instance_webapp.exists()) {
                final Resource classes = instance_webapp.addPath("WEB-INF/classes");
                final Resource lib = instance_webapp.addPath("WEB-INF/lib");
                if (classes.exists() || lib.exists()) {
                    final AtomicBoolean locked = new AtomicBoolean(false);
                    WebAppClassLoader webapp_loader = new WebAppClassLoader(loader, webappcontext) {

                        @Override
                        public void addClassPath(Resource resource) throws IOException {
                            if (!locked.get())
                                super.addClassPath(resource);
                        }

                        @Override
                        public void addClassPath(String classPath) throws IOException {
                            if (!locked.get())
                                super.addClassPath(classPath);
                        }

                        @Override
                        public void addJars(Resource lib) {
                            if (!locked.get())
                                super.addJars(lib);
                        }
                    };
                    if (classes.exists())
                        webapp_loader.addClassPath(classes);
                    if (lib.exists())
                        webapp_loader.addJars(lib);
                    locked.set(true);
                    loader = webapp_loader;
                }
            }
            // Make sure loader is unique for JNDI
            if (loader == shared_loader)
                loader = new URLClassLoader(new URL[] {}, shared_loader);
            // add default descriptor
            List<Resource> webdefaults = getLayeredResources(WEB_DEFAULT_XML, instance, node, template);
            if (webdefaults.size() > 0) {
                Resource webdefault = webdefaults.get(0);
                __log.debug("{}: defaultweb={}", origin, webdefault);
                webappcontext.setDefaultsDescriptor(webdefault.toString());
            }
            // add overlay descriptors
            for (Resource override : getLayeredResources(WEB_FRAGMENT_XML, template, node, instance)) {
                __log.debug("{}: web override={}", origin, override);
                webappcontext.addOverrideDescriptor(override.toString());
            }
        }
        context.setClassLoader(loader);
        __log.debug("{}: baseResource={}", origin, context.getBaseResource());
        Resource jetty_web_xml = context.getResource("/WEB-INF/" + JettyWebXmlConfiguration.JETTY_WEB_XML);
        if (jetty_web_xml != null && jetty_web_xml.exists())
            context.setAttribute(JettyWebXmlConfiguration.XML_CONFIGURATION, newXmlConfiguration(jetty_web_xml.getURL(), idMap, template, instance));
        // Add listener to expand parameters from descriptors before other listeners execute
        Map<String, String> params = new HashMap<String, String>();
        populateParameters(params, template, instance);
        context.addEventListener(new ParameterExpander(params, context));
        System.err.println("created:\n" + context.dump());
        return context;
    } finally {
        Thread.currentThread().setContextClassLoader(orig_loader);
    }
}
Also used : HashMap(java.util.HashMap) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) ArrayList(java.util.ArrayList) XmlConfiguration(org.eclipse.jetty.xml.XmlConfiguration) JettyWebXmlConfiguration(org.eclipse.jetty.webapp.JettyWebXmlConfiguration) URL(java.net.URL) ContextHandler(org.eclipse.jetty.server.handler.ContextHandler) WebAppContext(org.eclipse.jetty.webapp.WebAppContext) URLClassLoader(java.net.URLClassLoader) WebAppClassLoader(org.eclipse.jetty.webapp.WebAppClassLoader) ResourceCache(org.eclipse.jetty.server.ResourceCache) JarResource(org.eclipse.jetty.util.resource.JarResource) Resource(org.eclipse.jetty.util.resource.Resource) WebAppClassLoader(org.eclipse.jetty.webapp.WebAppClassLoader) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) URLClassLoader(java.net.URLClassLoader) ResourceCollection(org.eclipse.jetty.util.resource.ResourceCollection)

Example 13 with XmlConfiguration

use of org.eclipse.jetty.xml.XmlConfiguration in project jetty.project by eclipse.

the class ServerInstanceWrapper method configure.

/* ------------------------------------------------------------ */
public static Server configure(Server server, List<URL> jettyConfigurations, Dictionary props) throws Exception {
    if (jettyConfigurations == null || jettyConfigurations.isEmpty()) {
        return server;
    }
    Map<String, Object> id_map = new HashMap<String, Object>();
    if (server != null) {
        //Put in a mapping for the id "Server" and the name of the server as the instance being configured
        id_map.put("Server", server);
        id_map.put((String) props.get(OSGiServerConstants.MANAGED_JETTY_SERVER_NAME), server);
    }
    Map<String, String> properties = new HashMap<String, String>();
    if (props != null) {
        Enumeration<Object> en = props.keys();
        while (en.hasMoreElements()) {
            Object key = en.nextElement();
            Object value = props.get(key);
            String keyStr = String.valueOf(key);
            String valStr = String.valueOf(value);
            properties.put(keyStr, valStr);
            if (server != null)
                server.setAttribute(keyStr, valStr);
        }
    }
    for (URL jettyConfiguration : jettyConfigurations) {
        try (Resource r = Resource.newResource(jettyConfiguration)) {
            // Execute a Jetty configuration file
            if (!r.exists()) {
                LOG.warn("File does not exist " + r);
                throw new IllegalStateException("No such jetty server config file: " + r);
            }
            XmlConfiguration config = new XmlConfiguration(r.getURL());
            config.getIdMap().putAll(id_map);
            config.getProperties().putAll(properties);
            // #334062 compute the URL of the folder that contains the
            // conf file and set it as a property so we can compute relative paths
            // from it.
            String urlPath = jettyConfiguration.toString();
            int lastSlash = urlPath.lastIndexOf('/');
            if (lastSlash > 4) {
                urlPath = urlPath.substring(0, lastSlash);
                config.getProperties().put(PROPERTY_THIS_JETTY_XML_FOLDER_URL, urlPath);
            }
            Object o = config.configure();
            if (server == null)
                server = (Server) o;
            id_map = config.getIdMap();
        } catch (Exception e) {
            LOG.warn("Configuration error in " + jettyConfiguration);
            throw e;
        }
    }
    return server;
}
Also used : Server(org.eclipse.jetty.server.Server) HashMap(java.util.HashMap) Resource(org.eclipse.jetty.util.resource.Resource) XmlConfiguration(org.eclipse.jetty.xml.XmlConfiguration) URL(java.net.URL)

Example 14 with XmlConfiguration

use of org.eclipse.jetty.xml.XmlConfiguration in project jena by apache.

the class JettyFuseki method configServer.

private void configServer(String jettyConfig) {
    try {
        serverLog.info("Jetty server config file = " + jettyConfig);
        server = new Server();
        XmlConfiguration configuration = new XmlConfiguration(new FileInputStream(jettyConfig));
        configuration.configure(server);
        serverConnector = (ServerConnector) server.getConnectors()[0];
    } catch (Exception ex) {
        serverLog.error("SPARQLServer: Failed to configure server: " + ex.getMessage(), ex);
        throw new FusekiException("Failed to configure a server using configuration file '" + jettyConfig + "'");
    }
}
Also used : Server(org.eclipse.jetty.server.Server) FusekiException(org.apache.jena.fuseki.FusekiException) XmlConfiguration(org.eclipse.jetty.xml.XmlConfiguration) FileInputStream(java.io.FileInputStream) FusekiException(org.apache.jena.fuseki.FusekiException)

Example 15 with XmlConfiguration

use of org.eclipse.jetty.xml.XmlConfiguration in project opennms by OpenNMS.

the class JettyServer method onInit.

/**
 * {@inheritDoc}
 */
@Override
protected void onInit() {
    final File jettyXml = new File(System.getProperty("opennms.home") + File.separator + "etc" + File.separator + "jetty.xml");
    InputStream jettyXmlStream = null;
    try {
        m_server = new Server();
        // Add JMX MBeans for the Jetty server
        MBeanContainer mbeanContainer = new MBeanContainer(ManagementFactory.getPlatformMBeanServer());
        m_server.addEventListener(mbeanContainer);
        m_server.addBean(mbeanContainer);
        if (jettyXml.exists()) {
            jettyXmlStream = jettyXml.toURI().toURL().openStream();
        } else {
            jettyXmlStream = getClass().getResourceAsStream("jetty.xml");
        }
        if (jettyXmlStream == null) {
            throw new RuntimeException("Unable to locate jetty.xml in the classpath!");
        }
        final XmlConfiguration xmlConfiguration = new XmlConfiguration(jettyXmlStream);
        xmlConfiguration.configure(m_server);
    } catch (final Exception ioe) {
        throw new RuntimeException(ioe);
    }
    m_server.setStopAtShutdown(true);
}
Also used : Server(org.eclipse.jetty.server.Server) InputStream(java.io.InputStream) MBeanContainer(org.eclipse.jetty.jmx.MBeanContainer) XmlConfiguration(org.eclipse.jetty.xml.XmlConfiguration) File(java.io.File)

Aggregations

XmlConfiguration (org.eclipse.jetty.xml.XmlConfiguration)43 Server (org.eclipse.jetty.server.Server)24 Resource (org.eclipse.jetty.util.resource.Resource)18 URL (java.net.URL)12 File (java.io.File)9 IOException (java.io.IOException)9 HashMap (java.util.HashMap)6 Test (org.junit.Test)6 InputStream (java.io.InputStream)5 ArrayList (java.util.ArrayList)5 Handler (org.eclipse.jetty.server.Handler)5 ServletContextHandler (org.eclipse.jetty.servlet.ServletContextHandler)5 FileInputStream (java.io.FileInputStream)4 URLClassLoader (java.net.URLClassLoader)4 ContextHandler (org.eclipse.jetty.server.handler.ContextHandler)4 JettyWebXmlConfiguration (org.eclipse.jetty.webapp.JettyWebXmlConfiguration)4 WebAppContext (org.eclipse.jetty.webapp.WebAppContext)4 FileNotFoundException (java.io.FileNotFoundException)3 HttpURLConnection (java.net.HttpURLConnection)3 MalformedURLException (java.net.MalformedURLException)3