Return-Path: X-Original-To: apmail-geronimo-scm-archive@www.apache.org Delivered-To: apmail-geronimo-scm-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 99B549EB0 for ; Mon, 6 Feb 2012 10:06:58 +0000 (UTC) Received: (qmail 40180 invoked by uid 500); 6 Feb 2012 10:06:57 -0000 Delivered-To: apmail-geronimo-scm-archive@geronimo.apache.org Received: (qmail 39811 invoked by uid 500); 6 Feb 2012 10:06:49 -0000 Mailing-List: contact scm-help@geronimo.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: List-Post: Reply-To: dev@geronimo.apache.org List-Id: Delivered-To: mailing list scm@geronimo.apache.org Received: (qmail 38758 invoked by uid 99); 6 Feb 2012 10:06:47 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 06 Feb 2012 10:06:47 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 06 Feb 2012 10:06:45 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id A6C81238890D; Mon, 6 Feb 2012 10:06:25 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1240958 - in /geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7/src/main/java/org/apache/geronimo/tomcat: GeronimoStandardContext.java GeronimoWebAppLoader.java TomcatWebAppContext.java interceptor/RequestListenerBeforeAfter.java Date: Mon, 06 Feb 2012 10:06:25 -0000 To: scm@geronimo.apache.org From: xuhaihong@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20120206100625.A6C81238890D@eris.apache.org> Author: xuhaihong Date: Mon Feb 6 10:06:24 2012 New Revision: 1240958 URL: http://svn.apache.org/viewvc?rev=1240958&view=rev Log: GERONIMO-6266 The jndi prefix URL could not work before the web application is totally started Added: geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7/src/main/java/org/apache/geronimo/tomcat/GeronimoWebAppLoader.java Modified: geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7/src/main/java/org/apache/geronimo/tomcat/GeronimoStandardContext.java geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7/src/main/java/org/apache/geronimo/tomcat/TomcatWebAppContext.java geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7/src/main/java/org/apache/geronimo/tomcat/interceptor/RequestListenerBeforeAfter.java Modified: geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7/src/main/java/org/apache/geronimo/tomcat/GeronimoStandardContext.java URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7/src/main/java/org/apache/geronimo/tomcat/GeronimoStandardContext.java?rev=1240958&r1=1240957&r2=1240958&view=diff ============================================================================== --- geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7/src/main/java/org/apache/geronimo/tomcat/GeronimoStandardContext.java (original) +++ geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7/src/main/java/org/apache/geronimo/tomcat/GeronimoStandardContext.java Mon Feb 6 10:06:24 2012 @@ -290,7 +290,7 @@ public class GeronimoStandardContext ext int index = 0; - BeforeAfter interceptor = new RequestListenerBeforeAfter(null, index++); + BeforeAfter interceptor = new RequestListenerBeforeAfter(null, index++, this); interceptor = new InstanceContextBeforeAfter(interceptor, index++, @@ -575,71 +575,8 @@ public class GeronimoStandardContext ext } @Override - public synchronized void setLoader(final Loader delegate) { - Loader loader = new Loader() { - - public void backgroundProcess() { - delegate.backgroundProcess(); - } - - public ClassLoader getClassLoader() { - // Implementation Note: the actual CL to be used by this - // context is the Geronimo one and not the Tomcat one. - return parentClassLoader; - } - - public Container getContainer() { - return delegate.getContainer(); - } - - public void setContainer(Container container) { - delegate.setContainer(container); - } - - public boolean getDelegate() { - return delegate.getDelegate(); - } - - public void setDelegate(boolean delegateBoolean) { - delegate.setDelegate(delegateBoolean); - } - - public String getInfo() { - return delegate.getInfo(); - } - - public boolean getReloadable() { - return false; - } - - public void setReloadable(boolean reloadable) { - if (reloadable) { - throw new UnsupportedOperationException("Reloadable context is not supported."); - } - } - - public void addPropertyChangeListener(PropertyChangeListener listener) { - delegate.addPropertyChangeListener(listener); - } - - public void addRepository(String repository) { - delegate.addRepository(repository); - } - - public String[] findRepositories() { - return delegate.findRepositories(); - } - - public boolean modified() { - return delegate.modified(); - } - - public void removePropertyChangeListener(PropertyChangeListener listener) { - delegate.removePropertyChangeListener(listener); - } - }; - - super.setLoader(loader); + public synchronized void setLoader(Loader delegate) { + super.setLoader(new GeronimoWebAppLoader(this, delegate)); } public ServletContext getInternalServletContext() { Added: geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7/src/main/java/org/apache/geronimo/tomcat/GeronimoWebAppLoader.java URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7/src/main/java/org/apache/geronimo/tomcat/GeronimoWebAppLoader.java?rev=1240958&view=auto ============================================================================== --- geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7/src/main/java/org/apache/geronimo/tomcat/GeronimoWebAppLoader.java (added) +++ geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7/src/main/java/org/apache/geronimo/tomcat/GeronimoWebAppLoader.java Mon Feb 6 10:06:24 2012 @@ -0,0 +1,140 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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.apache.geronimo.tomcat; + +import java.beans.PropertyChangeListener; + +import javax.naming.directory.DirContext; + +import org.apache.catalina.Container; +import org.apache.catalina.LifecycleException; +import org.apache.catalina.LifecycleState; +import org.apache.catalina.Loader; +import org.apache.catalina.util.LifecycleBase; +import org.apache.naming.resources.DirContextURLStreamHandler; + +/** + * @version $Rev$ $Date$ + */ +public class GeronimoWebAppLoader extends LifecycleBase implements Loader { + + private final Loader delegate; + + private final GeronimoStandardContext standardContext; + + public GeronimoWebAppLoader(GeronimoStandardContext standardContext, Loader delegate) { + this.delegate = delegate; + this.standardContext = standardContext; + } + + @Override + public void backgroundProcess() { + delegate.backgroundProcess(); + } + + @Override + public ClassLoader getClassLoader() { + return standardContext.getParentClassLoader(); + } + + @Override + public Container getContainer() { + return delegate.getContainer(); + } + + @Override + public void setContainer(Container container) { + delegate.setContainer(container); + } + + @Override + public boolean getDelegate() { + return delegate.getDelegate(); + } + + @Override + public void setDelegate(boolean delegateBoolean) { + delegate.setDelegate(delegateBoolean); + } + + @Override + public String getInfo() { + return delegate.getInfo(); + } + + @Override + public boolean getReloadable() { + return false; + } + + @Override + public void setReloadable(boolean reloadable) { + if (reloadable) { + throw new UnsupportedOperationException("Reloadable context is not supported."); + } + } + + @Override + public void addPropertyChangeListener(PropertyChangeListener listener) { + delegate.addPropertyChangeListener(listener); + } + + @Override + public void addRepository(String repository) { + delegate.addRepository(repository); + } + + @Override + public String[] findRepositories() { + return delegate.findRepositories(); + } + + @Override + public boolean modified() { + return delegate.modified(); + } + + @Override + public void removePropertyChangeListener(PropertyChangeListener listener) { + delegate.removePropertyChangeListener(listener); + } + + @Override + protected void startInternal() throws LifecycleException { + DirContext resources = delegate.getContainer().getResources(); + if (resources == null) { + throw new IllegalStateException("JNDI environment was not set up correctly due to previous error"); + } + DirContextURLStreamHandler.bind(standardContext.getParentClassLoader(), resources); + setState(LifecycleState.STARTING); + } + + @Override + protected void stopInternal() throws LifecycleException { + setState(LifecycleState.STOPPING); + DirContextURLStreamHandler.unbind(standardContext.getParentClassLoader()); + } + + @Override + protected void destroyInternal() throws LifecycleException { + } + + @Override + protected void initInternal() throws LifecycleException { + } +} Modified: geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7/src/main/java/org/apache/geronimo/tomcat/TomcatWebAppContext.java URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7/src/main/java/org/apache/geronimo/tomcat/TomcatWebAppContext.java?rev=1240958&r1=1240957&r2=1240958&view=diff ============================================================================== --- geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7/src/main/java/org/apache/geronimo/tomcat/TomcatWebAppContext.java (original) +++ geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7/src/main/java/org/apache/geronimo/tomcat/TomcatWebAppContext.java Mon Feb 6 10:06:24 2012 @@ -564,12 +564,6 @@ public class TomcatWebAppContext impleme container.addContext(this); // Is it necessary - doesn't Tomcat Embedded take care of it? // super.start(); - //register the classloader <> dir context association so that tomcat's jndi based getResources works. - DirContext resources = context.getResources(); - if (resources == null) { - throw new IllegalStateException("JNDI environment was not set up correctly due to previous error"); - } - DirContextURLStreamHandler.bind(classLoader, resources); if (context instanceof StandardContext) { statsProvider = new ModuleStats((StandardContext) context); } @@ -584,7 +578,6 @@ public class TomcatWebAppContext impleme public void doStop() throws Exception { statsProvider = null; container.removeContext(this); - DirContextURLStreamHandler.unbind(classLoader); log.debug("TomcatWebAppContext stopped"); } Modified: geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7/src/main/java/org/apache/geronimo/tomcat/interceptor/RequestListenerBeforeAfter.java URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7/src/main/java/org/apache/geronimo/tomcat/interceptor/RequestListenerBeforeAfter.java?rev=1240958&r1=1240957&r2=1240958&view=diff ============================================================================== --- geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7/src/main/java/org/apache/geronimo/tomcat/interceptor/RequestListenerBeforeAfter.java (original) +++ geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7/src/main/java/org/apache/geronimo/tomcat/interceptor/RequestListenerBeforeAfter.java Mon Feb 6 10:06:24 2012 @@ -24,35 +24,24 @@ import org.apache.geronimo.tomcat.Geroni public class RequestListenerBeforeAfter implements BeforeAfter{ private final BeforeAfter next; private final int index; + private final GeronimoStandardContext standardContext; - public RequestListenerBeforeAfter(BeforeAfter next, int index) { + public RequestListenerBeforeAfter(BeforeAfter next, int index, GeronimoStandardContext standardContext) { this.next = next; this.index = index; + this.standardContext = standardContext; } public void before(BeforeAfterContext beforeAfterContext, ServletRequest httpRequest, ServletResponse httpResponse, int dispatch) { - - if (httpRequest instanceof org.apache.catalina.connector.Request){ - - org.apache.catalina.connector.Request catalinaRequest = (org.apache.catalina.connector.Request) httpRequest; - - if (catalinaRequest.getContext() instanceof GeronimoStandardContext) { - - GeronimoStandardContext GeronimoContext = (GeronimoStandardContext) catalinaRequest.getContext(); - GeronimoContext.fireRequestInitEventInBeforeAfter(httpRequest); - } - - } - - if (next != null) { - next.before(beforeAfterContext, httpRequest, httpResponse, dispatch); - } + standardContext.fireRequestInitEventInBeforeAfter(httpRequest); + if (next != null) { + next.before(beforeAfterContext, httpRequest, httpResponse, dispatch); + } } - public void after(BeforeAfterContext beforeAfterContext, ServletRequest httpRequest, ServletResponse httpResponse, int dispatch) { - + public void after(BeforeAfterContext beforeAfterContext, ServletRequest httpRequest, ServletResponse httpResponse, int dispatch) { if (next != null) { next.after(beforeAfterContext, httpRequest, httpResponse, dispatch); }