/*
* JBoss, Home of Professional Open Source.
* Copyright 2008, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.web;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import org.jboss.deployers.structure.spi.DeploymentUnit;
import org.jboss.metadata.web.jboss.JBossWebMetaData;
/** A WebApplication represents the information for a war deployment.
@see AbstractWebContainer
@author Scott.Stark@jboss.org
@author adrian@jboss.org
@version $Revision: 83775 $
*/
public class WebApplication
{
/** */
private DeploymentUnit unit;
/** Class loader of this application */
protected ClassLoader classLoader = null;
/** name of this application */
protected String name = "";
protected String canonicalName;
/** URL where this application was deployed from */
protected URL url;
/** The web app metadata from the web.xml and jboss-web.xml descriptors */
protected JBossWebMetaData metaData;
/** Arbitary data object for storing application specific data */
protected Object data;
/** The jmx domain of the web container */
protected String domain;
/**
* The parent class loader first model flag
*/
protected boolean java2ClassLoadingCompliance = false;
/**
* A flag indicating if war archives should be unpacked
*/
protected boolean unpackWars = true;
/**
* If true, ejb-links that don't resolve don't cause an error (fallback to
* jndi-name)
*/
protected boolean lenientEjbLink = false;
/**
* The default security-domain name to use
*/
protected String defaultSecurityDomain;
protected HashMap vhostToHostNames = new HashMap();
/** Deployer config bean */
protected Object deployerConfig;
/** Create an empty WebApplication instance
*/
public WebApplication()
{
}
/** Create a WebApplication instance with with given web-app metadata.
@param metaData the web-app metadata containing the web.xml and
jboss-web.xml descriptor metadata.
*/
public WebApplication(JBossWebMetaData metaData)
{
this.metaData = metaData;
}
/** Create a WebApplication instance with with given name,
url and class loader.
@param name name of this application
@param url url where this application was deployed from
@param classLoader Class loader of this application
*/
public WebApplication(String name, URL url, ClassLoader classLoader)
{
this.name = name;
this.url = url;
this.classLoader = classLoader;
}
public DeploymentUnit getDeploymentUnit()
{
return unit;
}
public void setDeploymentUnit(DeploymentUnit unit)
{
this.unit = unit;
}
/** Get the class loader of this WebApplication.
* @return The ClassLoader instance of the web application
*/
public ClassLoader getClassLoader()
{
return classLoader;
}
/** Set the class loader of this WebApplication.
* @param classLoader The ClassLoader instance for the web application
*/
public void setClassLoader(ClassLoader classLoader)
{
this.classLoader = classLoader;
}
/** Get the name of this WebApplication.
* @return String name of the web application
*/
public String getName()
{
String n = name;
if (n == null)
n = url.getFile();
return n;
}
/** Set the name of this WebApplication.
* @param name of the web application
*/
public void setName(String name)
{
this.name = name;
}
public String getCanonicalName()
{
return canonicalName;
}
public void setCanonicalName(String canonicalName)
{
this.canonicalName = canonicalName;
}
/** Get the URL from which this WebApplication was deployed
* @return URL where this application was deployed from
*/
public URL getURL()
{
return url;
}
/** Set the URL from which this WebApplication was deployed
* @param url URL where this application was deployed from
*/
public void setURL(URL url)
{
if (url == null)
throw new IllegalArgumentException("Null URL");
this.url = url;
}
/** Getter for property metaData.
* @return Value of property metaData.
*/
public JBossWebMetaData getMetaData()
{
return metaData;
}
/** Setter for property metaData.
* @param metaData New value of property metaData.
*/
public void setMetaData(JBossWebMetaData metaData)
{
this.metaData = metaData;
}
public Object getAppData()
{
return data;
}
public void setAppData(Object data)
{
this.data = data;
}
public String getDomain()
{
return domain;
}
public void setDomain(String domain)
{
this.domain = domain;
}
/**
* Get the flag indicating if the normal Java2 parent first class loading
* model should be used over the servlet 2.3 web container first model.
* @return true for parent first, false for the servlet 2.3 model
* @jmx.managed-attribute
*/
public boolean getJava2ClassLoadingCompliance()
{
return java2ClassLoadingCompliance;
}
/**
* Set the flag indicating if the normal Java2 parent first class loading
* model should be used over the servlet 2.3 web container first model.
* @param flag true for parent first, false for the servlet 2.3 model
* @jmx.managed-attribute
*/
public void setJava2ClassLoadingCompliance(boolean flag)
{
java2ClassLoadingCompliance = flag;
}
/**
* Get the flag indicating if war archives should be unpacked. This may need
* to be set to false as long extraction paths under deploy can show up as
* deployment failures on some platforms.
* @return true is war archives should be unpacked
* @jmx.managed-attribute
*/
public boolean getUnpackWars()
{
return unpackWars;
}
/**
* Get the flag indicating if war archives should be unpacked. This may need
* to be set to false as long extraction paths under deploy can show up as
* deployment failures on some platforms.
* @param flag , true is war archives should be unpacked
* @jmx.managed-attribute
*/
public void setUnpackWars(boolean flag)
{
this.unpackWars = flag;
}
/**
* Get the flag indicating if ejb-link errors should be ignored in favour of
* trying the jndi-name in jboss-web.xml
* @return a <code>boolean</code> value
* @jmx.managed-attribute
*/
public boolean getLenientEjbLink()
{
return lenientEjbLink;
}
/**
* Set the flag indicating if ejb-link errors should be ignored in favour of
* trying the jndi-name in jboss-web.xml
* @jmx.managed-attribute
*/
public void setLenientEjbLink(boolean flag)
{
lenientEjbLink = flag;
}
/**
* Get the default security domain implementation to use if a war does not
* declare a security-domain.
* @return jndi name of the security domain binding to use.
* @jmx.managed-attribute
*/
public String getDefaultSecurityDomain()
{
return defaultSecurityDomain;
}
/**
* Set the default security domain implementation to use if a war does not
* declare a security-domain.
* @param defaultSecurityDomain - jndi name of the security domain binding to
* use.
* @jmx.managed-attribute
*/
public void setDefaultSecurityDomain(String defaultSecurityDomain)
{
this.defaultSecurityDomain = defaultSecurityDomain;
}
public Map getVhostToHostNames()
{
return this.vhostToHostNames;
}
public void setVhostToHostNames(Map map)
{
this.vhostToHostNames.clear();
this.vhostToHostNames.putAll(map);
}
public Object getDeployerConfig()
{
return deployerConfig;
}
public void setDeployerConfig(Object config)
{
this.deployerConfig = config;
}
public String toString()
{
StringBuffer buffer = new StringBuffer("{WebApplication: ");
buffer.append(getName());
buffer.append(", URL: ");
buffer.append(url);
buffer.append(", classLoader: ");
buffer.append(classLoader);
buffer.append(':');
buffer.append(classLoader.hashCode());
buffer.append('}');
return buffer.toString();
}
}