alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

Jetty example source code file (EnvConfiguration.java)

This example Jetty source code file (EnvConfiguration.java) is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Java - Jetty tags/keywords

context, context, envconfiguration, exception, exception, finding, finding, iterator, list, naming, namingexception, namingexception, net, network, url, util, webappcontext, xmlconfiguration

The Jetty EnvConfiguration.java source code

// ========================================================================
// $Id: EnvConfiguration.java 1540 2007-01-19 12:24:10Z janb $
// Copyright 1999-2004 Mort Bay Consulting Pty. Ltd.
// ------------------------------------------------------------------------
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at 
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// ========================================================================

package org.mortbay.jetty.plus.webapp;

import java.net.URL;
import java.util.Iterator;
import java.util.List;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import org.mortbay.jetty.plus.naming.EnvEntry;
import org.mortbay.jetty.plus.naming.NamingEntry;
import org.mortbay.jetty.plus.naming.Resource;
import org.mortbay.jetty.plus.naming.Transaction;
import org.mortbay.jetty.webapp.Configuration;
import org.mortbay.jetty.webapp.WebAppContext;
import org.mortbay.log.Log;

import org.mortbay.xml.XmlConfiguration;

/**
 * EnvConfiguration
 *
 *
 */
public class EnvConfiguration implements Configuration
{
    private WebAppContext webAppContext;
    private Context compCtx;
    private URL jettyEnvXmlUrl;

    protected void createEnvContext ()
    throws NamingException
    {
        Context context = new InitialContext();
        compCtx =  (Context)context.lookup ("java:comp");
        Context envCtx = compCtx.createSubcontext("env");
        if (Log.isDebugEnabled())
            Log.debug("Created java:comp/env for webapp "+getWebAppContext().getContextPath());
    }
    
    
    /** 
     * @see org.mortbay.jetty.webapp.Configuration#setWebAppContext(org.mortbay.jetty.webapp.WebAppContext)
     * @param context
     */
    public void setWebAppContext(WebAppContext context)
    {
        this.webAppContext = context;
    }

    public void setJettyEnvXml (URL url)
    {
        this.jettyEnvXmlUrl = url;
    }
    
    /** 
     * @see org.mortbay.jetty.webapp.Configuration#getWebAppContext()
     */
    public WebAppContext getWebAppContext()
    {
        return webAppContext;
    }

    /** 
     * @see org.mortbay.jetty.webapp.Configuration#configureClassLoader()
     * @throws Exception
     */
    public void configureClassLoader() throws Exception
    {
    }

    /** 
     * @see org.mortbay.jetty.webapp.Configuration#configureDefaults()
     * @throws Exception
     */
    public void configureDefaults() throws Exception
    {
    }

    /** 
     * @see org.mortbay.jetty.webapp.Configuration#configureWebApp()
     * @throws Exception
     */
    public void configureWebApp() throws Exception
    {
        //create a java:comp/env
        createEnvContext();
        
        //add java:comp/env entries for any globally defined EnvEntries
        bindGlobalEnvEntries();
        
        //set up java:comp/env as the Context in which to bind directly
        //the entries in jetty-env.xml
        NamingEntry.setScope(NamingEntry.SCOPE_LOCAL);
        
        //check to see if an explicit file has been set, if not,
        //look in WEB-INF/jetty-env.xml
        if (jettyEnvXmlUrl == null)
        {
            
            //look for a file called WEB-INF/jetty-env.xml
            //and process it if it exists
            org.mortbay.resource.Resource web_inf = getWebAppContext().getWebInf();
            if(web_inf!=null && web_inf.isDirectory())
            {
                org.mortbay.resource.Resource jettyEnv = web_inf.addPath("jetty-env.xml");
                if(jettyEnv.exists())
                {
                    jettyEnvXmlUrl = jettyEnv.getURL();
                }
            }
        }
        if (jettyEnvXmlUrl != null)
        {
            XmlConfiguration configuration = new XmlConfiguration(jettyEnvXmlUrl);
            configuration.configure(getWebAppContext());
        }

    }

    /** 
     * Remove all jndi setup
     * @see org.mortbay.jetty.webapp.Configuration#deconfigureWebApp()
     * @throws Exception
     */
    public void deconfigureWebApp() throws Exception
    {
        //get rid of any bindings only defined for the webapp
        ClassLoader oldLoader = Thread.currentThread().getContextClassLoader();
        Thread.currentThread().setContextClassLoader(webAppContext.getClassLoader());
        NamingEntry.setScope(NamingEntry.SCOPE_LOCAL);
        unbindLocalNamingEntries();
        compCtx.destroySubcontext("env");
        NamingEntry.setScope(NamingEntry.SCOPE_GLOBAL);
        Thread.currentThread().setContextClassLoader(oldLoader);
    }
    
   
    /**
     * Bind all EnvEntries that have been globally declared.
     * @throws NamingException
     */
    public void bindGlobalEnvEntries ()
    throws NamingException
    {
        Log.debug("Finding global env entries");
        List  list = NamingEntry.lookupNamingEntries (NamingEntry.SCOPE_GLOBAL, EnvEntry.class);
        Iterator itor = list.iterator();
        
        Log.debug("Finding env entries: size="+list.size());
        while (itor.hasNext())
        {
            EnvEntry ee = (EnvEntry)itor.next();
            Log.debug("configuring env entry "+ee.getJndiName());
            ee.bindToENC();
        }
    }
    
  
    

    
    public void unbindLocalNamingEntries ()
    throws NamingException
    {
        List  list = NamingEntry.lookupNamingEntries(NamingEntry.SCOPE_LOCAL, EnvEntry.class);
        list.addAll(NamingEntry.lookupNamingEntries(NamingEntry.SCOPE_LOCAL, Resource.class));
        list.addAll(NamingEntry.lookupNamingEntries(NamingEntry.SCOPE_LOCAL, Transaction.class));
        
        Iterator itor = list.iterator();
        
        Log.debug("Finding all naming entries for webapp local naming context: size="+list.size());
        while (itor.hasNext())
        {
            NamingEntry ne = (NamingEntry)itor.next();
            Log.debug("Unbinding naming entry "+ne.getJndiName());
            ne.unbindENC();
            ne.release();
        }
    }
    
}

Other Jetty examples (source code examples)

Here is a short list of links related to this Jetty EnvConfiguration.java source code file:

... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.