📄 standarddefaultcontext.java
字号:
// --------------------------------------------------------- Public Methods
/**
* Process the START event for an associated Context.
*
* @param event The lifecycle event that has occurred
*/
public void lifecycleEvent(LifecycleEvent event) {
StandardContext context = null;
NamingContextListener listener = null;
if (event.getLifecycle() instanceof StandardContext) {
context = (StandardContext) event.getLifecycle();
LifecycleListener[] listeners = context.findLifecycleListeners();
for (int i = 0; i < listeners.length; i++) {
if (listeners[i] instanceof NamingContextListener) {
listener = (NamingContextListener) listeners[i];
break;
}
}
}
if (listener == null) {
return;
}
if ((event.getType().equals(Lifecycle.BEFORE_STOP_EVENT))
|| (event.getType().equals(Context.RELOAD_EVENT))) {
// Remove context
contexts.remove(context);
// Remove listener from the NamingResource listener list
namingResources.removePropertyChangeListener(listener);
// Remove listener from lifecycle listeners
if (!(event.getType().equals(Context.RELOAD_EVENT))) {
context.removeLifecycleListener(this);
}
}
if ((event.getType().equals(Lifecycle.AFTER_START_EVENT))
|| (event.getType().equals(Context.RELOAD_EVENT))) {
// Add context
contexts.put(context, context);
NamingResources contextResources = context.getNamingResources();
// Setting the context in read/write mode
ContextAccessController.setWritable(listener.getName(), context);
// Send notifications to the listener to add the appropriate
// resources
ContextEjb [] contextEjb = findEjbs();
for (int i = 0; i < contextEjb.length; i++) {
ContextEjb contextEntry = contextEjb[i];
if (contextResources.exists(contextEntry.getName())) {
listener.removeEjb(contextEntry.getName());
}
listener.addEjb(contextEntry);
}
ContextEnvironment [] contextEnv = findEnvironments();
for (int i = 0; i < contextEnv.length; i++) {
ContextEnvironment contextEntry = contextEnv[i];
if (contextResources.exists(contextEntry.getName())) {
listener.removeEnvironment(contextEntry.getName());
}
listener.addEnvironment(contextEntry);
}
ContextResource [] resources = findResources();
for (int i = 0; i < resources.length; i++) {
ContextResource contextEntry = resources[i];
if (contextResources.exists(contextEntry.getName())) {
listener.removeResource(contextEntry.getName());
}
listener.addResource(contextEntry);
}
ContextResourceLink [] resourceLinks = findResourceLinks();
for (int i = 0; i < resourceLinks.length; i++) {
ContextResourceLink contextEntry = resourceLinks[i];
if (contextResources.exists(contextEntry.getName())) {
listener.removeResourceLink(contextEntry.getName());
}
listener.addResourceLink(contextEntry);
}
String [] envRefs = findResourceEnvRefs();
for (int i = 0; i < envRefs.length; i++) {
if (contextResources.exists(envRefs[i])) {
listener.removeResourceEnvRef(envRefs[i]);
}
listener.addResourceEnvRef
(envRefs[i], findResourceEnvRef(envRefs[i]));
}
// Setting the context in read only mode
ContextAccessController.setReadOnly(listener.getName());
// Add listener to the NamingResources listener list
namingResources.addPropertyChangeListener(listener);
}
}
/**
* Install the StandardContext portion of the DefaultContext
* configuration into current Context.
*
* @param context current web application context
*/
public void installDefaultContext(Context context) {
if (context instanceof StandardContext) {
((StandardContext)context).setUseNaming(isUseNaming());
((StandardContext)context).setSwallowOutput(getSwallowOutput());
((StandardContext)context).setCachingAllowed(isCachingAllowed());
((StandardContext)context).setCacheTTL(getCacheTTL());
((StandardContext)context).setCacheMaxSize(getCacheMaxSize());
((StandardContext)context).setAllowLinking(isAllowLinking());
((StandardContext)context).setCaseSensitive(isCaseSensitive());
((StandardContext)context).setManagerChecksFrequency
(getManagerChecksFrequency());
if (!contexts.containsKey(context)) {
((StandardContext) context).addLifecycleListener(this);
}
Enumeration lifecycleListeners = lifecycle.elements();
while (lifecycleListeners.hasMoreElements()) {
((StandardContext)context).addLifecycleListener(
(LifecycleListener)lifecycleListeners.nextElement());
}
}
if (!context.getPrivileged() && loader != null) {
ClassLoader parentClassLoader = context.getParent().getParentClassLoader();
Class clazz = loader.getClass();
Class types[] = { ClassLoader.class };
Object args[] = { parentClassLoader };
try {
Constructor constructor = clazz.getDeclaredConstructor(types);
Loader context_loader = (Loader) constructor.newInstance(args);
context_loader.setDelegate(loader.getDelegate());
context_loader.setReloadable(loader.getReloadable());
if (loader instanceof WebappLoader) {
((WebappLoader)context_loader).setDebug
(((WebappLoader)loader).getDebug());
((WebappLoader)context_loader).setLoaderClass
(((WebappLoader)loader).getLoaderClass());
}
context.setLoader(context_loader);
} catch(Exception e) {
throw new IllegalArgumentException
("DefaultContext custom Loader install failed, Exception: " +
e.getMessage());
}
}
}
/**
* Import the configuration from the DefaultContext into
* current Context.
*
* @param context current web application context
*/
public void importDefaultContext(Context context) {
context.setCookies(getCookies());
context.setCrossContext(getCrossContext());
context.setReloadable(getReloadable());
String [] listeners = findApplicationListeners();
for( int i = 0; i < listeners.length; i++ ) {
context.addApplicationListener(listeners[i]);
}
listeners = findInstanceListeners();
for( int i = 0; i < listeners.length; i++ ) {
context.addInstanceListener(listeners[i]);
}
String [] wrapper = findWrapperListeners();
for( int i = 0; i < wrapper.length; i++ ) {
context.addWrapperListener(wrapper[i]);
}
wrapper = findWrapperLifecycles();
for( int i = 0; i < wrapper.length; i++ ) {
context.addWrapperLifecycle(wrapper[i]);
}
String [] parameters = findParameters();
for( int i = 0; i < parameters.length; i++ ) {
context.addParameter(parameters[i],findParameter(parameters[i]));
}
ApplicationParameter [] appParam = findApplicationParameters();
for( int i = 0; i < appParam.length; i++ ) {
context.addApplicationParameter(appParam[i]);
}
if (!(context instanceof StandardContext)) {
ContextEjb [] contextEjb = findEjbs();
for( int i = 0; i < contextEjb.length; i++ ) {
context.addEjb(contextEjb[i]);
}
ContextEnvironment [] contextEnv = findEnvironments();
for( int i = 0; i < contextEnv.length; i++ ) {
context.addEnvironment(contextEnv[i]);
}
/*
if (context instanceof StandardContext) {
ResourceParams [] resourceParams = findResourceParams();
for( int i = 0; i < resourceParams.length; i++ ) {
((StandardContext)context).addResourceParams
(resourceParams[i]);
}
}
*/
ContextResource [] resources = findResources();
for( int i = 0; i < resources.length; i++ ) {
context.addResource(resources[i]);
}
ContextResourceLink [] resourceLinks = findResourceLinks();
for( int i = 0; i < resourceLinks.length; i++ ) {
context.addResourceLink(resourceLinks[i]);
}
String [] envRefs = findResourceEnvRefs();
for( int i = 0; i < envRefs.length; i++ ) {
context.addResourceEnvRef
(envRefs[i],findResourceEnvRef(envRefs[i]));
}
}
}
/**
* Return a String representation of this component.
*/
public String toString() {
StringBuffer sb = new StringBuffer();
if (getParent() != null) {
sb.append(getParent().toString());
sb.append(".");
}
sb.append("DefaultContext[");
sb.append("]");
return (sb.toString());
}
// -------------------- JMX stuff --------------------
protected String type;
protected String domain;
protected String suffix;
protected ObjectName oname;
protected MBeanServer mserver;
public ObjectName getObjectName() {
return oname;
}
public String getDomain() {
return domain;
}
public String getType() {
return type;
}
protected String getJSR77Suffix() {
return suffix;
}
public ObjectName preRegister(MBeanServer server,
ObjectName name) throws Exception {
oname=name;
mserver=server;
domain=name.getDomain();
type=name.getKeyProperty("type");
if( type==null ) {
type=name.getKeyProperty("j2eeType");
}
String j2eeApp=name.getKeyProperty("J2EEApplication");
String j2eeServer=name.getKeyProperty("J2EEServer");
if( j2eeApp==null ) {
j2eeApp="none";
}
if( j2eeServer==null ) {
j2eeServer="none";
}
suffix=",J2EEApplication=" + j2eeApp + ",J2EEServer=" + j2eeServer;
return name;
}
public void postRegister(Boolean registrationDone) {
}
public void preDeregister() throws Exception {
}
public void postDeregister() {
}
/**
* Return the MBean Names of the set of defined environment entries for
* this web application
*/
public String[] getEnvironments() {
ContextEnvironment[] envs = getNamingResources().findEnvironments();
ArrayList results = new ArrayList();
for (int i = 0; i < envs.length; i++) {
try {
ObjectName oname =
MBeanUtils.createObjectName(this.getDomain(), envs[i]);
results.add(oname.toString());
} catch (MalformedObjectNameException e) {
throw new IllegalArgumentException
("Cannot create object name for environment " + envs[i]);
}
}
return ((String[]) results.toArray(new String[results.size()]));
}
/**
* Return the MBean Names of all the defined resource references for this
* application.
* XXX This changed - due to conflict
*/
public String[] getResourceNames() {
ContextResource[] resources = getNamingResources().findResources();
ArrayList results = new ArrayList();
for (int i = 0; i < resources.length; i++) {
try {
ObjectName oname =
MBeanUtils.createObjectName(getDomain(), resources[i]);
results.add(oname.toString());
} catch (MalformedObjectNameException e) {
throw new IllegalArgumentException
("Cannot create object name for resource " + resources[i]);
}
}
return ((String[]) results.toArray(new String[results.size()]));
}
/**
* Return the MBean Names of all the defined resource links for this
* application
*/
public String[] getResourceLinks() {
ContextResourceLink[] links = getNamingResources().findResourceLinks();
ArrayList results = new ArrayList();
for (int i = 0; i < links.length; i++) {
try {
ObjectName oname =
MBeanUtils.createObjectName(getDomain(), links[i]);
results.add(oname.toString());
} catch (MalformedObjectNameException e) {
throw new IllegalArgumentException
("Cannot create object name for resource " + links[i]);
}
}
return ((String[]) results.toArray(new String[results.size()]));
}
// ------------------------------------------------------------- Operations
/**
* Add an environment entry for this web application.
*
* @param envName New environment entry name
*/
public String addEnvironment(String envName, String type)
throws MalformedObjectNameException {
NamingResources nresources = getNamingResources();
if (nresources == null) {
return null;
}
ContextEnvironment env = nresources.findEnvironment(envName);
if (env != null) {
throw new IllegalArgumentException
("Invalid environment name - already exists '" + envName + "'");
}
env = new ContextEnvironment();
env.setName(envName);
env.setType(type);
nresources.addEnvironment(env);
// Return the corresponding MBean name
ManagedBean managed = Registry.getRegistry(null, null)
.findManagedBean("ContextEnvironment");
ObjectName oname =
MBeanUtils.createObjectName(managed.getDomain(), env);
return (oname.toString());
}
/**
* Add a resource reference for this web application.
*
* @param resourceName New resource reference name
*/
public String addResource(String resourceName, String type)
throws MalformedObjectNameException {
NamingResources nresources = getNamingResources();
if (nresources == null) {
return null;
}
ContextResource resource = nresources.findResource(resourceName);
if (resource != null) {
throw new IllegalArgumentException
("Invalid resource name - already exists'" + resourceName + "'");
}
resource = new ContextResource();
resource.setName(resourceName);
resource.setType(type);
nresources.addResource(resource);
// Return the corresponding MBean name
ManagedBean managed = Registry.getRegistry(null, null)
.findManagedBean("ContextResource");
ObjectName oname =
MBeanUtils.createObjectName(managed.getDomain(), resource);
return (oname.toString());
}
/**
* Add a resource link for this web application.
*
* @param resourceLinkName New resource link name
*/
public String addResourceLink(String resourceLinkName, String global,
String name, String type) throws MalformedObjectNameException {
NamingResources nresources = getNamingResources();
if (nresources == null) {
return null;
}
ContextResourceLink resourceLink =
nresources.findResourceLink(resourceLinkName);
if (resourceLink != null) {
throw new IllegalArgumentException
("Invalid resource link name - already exists'" +
resourceLinkName + "'");
}
resourceLink = new ContextResourceLink();
resourceLink.setGlobal(global);
resourceLink.setName(resourceLinkName);
resourceLink.setType(type);
nresources.addResourceLink(resourceLink);
// Return the corresponding MBean name
ManagedBean managed = Registry.getRegistry(null, null)
.findManagedBean("ContextResourceLink");
ObjectName oname =
MBeanUtils.createObjectName(managed.getDomain(), resourceLink);
return (oname.toString());
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -