Return-Path: Delivered-To: apmail-geronimo-scm-archive@www.apache.org Received: (qmail 96404 invoked from network); 16 Sep 2006 20:10:27 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 16 Sep 2006 20:10:27 -0000 Received: (qmail 22650 invoked by uid 500); 16 Sep 2006 20:10:27 -0000 Delivered-To: apmail-geronimo-scm-archive@geronimo.apache.org Received: (qmail 22360 invoked by uid 500); 16 Sep 2006 20:10:25 -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 22332 invoked by uid 99); 16 Sep 2006 20:10:24 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 16 Sep 2006 13:10:24 -0700 X-ASF-Spam-Status: No, hits=-9.4 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received-SPF: pass (asf.osuosl.org: local policy) Received: from [140.211.166.113] (HELO eris.apache.org) (140.211.166.113) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 16 Sep 2006 13:10:21 -0700 Received: by eris.apache.org (Postfix, from userid 65534) id 670D71A981A; Sat, 16 Sep 2006 13:10:01 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r446934 [1/2] - in /geronimo/sandbox/javaee5: ./ modules-jee5/ modules-jee5/geronimo-jetty6/ modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/ modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/cluster/... Date: Sat, 16 Sep 2006 20:09:59 -0000 To: scm@geronimo.apache.org From: djencks@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20060916201001.670D71A981A@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N Author: djencks Date: Sat Sep 16 13:09:57 2006 New Revision: 446934 URL: http://svn.apache.org/viewvc?view=rev&rev=446934 Log: Initial hack of porting Jans' jetty6 work into the current geronimo code. Compiles, but some tests are disabled and there's a lot more work to do. Added: geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/ - copied from r446787, geronimo/server/trunk/modules/geronimo-jetty/ geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/DefaultSessionHandlerFactory.java geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettySecurityHandler.java (with props) geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyThreadPool.java (with props) geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/SessionHandlerFactory.java geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/cluster/ClusteredSessionHandler.java geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/cluster/ClusteredSessionHandlerFactory.java Removed: geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/DefaultWebApplicationHandlerFactory.java geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/GeronimoServletHttpRequest.java geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/HandleInterceptor.java geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyWebApplicationHandler.java geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/WebApplicationHandlerFactory.java geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/cluster/ClusteredWebApplicationHandler.java geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/cluster/ClusteredWebApplicationHandlerFactory.java geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/interceptor/RequestWrappingBeforeAfter.java geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/interceptor/SecurityContextBeforeAfter.java geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/interceptor/WebApplicationContextBeforeAfter.java Modified: geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/pom.xml geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/InternalJAASJettyRealm.java geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JAASJettyRealm.java geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyContainer.java geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyContainerImpl.java geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyEJBWebServiceContext.java geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyFilterHolder.java geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyFilterMapping.java geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyManagerImpl.java geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyPOJOWebServiceHolder.java geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyServer.java geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyServletHolder.java geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyServletRegistration.java geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyWebAppContext.java geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyWebConnector.java geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyWebContainerStatsImpl.java geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/NonAuthenticator.java geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/cluster/AbstractClusteredHandleInterceptor.java geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/cluster/ClusteredSessionManager.java geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/connector/AJP13Connector.java geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/connector/GeronimoSSLListener.java geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/connector/HTTPConnector.java geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/connector/HTTPSConnector.java geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/connector/JettyConnector.java geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/interceptor/BeforeAfter.java geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/interceptor/ComponentContextBeforeAfter.java geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/interceptor/InstanceContextBeforeAfter.java geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/interceptor/ThreadClassloaderBeforeAfter.java geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/requestlog/JettyLogManagerImpl.java geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/requestlog/NCSARequestLog.java geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/test/java/org/apache/geronimo/jetty/AbstractWebModuleTest.java geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/test/java/org/apache/geronimo/jetty/ContainerTest.java geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/test/java/org/apache/geronimo/jetty/SecurityTest.java geronimo/sandbox/javaee5/modules-jee5/pom.xml geronimo/sandbox/javaee5/pom.xml Modified: geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/pom.xml URL: http://svn.apache.org/viewvc/geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/pom.xml?view=diff&rev=446934&r1=446787&r2=446934 ============================================================================== --- geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/pom.xml (original) +++ geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/pom.xml Sat Sep 16 13:09:57 2006 @@ -23,12 +23,12 @@ org.apache.geronimo.modules - modules + modules-jee5 1.2-SNAPSHOT ../pom.xml - geronimo-jetty + geronimo-jetty6 Geronimo :: Jetty @@ -64,8 +64,8 @@ - jetty - org.mortbay.jetty + org.mortbay.jetty + jetty Added: geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/DefaultSessionHandlerFactory.java URL: http://svn.apache.org/viewvc/geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/DefaultSessionHandlerFactory.java?view=auto&rev=446934 ============================================================================== --- geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/DefaultSessionHandlerFactory.java (added) +++ geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/DefaultSessionHandlerFactory.java Sat Sep 16 13:09:57 2006 @@ -0,0 +1,41 @@ +/** + * + * Copyright 2006 The Apache Software Foundation + * + * 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.apache.geronimo.jetty; + +import org.apache.geronimo.gbean.GBeanInfo; +import org.apache.geronimo.gbean.GBeanInfoBuilder; +import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory; +import org.mortbay.jetty.servlet.SessionHandler; + +/** + * @version $Rev$ $Date$ + */ +public class DefaultSessionHandlerFactory implements SessionHandlerFactory { + + public SessionHandler createHandler() { + //???? + return null; + } + + public static final GBeanInfo GBEAN_INFO; + + static { + GBeanInfoBuilder infoBuilder = GBeanInfoBuilder.createStatic(DefaultSessionHandlerFactory.class, NameFactory.GERONIMO_SERVICE); + infoBuilder.addInterface(SessionHandlerFactory.class); + GBEAN_INFO = infoBuilder.getBeanInfo(); + } +} Modified: geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/InternalJAASJettyRealm.java URL: http://svn.apache.org/viewvc/geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/InternalJAASJettyRealm.java?view=diff&rev=446934&r1=446787&r2=446934 ============================================================================== --- geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/InternalJAASJettyRealm.java (original) +++ geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/InternalJAASJettyRealm.java Sat Sep 16 13:09:57 2006 @@ -21,6 +21,7 @@ import java.security.Principal; import java.security.cert.X509Certificate; import java.util.HashMap; + import javax.security.auth.Subject; import javax.security.auth.login.LoginContext; import javax.security.auth.login.LoginException; @@ -28,12 +29,11 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.geronimo.jetty.interceptor.SecurityContextBeforeAfter; import org.apache.geronimo.security.ContextManager; import org.apache.geronimo.security.realm.providers.CertificateCallbackHandler; import org.apache.geronimo.security.realm.providers.ClearableCallbackHandler; import org.apache.geronimo.security.realm.providers.PasswordCallbackHandler; -import org.mortbay.http.HttpRequest; +import org.mortbay.jetty.Request; /** @@ -58,7 +58,7 @@ return (Principal) userMap.get(username); } - public Principal authenticate(String username, Object credentials, HttpRequest request) { + public Principal authenticate(String username, Object credentials, Request request) { try { if ((username != null) && (!username.equals(""))) { Modified: geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JAASJettyRealm.java URL: http://svn.apache.org/viewvc/geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JAASJettyRealm.java?view=diff&rev=446934&r1=446787&r2=446934 ============================================================================== --- geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JAASJettyRealm.java (original) +++ geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JAASJettyRealm.java Sat Sep 16 13:09:57 2006 @@ -18,17 +18,14 @@ import java.security.Principal; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.mortbay.http.HttpRequest; -import org.mortbay.http.UserRealm; +import org.mortbay.jetty.Request; +import org.mortbay.jetty.security.UserRealm; /** * @version $Rev$ $Date$ */ public class JAASJettyRealm implements UserRealm { - private static Log log = LogFactory.getLog(JAASJettyRealm.class); private final String webRealmName; private final InternalJAASJettyRealm internalJAASJettyRealm; @@ -46,7 +43,7 @@ return internalJAASJettyRealm.getPrincipal(username); } - public Principal authenticate(String username, Object credentials, HttpRequest request) { + public Principal authenticate(String username, Object credentials, Request request) { return internalJAASJettyRealm.authenticate(username, credentials, request); } Modified: geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyContainer.java URL: http://svn.apache.org/viewvc/geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyContainer.java?view=diff&rev=446934&r1=446787&r2=446934 ============================================================================== --- geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyContainer.java (original) +++ geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyContainer.java Sat Sep 16 13:09:57 2006 @@ -17,23 +17,22 @@ package org.apache.geronimo.jetty; -import org.mortbay.http.HttpContext; -import org.mortbay.http.HttpListener; -import org.mortbay.http.RequestLog; -import org.mortbay.http.UserRealm; import org.apache.geronimo.management.geronimo.WebContainer; +import org.mortbay.jetty.Connector; +import org.mortbay.jetty.RequestLog; +import org.mortbay.jetty.handler.ContextHandler; /** * @version $Rev$ $Date$ */ public interface JettyContainer extends WebContainer { - void addListener(HttpListener listener); + void addListener(Connector listener); - void removeListener(HttpListener listener); + void removeListener(Connector listener); - void addContext(HttpContext context); + void addContext(ContextHandler context); - void removeContext(HttpContext context); + void removeContext(ContextHandler context); InternalJAASJettyRealm addRealm(String realmName); Modified: geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyContainerImpl.java URL: http://svn.apache.org/viewvc/geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyContainerImpl.java?view=diff&rev=446934&r1=446787&r2=446934 ============================================================================== --- geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyContainerImpl.java (original) +++ geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyContainerImpl.java Sat Sep 16 13:09:57 2006 @@ -30,10 +30,15 @@ import org.apache.geronimo.management.geronimo.WebManager; import org.apache.geronimo.webservices.SoapHandler; import org.apache.geronimo.webservices.WebServiceContainer; -import org.mortbay.http.HttpContext; -import org.mortbay.http.HttpListener; -import org.mortbay.http.RequestLog; +import org.mortbay.jetty.Connector; +import org.mortbay.jetty.Handler; +import org.mortbay.jetty.RequestLog; import org.mortbay.jetty.Server; +import org.mortbay.jetty.handler.ContextHandler; +import org.mortbay.jetty.handler.ContextHandlerCollection; +import org.mortbay.jetty.handler.DefaultHandler; +import org.mortbay.jetty.handler.HandlerCollection; +import org.mortbay.jetty.handler.RequestLogHandler; /** * @version $Rev$ $Date$ @@ -45,10 +50,32 @@ private final WebManager manager; private JettyWebContainerStatsImpl stats; private final Map realms = new HashMap(); + private HandlerCollection handlerCollection = new HandlerCollection(); + private ContextHandlerCollection contextHandlerCollection = new ContextHandlerCollection(); + private DefaultHandler defaultHandler = new DefaultHandler(); + private RequestLogHandler requestLogHandler = new RequestLogHandler(); public JettyContainerImpl(String objectName, WebManager manager) { this.objectName = objectName; server = new JettyServer(); + + //set up the new jetty6 handler structure which is to have a HandlerCollection, + //each element of which is always tried on each request. + //The first element of the HandlerCollection is a + //ContextHandlerCollection, which is itself is a collection + //of Handlers. It's special property is that only of it's + //handlers will respond to a request. + //The second element of the HandlerCollection is a DefaultHandler + //which is responsible for serving static content or anything not + //handled by a Handler in the ContextHandlerCollection. + //The third element is the RequestLogHandler, which requires + //a RequestLog impl to be set. + Handler[] handlers = new Handler[3]; + handlers[0] = contextHandlerCollection; + handlers[1] = defaultHandler; + handlers[2] = requestLogHandler; + server.setHandler(handlerCollection); + stats = new JettyWebContainerStatsImpl(); this.manager = manager; } @@ -78,63 +105,64 @@ } public void resetStatistics() { - server.statsReset(); + //TODO: for jetty6 } public void setCollectStatistics(boolean on) { - server.setStatsOn(on); - stats.setStatsOn(on); + //TODO: for jetty6 } public boolean getCollectStatistics() { - return server.getStatsOn(); + //TODO: for jetty6 + return false; } public long getCollectStatisticsStarted() { - return server.getStatsOnMs(); + //TODO: for jetty6 + return 0L; } public Stats getStats() { if (getCollectStatistics()) { /* set active request count */ - stats.getTotalRequestCountImpl().setCount(server.getRequests()); +// stats.getTotalRequestCountImpl().setCount(server.getRequests()); /* set total connection count */ - stats.getTotalConnectionCountImpl().setCount(server.getConnections()); +// stats.getTotalConnectionCountImpl().setCount(server.getConnections()); /* set total error count */ - stats.getTotalErrorCountImpl().setCount(server.getErrors()); +// stats.getTotalErrorCountImpl().setCount(server.getErrors()); /* set active request range values */ - stats.getActiveRequestCountImpl().setCurrent(server.getRequestsActive()); - stats.getActiveRequestCountImpl().setLowWaterMark(server.getRequestsActiveMin()); - stats.getActiveRequestCountImpl().setHighWaterMark(server.getRequestsActiveMax()); +// stats.getActiveRequestCountImpl().setCurrent(server.getRequestsActive()); +// stats.getActiveRequestCountImpl().setLowWaterMark(server.getRequestsActiveMin()); +// stats.getActiveRequestCountImpl().setHighWaterMark(server.getRequestsActiveMax()); /* set connection requests range values */ // stats.getConnectionRequestCountImpl().setCurrent(server.getConnectionsRequestsCurrent()); // temporarily removed until added by jetty - stats.getConnectionRequestCountImpl().setCurrent(server.getConnectionsOpen()); - stats.getConnectionRequestCountImpl().setLowWaterMark(server.getConnectionsRequestsMin()); - stats.getConnectionRequestCountImpl().setHighWaterMark(server.getConnectionsRequestsMax()); +// stats.getConnectionRequestCountImpl().setCurrent(server.getConnectionsOpen()); +// stats.getConnectionRequestCountImpl().setLowWaterMark(server.getConnectionsRequestsMin()); +// stats.getConnectionRequestCountImpl().setHighWaterMark(server.getConnectionsRequestsMax()); /* set open connection range values */ - stats.getOpenConnectionCountImpl().setCurrent(server.getConnectionsOpen()); - stats.getOpenConnectionCountImpl().setLowWaterMark(server.getConnectionsOpenMin()); - stats.getOpenConnectionCountImpl().setHighWaterMark(server.getConnectionsOpenMax()); +// stats.getOpenConnectionCountImpl().setCurrent(server.getConnectionsOpen()); +// stats.getOpenConnectionCountImpl().setLowWaterMark(server.getConnectionsOpenMin()); +// stats.getOpenConnectionCountImpl().setHighWaterMark(server.getConnectionsOpenMax()); /* set request duration time values */ - stats.getRequestDurationImpl().setMinTime(server.getRequestsDurationMin()); - stats.getRequestDurationImpl().setMaxTime(server.getRequestsDurationMax()); +// stats.getRequestDurationImpl().setMinTime(server.getRequestsDurationMin()); +// stats.getRequestDurationImpl().setMaxTime(server.getRequestsDurationMax()); // stats.getRequestDurationImpl().setCount(server.getRequestsDurationCount()); // temporarily removed until added by jetty stats.getRequestDurationImpl().setCount(stats.getTotalRequestCount().getCount()); - stats.getRequestDurationImpl().setTotalTime(server.getRequestsDurationTotal()); +// stats.getRequestDurationImpl().setTotalTime(server.getRequestsDurationTotal()); /* set connection duration Time values */ - stats.getConnectionDurationImpl().setMinTime(server.getConnectionsDurationMin()); - stats.getConnectionDurationImpl().setMaxTime(server.getConnectionsDurationMax()); +// stats.getConnectionDurationImpl().setMinTime(server.getConnectionsDurationMin()); +// stats.getConnectionDurationImpl().setMaxTime(server.getConnectionsDurationMax()); // stats.getConnectionDurationImpl().setCount(server.getConnectionsDurationCount()); // temporarily removed until added by jetty stats.getConnectionDurationImpl().setCount(stats.getTotalConnectionCount().getCount()); - stats.getConnectionDurationImpl().setTotalTime(server.getConnectionsDurationTotal()); +// stats.getConnectionDurationImpl().setTotalTime(server.getConnectionsDurationTotal()); } else { // should probably set the stats object to all zero/null values to avoid unpredicable results @@ -142,20 +170,20 @@ return stats; } - public void addListener(HttpListener listener) { - server.addListener(listener); + public void addListener(Connector listener) { + server.addConnector(listener); } - public void removeListener(HttpListener listener) { - server.removeListener(listener); + public void removeListener(Connector listener) { + server.removeConnector(listener); } - public void addContext(HttpContext context) { - server.addContext(context); + public void addContext(ContextHandler context) { + server.addHandler(context); } - public void removeContext(HttpContext context) { - server.removeContext(context); + public void removeContext(ContextHandler context) { + server.removeHandler(context); } public InternalJAASJettyRealm addRealm(String realmName) { @@ -172,20 +200,20 @@ public void removeRealm(String realmName) { InternalJAASJettyRealm realm = (InternalJAASJettyRealm) realms.get(realmName); if (realm != null) { - if (realm.removeUse() == 0){ + if (realm.removeUse() == 0) { realms.remove(realmName); } } } public void addWebService(String contextPath, String[] virtualHosts, WebServiceContainer webServiceContainer, String securityRealmName, String realmName, String transportGuarantee, String authMethod, ClassLoader classLoader) throws Exception { - InternalJAASJettyRealm internalJAASJettyRealm = securityRealmName == null? null:addRealm(securityRealmName); + InternalJAASJettyRealm internalJAASJettyRealm = securityRealmName == null ? null : addRealm(securityRealmName); JettyEJBWebServiceContext webServiceContext = new JettyEJBWebServiceContext(contextPath, webServiceContainer, internalJAASJettyRealm, realmName, transportGuarantee, authMethod, classLoader); - webServiceContext.setHosts(virtualHosts); + webServiceContext.setVirtualHosts(virtualHosts); addContext(webServiceContext); webServiceContext.start(); webServices.put(contextPath, webServiceContext); - } + } public void removeWebService(String contextPath) { JettyEJBWebServiceContext webServiceContext = (JettyEJBWebServiceContext) webServices.remove(contextPath); @@ -193,16 +221,20 @@ if (securityRealmName != null) { removeRealm(securityRealmName); } - removeContext(webServiceContext); + try { + removeContext(webServiceContext); + } catch (Exception e) { + throw new IllegalStateException(e.getMessage()); + } } public void setRequestLog(RequestLog log) { - server.setRequestLog(log); + this.requestLogHandler.setRequestLog(log); } /* ------------------------------------------------------------ */ public RequestLog getRequestLog() { - return server.getRequestLog(); + return this.requestLogHandler.getRequestLog(); } public void doStart() throws Exception { @@ -211,15 +243,15 @@ public void doStop() { try { - server.stop(true); - } catch (InterruptedException e) { + server.stop(); + } catch (Exception e) { } } public void doFail() { try { - server.stop(false); - } catch (InterruptedException e) { + server.stop(); + } catch (Exception e) { // continue } } @@ -234,10 +266,10 @@ infoBuilder.addAttribute("requestLog", RequestLog.class, false, false); - infoBuilder.addOperation("addListener", new Class[]{HttpListener.class}); - infoBuilder.addOperation("removeListener", new Class[]{HttpListener.class}); - infoBuilder.addOperation("addContext", new Class[]{HttpContext.class}); - infoBuilder.addOperation("removeContext", new Class[]{HttpContext.class}); + infoBuilder.addOperation("addListener", new Class[]{Connector.class}); + infoBuilder.addOperation("removeListener", new Class[]{Connector.class}); + infoBuilder.addOperation("addContext", new Class[]{ContextHandler.class}); + infoBuilder.addOperation("removeContext", new Class[]{ContextHandler.class}); infoBuilder.addOperation("addRealm", new Class[]{String.class}); infoBuilder.addOperation("removeRealm", new Class[]{String.class}); Modified: geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyEJBWebServiceContext.java URL: http://svn.apache.org/viewvc/geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyEJBWebServiceContext.java?view=diff&rev=446934&r1=446787&r2=446934 ============================================================================== --- geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyEJBWebServiceContext.java (original) +++ geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyEJBWebServiceContext.java Sat Sep 16 13:09:57 2006 @@ -26,15 +26,14 @@ import org.apache.geronimo.security.ContextManager; import org.apache.geronimo.webservices.WebServiceContainer; -import org.mortbay.http.Authenticator; -import org.mortbay.http.BasicAuthenticator; -import org.mortbay.http.ClientCertAuthenticator; -import org.mortbay.http.DigestAuthenticator; -import org.mortbay.http.HttpContext; -import org.mortbay.http.HttpException; -import org.mortbay.http.HttpHandler; -import org.mortbay.http.HttpRequest; -import org.mortbay.http.HttpResponse; +import org.mortbay.jetty.HttpException; +import org.mortbay.jetty.Request; +import org.mortbay.jetty.Response; +import org.mortbay.jetty.handler.ContextHandler; +import org.mortbay.jetty.security.Authenticator; +import org.mortbay.jetty.security.BasicAuthenticator; +import org.mortbay.jetty.security.ClientCertAuthenticator; +import org.mortbay.jetty.security.DigestAuthenticator; /** * Delegates requests to a WebServiceContainer which is presumably for an EJB WebService. @@ -60,7 +59,7 @@ * * @version $Rev$ $Date$ */ -public class JettyEJBWebServiceContext extends HttpContext implements HttpHandler { +public class JettyEJBWebServiceContext extends ContextHandler { private final String contextPath; private final WebServiceContainer webServiceContainer; @@ -70,14 +69,15 @@ private final boolean isIntegralTransportGuarantee; private final ClassLoader classLoader; - private HttpContext httpContext; public JettyEJBWebServiceContext(String contextPath, WebServiceContainer webServiceContainer, InternalJAASJettyRealm internalJAASJettyRealm, String realmName, String transportGuarantee, String authMethod, ClassLoader classLoader) { this.contextPath = contextPath; this.webServiceContainer = webServiceContainer; if (internalJAASJettyRealm != null) { JAASJettyRealm realm = new JAASJettyRealm(realmName, internalJAASJettyRealm); - setRealm(realm); + //TODO + //not used??? + //setUserRealm(realm); this.realm = realm; if ("NONE".equals(transportGuarantee)) { isConfidentialTransportGuarantee = false; @@ -116,16 +116,13 @@ return contextPath; } - public HttpContext getHttpContext() { - return httpContext; - } - - public void initialize(HttpContext httpContext) { - this.httpContext = httpContext; - } + public boolean handle(Request req, Response res) throws HttpException, IOException { + //TODO + //shouldn't set this on the request ! + //req.setContentType("text/xml"); - public void handle(HttpRequest req, HttpResponse res) throws HttpException, IOException { - req.setContentType("text/xml"); + //TODO + //do we need to check that this request should be handled by this handler? RequestAdapter request = new RequestAdapter(req); ResponseAdapter response = new ResponseAdapter(res); @@ -133,6 +130,7 @@ try { webServiceContainer.getWsdl(request, response); //WHO IS RESPONSIBLE FOR CLOSING OUT? + return true; } catch (IOException e) { throw e; } catch (Exception e) { @@ -140,12 +138,12 @@ } } else { if (isConfidentialTransportGuarantee) { - if (!req.isConfidential()) { - throw new HttpException(403); + if (!req.isSecure()) { + throw new HttpException(403, null); } } else if (isIntegralTransportGuarantee) { - if (!req.isIntegral()) { - throw new HttpException(403); + if (!req.getConnection().isIntegral(req)) { + throw new HttpException(403, null); } } Thread currentThread = Thread.currentThread(); @@ -155,9 +153,9 @@ // Subject oldSubject = ContextManager.getCurrentCaller(); try { if (authenticator != null) { - String pathInContext = org.mortbay.util.URI.canonicalPath(req.getPath()); + String pathInContext = org.mortbay.util.URIUtil.canonicalPath(req.getContextPath()); if (authenticator.authenticate(realm, pathInContext, req, res) == null) { - throw new HttpException(403); + throw new HttpException(403, null); } } else { //EJB will figure out correct defaultSubject shortly @@ -167,7 +165,7 @@ } try { webServiceContainer.invoke(request, response); - req.setHandled(true); + return true; } catch (IOException e) { throw e; } catch (Exception e) { @@ -194,21 +192,21 @@ } public static class RequestAdapter implements WebServiceContainer.Request { - private final HttpRequest request; + private final Request request; private URI uri; - public RequestAdapter(HttpRequest request) { + public RequestAdapter(Request request) { this.request = request; } public String getHeader(String name) { - return request.getField(name); + return request.getHeader(name); } public java.net.URI getURI() { if (uri == null) { try { - String uriString = request.getScheme() + "://" + request.getHost() + ":" + request.getPort() + request.getURI(); + String uriString = request.getScheme() + "://" + request.getRemoteHost() + ":" + request.getRemotePort() + request.getRequestURI(); //return new java.net.URI(uri.getScheme(),uri.getHost(),uri.getPath(),uri.); uri = new java.net.URI(uriString); } catch (URISyntaxException e) { @@ -268,22 +266,26 @@ } public static class ResponseAdapter implements WebServiceContainer.Response { - private final HttpResponse response; + private final Response response; - public ResponseAdapter(HttpResponse response) { + public ResponseAdapter(Response response) { this.response = response; } public void setHeader(String name, String value) { - response.setField(name, value); + response.setHeader(name, value); } public String getHeader(String name) { - return response.getField(name); + return response.getHeader(name); } public OutputStream getOutputStream() { - return response.getOutputStream(); + try { + return response.getOutputStream(); + } catch (IOException e) { + throw new IllegalStateException(e.getMessage()); + } } public void setStatusCode(int code) { Modified: geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyFilterHolder.java URL: http://svn.apache.org/viewvc/geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyFilterHolder.java?view=diff&rev=446934&r1=446787&r2=446934 ============================================================================== --- geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyFilterHolder.java (original) +++ geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyFilterHolder.java Sat Sep 16 13:09:57 2006 @@ -22,7 +22,6 @@ import org.apache.geronimo.gbean.GBeanInfoBuilder; import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory; import org.mortbay.jetty.servlet.FilterHolder; -import org.mortbay.jetty.servlet.WebApplicationHandler; /** * @version $Rev$ $Date$ @@ -34,11 +33,13 @@ } public JettyFilterHolder(String filterName, String filterClass, Map initParams, JettyServletRegistration jettyServletRegistration) throws Exception { - super(jettyServletRegistration == null? null: jettyServletRegistration.getServletHandler(), filterName, filterClass); + super(); if (jettyServletRegistration != null) { - ((WebApplicationHandler)jettyServletRegistration.getServletHandler()).addFilterHolder(this); - putAll(initParams); - + setName(filterName); + setClassName(filterClass); + setInitParameters(initParams); + (jettyServletRegistration.getServletHandler()).addFilter(this); + ClassLoader oldCL = Thread.currentThread().getContextClassLoader(); try { ClassLoader newCL = jettyServletRegistration.getWebClassLoader(); Modified: geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyFilterMapping.java URL: http://svn.apache.org/viewvc/geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyFilterMapping.java?view=diff&rev=446934&r1=446787&r2=446934 ============================================================================== --- geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyFilterMapping.java (original) +++ geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyFilterMapping.java Sat Sep 16 13:09:57 2006 @@ -17,90 +17,93 @@ package org.apache.geronimo.jetty; import java.io.Serializable; +import java.util.Set; import org.apache.geronimo.gbean.GBeanInfo; import org.apache.geronimo.gbean.GBeanInfoBuilder; import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory; import org.mortbay.jetty.servlet.Dispatcher; -import org.mortbay.jetty.servlet.WebApplicationHandler; +import org.mortbay.jetty.servlet.FilterMapping; +import org.mortbay.jetty.Handler; /** * @version $Rev$ $Date$ */ -public class JettyFilterMapping implements Serializable { +public class JettyFilterMapping extends FilterMapping implements Serializable { - private final String urlPattern; + private final String[] urlPatterns; private final boolean requestDispatch; private final boolean forwardDispatch; private final boolean includeDispatch; private final boolean errorDispatch; private final JettyFilterHolder jettyFilterHolder; - private final JettyServletHolder jettyServletHolder; + private final Set jettyServletHolders; private final JettyFilterMapping previous; private final JettyServletRegistration jettyServletRegistration; //todo use an interface for endpoints. public JettyFilterMapping() { - this.urlPattern = null; + this.urlPatterns = null; this.requestDispatch = false; this.forwardDispatch = false; this.includeDispatch = false; this.errorDispatch = false; this.jettyFilterHolder = null; - this.jettyServletHolder = null; + this.jettyServletHolders = null; this.previous = null; this.jettyServletRegistration = null; } - public JettyFilterMapping(String urlPattern, + public JettyFilterMapping(String[] urlPatterns, boolean requestDispatch, boolean forwardDispatch, boolean includeDispatch, boolean errorDispatch, JettyFilterHolder jettyFilterHolder, - JettyServletHolder jettyServletHolder, + Set jettyServletHolders, JettyFilterMapping previous, JettyServletRegistration jettyServletRegistration) { - this.urlPattern = urlPattern; + this.urlPatterns = urlPatterns; this.requestDispatch = requestDispatch; this.forwardDispatch = forwardDispatch; this.includeDispatch = includeDispatch; this.errorDispatch = errorDispatch; this.jettyFilterHolder = jettyFilterHolder; - this.jettyServletHolder = jettyServletHolder; + this.jettyServletHolders = jettyServletHolders; this.previous = previous; this.jettyServletRegistration = jettyServletRegistration; if (jettyServletRegistration != null) { - assert jettyServletHolder != null ^ urlPattern != null; + assert jettyServletHolders != null ^ urlPatterns != null; String filterName = jettyFilterHolder.getFilterName(); int dispatches = 0; if (requestDispatch) { - dispatches |= Dispatcher.__REQUEST; + dispatches |= Handler.REQUEST; } if (forwardDispatch) { - dispatches |= Dispatcher.__FORWARD; + dispatches |= Handler.FORWARD; } if (includeDispatch) { - dispatches |= Dispatcher.__INCLUDE; + dispatches |= Handler.INCLUDE; } if (errorDispatch) { - dispatches |= Dispatcher.__ERROR; + dispatches |= Handler.ERROR; } - if (jettyServletHolder == null) { - ((WebApplicationHandler)jettyServletRegistration.getServletHandler()).addFilterPathMapping(urlPattern, filterName, dispatches); - } else { - String servletName = jettyServletHolder.getServletName(); - ((WebApplicationHandler)jettyServletRegistration.getServletHandler()).addFilterServletMapping(servletName, filterName, dispatches); - } + setFilterName(filterName); + setDispatches(dispatches); + setPathSpecs(urlPatterns); + if (jettyServletHolders != null) + setServletNames((String[])jettyServletHolders.toArray(new String[0])); + + (jettyServletRegistration.getServletHandler()).addFilterMapping(this); } } - public String getUrlPattern() { - return urlPattern; + public String[] getUrlPatterns() { + return urlPatterns; } public boolean isRequestDispatch() { @@ -123,8 +126,8 @@ return jettyFilterHolder; } - public JettyServletHolder getServlet() { - return jettyServletHolder; + public Set getServlets() { + return jettyServletHolders; } public JettyFilterMapping getPrevious() { @@ -139,24 +142,24 @@ static { GBeanInfoBuilder infoBuilder = GBeanInfoBuilder.createStatic(JettyFilterMapping.class, NameFactory.URL_WEB_FILTER_MAPPING); - infoBuilder.addAttribute("urlPattern", String.class, true); + infoBuilder.addAttribute("urlPatterns", String[].class, true); infoBuilder.addAttribute("requestDispatch", boolean.class, true); infoBuilder.addAttribute("forwardDispatch", boolean.class, true); infoBuilder.addAttribute("includeDispatch", boolean.class, true); infoBuilder.addAttribute("errorDispatch", boolean.class, true); infoBuilder.addReference("Filter", JettyFilterHolder.class, NameFactory.WEB_FILTER); - infoBuilder.addReference("Servlet", JettyServletHolder.class, NameFactory.SERVLET); + infoBuilder.addReference("Servlets", JettyServletHolder.class, NameFactory.SERVLET); infoBuilder.addReference("Previous", JettyFilterMapping.class, NameFactory.URL_WEB_FILTER_MAPPING); infoBuilder.addReference("JettyServletRegistration", JettyServletRegistration.class, NameFactory.WEB_MODULE); - infoBuilder.setConstructor(new String[]{"urlPattern", + infoBuilder.setConstructor(new String[]{"urlPatterns", "requestDispatch", "forwardDispatch", "includeDispatch", "errorDispatch", "Filter", - "Servlet", + "Servlets", "Previous", "JettyServletRegistration"}); Modified: geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyManagerImpl.java URL: http://svn.apache.org/viewvc/geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyManagerImpl.java?view=diff&rev=446934&r1=446787&r2=446934 ============================================================================== --- geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyManagerImpl.java (original) +++ geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyManagerImpl.java Sat Sep 16 13:09:57 2006 @@ -20,6 +20,7 @@ import java.util.Iterator; import java.util.List; import java.util.Set; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.geronimo.gbean.AbstractName; @@ -36,7 +37,6 @@ import org.apache.geronimo.jetty.requestlog.JettyLogManager; import org.apache.geronimo.kernel.GBeanNotFoundException; import org.apache.geronimo.kernel.Kernel; -import org.apache.geronimo.kernel.repository.Artifact; import org.apache.geronimo.kernel.config.ConfigurationUtil; import org.apache.geronimo.kernel.config.EditableConfigurationManager; import org.apache.geronimo.kernel.config.InvalidConfigException; Modified: geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyPOJOWebServiceHolder.java URL: http://svn.apache.org/viewvc/geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyPOJOWebServiceHolder.java?view=diff&rev=446934&r1=446787&r2=446934 ============================================================================== --- geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyPOJOWebServiceHolder.java (original) +++ geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyPOJOWebServiceHolder.java Sat Sep 16 13:09:57 2006 @@ -17,7 +17,6 @@ package org.apache.geronimo.jetty; import java.io.IOException; -import java.util.Collections; import java.util.Map; import java.util.Set; @@ -27,6 +26,7 @@ import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.UnavailableException; +import javax.servlet.http.HttpServletRequest; import org.apache.geronimo.gbean.GBeanInfo; import org.apache.geronimo.gbean.GBeanInfoBuilder; @@ -35,8 +35,8 @@ import org.apache.geronimo.webservices.POJOWebServiceServlet; import org.apache.geronimo.webservices.WebServiceContainer; import org.apache.geronimo.webservices.WebServiceContainerInvoker; +import org.mortbay.jetty.Request; import org.mortbay.jetty.servlet.ServletHolder; -import org.mortbay.jetty.servlet.ServletHttpRequest; /** @@ -57,21 +57,23 @@ } public JettyPOJOWebServiceHolder(String pojoClassName, - String servletName, - Map initParams, - Integer loadOnStartup, - Set servletMappings, - WebServiceContainer webServiceContainer, - ServletHolder previous, //dependency for startup ordering - JettyServletRegistration context) throws Exception { - super(context == null ? null : context.getServletHandler(), servletName, POJOWebServiceServlet.class.getName(), null); + String servletName, + Map initParams, + Integer loadOnStartup, + Set servletMappings, + WebServiceContainer webServiceContainer, + ServletHolder previous, //dependency for startup ordering + JettyServletRegistration context) throws Exception { + super(); //context will be null only for use as "default servlet info holder" in deployer. this.pojoClassName = pojoClassName; this.context = context; this.webServiceContainer = webServiceContainer; if (context != null) { - putAll(initParams); + setName(servletName); + setClassName(POJOWebServiceServlet.class.getName()); + setInitParameters(initParams); if (loadOnStartup != null) { setInitOrder(loadOnStartup.intValue()); } @@ -97,7 +99,7 @@ // request.setAttribute(POJOWebServiceServlet.WEBSERVICE_CONTAINER, webServiceContainer); JettyServletHolder.setCurrentServletName(getServletName()); - PolicyContext.setHandlerData(ServletHttpRequest.unwrap(request)); + PolicyContext.setHandlerData(Request.getRequest((HttpServletRequest) request)); super.handle(request, response); } @@ -115,12 +117,12 @@ // put a reference the ID in the init-params // put the WebServiceContainer in the webapp context keyed by its ID String webServicecontainerID = getServletName() + WebServiceContainerInvoker.WEBSERVICE_CONTAINER + webServiceContainer.hashCode(); - put(WebServiceContainerInvoker.WEBSERVICE_CONTAINER, webServicecontainerID); + setInitParameter(WebServiceContainerInvoker.WEBSERVICE_CONTAINER, webServicecontainerID); servletContext.setAttribute(webServicecontainerID, webServiceContainer); // Same for the POJO Class String pojoClassID = getServletName() + POJOWebServiceServlet.POJO_CLASS + pojoClass.hashCode(); - put(POJOWebServiceServlet.POJO_CLASS, pojoClassID); + setInitParameter(POJOWebServiceServlet.POJO_CLASS, pojoClassID); servletContext.setAttribute(pojoClassID, pojoClass); //this now starts the servlet in the appropriate context @@ -130,7 +132,7 @@ } } - public void doStop() throws Exception { + public void doStop() { } public void doFail() { @@ -153,13 +155,13 @@ infoBuilder.addReference("JettyServletRegistration", JettyServletRegistration.class); infoBuilder.setConstructor(new String[]{"pojoClassName", - "servletName", - "initParams", - "loadOnStartup", - "servletMappings", - "webServiceContainer", - "Previous", - "JettyServletRegistration"}); + "servletName", + "initParams", + "loadOnStartup", + "servletMappings", + "webServiceContainer", + "Previous", + "JettyServletRegistration"}); GBEAN_INFO = infoBuilder.getBeanInfo(); } Added: geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettySecurityHandler.java URL: http://svn.apache.org/viewvc/geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettySecurityHandler.java?view=auto&rev=446934 ============================================================================== --- geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettySecurityHandler.java (added) +++ geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettySecurityHandler.java Sat Sep 16 13:09:57 2006 @@ -0,0 +1,304 @@ +/** + * + * Copyright 2004 The Apache Software Foundation + * + * 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.apache.geronimo.jetty; + +import java.io.IOException; +import java.security.AccessControlContext; +import java.security.AccessControlException; +import java.security.PermissionCollection; +import java.security.Principal; + +import javax.security.auth.Subject; +import javax.security.jacc.PolicyContext; +import javax.security.jacc.WebResourcePermission; +import javax.security.jacc.WebUserDataPermission; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.geronimo.common.DeploymentException; +import org.apache.geronimo.common.GeronimoSecurityException; +import org.apache.geronimo.security.ContextManager; +import org.apache.geronimo.security.IdentificationPrincipal; +import org.apache.geronimo.security.SubjectId; +import org.apache.geronimo.security.Callers; +import org.apache.geronimo.security.deploy.DefaultPrincipal; +import org.apache.geronimo.security.util.ConfigurationUtil; +import org.mortbay.jetty.HttpException; +import org.mortbay.jetty.Request; +import org.mortbay.jetty.Response; +import org.mortbay.jetty.security.Authenticator; +import org.mortbay.jetty.security.FormAuthenticator; +import org.mortbay.jetty.security.SecurityHandler; + +public class JettySecurityHandler extends SecurityHandler { + + private String policyContextID; + + private JAASJettyPrincipal defaultPrincipal; + + private String formLoginPath; + + private PermissionCollection checked; + + private PermissionCollection excludedPermissions; + + + private JAASJettyRealm realm; + + public JettySecurityHandler() { + } + + public void init(String policyContextID, + DefaultPrincipal defaultPrincipal, + PermissionCollection checkedPermissions, + PermissionCollection excludedPermissions, + ClassLoader classLoader) { + this.policyContextID = policyContextID; + + this.defaultPrincipal = generateDefaultPrincipal(defaultPrincipal,classLoader); + this.checked = checkedPermissions; + this.excludedPermissions = excludedPermissions; + + Authenticator authenticator = getAuthenticator(); + if (authenticator instanceof FormAuthenticator) { + String formLoginPath = ((FormAuthenticator) authenticator).getLoginPage(); + if (formLoginPath.indexOf('?') > 0) { + formLoginPath = formLoginPath.substring(0, formLoginPath.indexOf('?')); + } + this.formLoginPath = formLoginPath; + } else { + formLoginPath = null; + } + + /** + * Register our default principal with the ContextManager + */ + Subject defaultSubject = this.defaultPrincipal.getSubject(); + ContextManager.registerSubject(defaultSubject); + SubjectId id = ContextManager.getSubjectId(defaultSubject); + defaultSubject.getPrincipals().add(new IdentificationPrincipal(id)); + this.realm = (JAASJettyRealm)getUserRealm(); + assert realm != null; + } + + public void doStop(JettyContainer jettyContainer) throws Exception { + try{ + super.doStop(); + } + finally { + Subject defaultSubject = this.defaultPrincipal.getSubject(); + ContextManager.unregisterSubject(defaultSubject); + jettyContainer.removeRealm(realm.getSecurityRealmName()); + } + } + + /* ------------------------------------------------------------ */ + /* + * @see org.mortbay.jetty.security.SecurityHandler#handle(java.lang.String, + * javax.servlet.http.HttpServletRequest, + * javax.servlet.http.HttpServletResponse, int) + */ + public void handle(String target, HttpServletRequest request, + HttpServletResponse response, int dispatch) throws IOException, + ServletException { + String old_policy_id = PolicyContext.getContextID(); + Callers oldCallers = ContextManager.getCallers(); + + try { + PolicyContext.setContextID(policyContextID); + PolicyContext.setHandlerData(request); + + super.handle(target, request, response, dispatch); + } finally { + PolicyContext.setContextID(old_policy_id); + ContextManager.popCallers(oldCallers); + } + } + +// public static Subject getCurrentRoleDesignate(String role) { +// return ((JettySecurityHandler) (WebAppContext.getCurrentWebAppContext() +// .getSecurityHandler())).getRoleDesignate(role); +// } +// +// private Subject getRoleDesignate(String roleName) { +// return (Subject) roleDesignates.get(roleName); +// } + + /** + * Check the security constraints using JACC. + * + * @param pathInContext + * path in context + * @param request + * HTTP request + * @param response + * HTTP response + * @return true if the path in context passes the security check, false if + * it fails or a redirection has occured during authentication. + */ + public boolean checkSecurityConstraints(String pathInContext, + Request request, Response response) throws HttpException, + IOException { + if (formLoginPath != null) { + String pathToBeTested = (pathInContext.indexOf('?') > 0 ? pathInContext + .substring(0, pathInContext.indexOf('?')) + : pathInContext); + + if (pathToBeTested.equals(formLoginPath)) { + return true; + } + } + + try { + String transportType; + if (request.isSecure()) { + transportType = "CONFIDENTIAL"; + } else if (request.getConnection().isIntegral(request)) { + transportType = "INTEGRAL"; + } else { + transportType = "NONE"; + } + WebUserDataPermission wudp = new WebUserDataPermission(request + .getServletPath(), new String[] { request.getMethod() }, + transportType); + WebResourcePermission webResourcePermission = new WebResourcePermission( + request); + Principal user = obtainUser(pathInContext, request, response, + webResourcePermission, wudp); + + if (user == null) { + return false; + } + if (user == SecurityHandler.__NOBODY) { + return true; + } + + AccessControlContext acc = ContextManager.getCurrentContext(); + + /** + * JACC v1.0 secion 4.1.1 + */ + + acc.checkPermission(wudp); + + /** + * JACC v1.0 secion 4.1.2 + */ + acc.checkPermission(webResourcePermission); + } catch (HttpException he) { + response.sendError(he.getStatus(), he.getReason()); + return false; + } catch (AccessControlException ace) { + response.sendError(403); + return false; + } + return true; + } + + /** + * Obtain an authenticated user, if one is required. Otherwise return the + * default principal.

Also set the current caller for JACC security + * checks for the default principal. This is automatically done by + * JAASJettyRealm. + * + * @param pathInContext + * path in context + * @param request + * HTTP request + * @param response + * HTTP response + * @return null if there is no authenticated user at the + * moment and security checking should not proceed and servlet + * handling should also not proceed, e.g. redirect. + * SecurityConstraint.__NOBODY if security checking + * should not proceed and servlet handling should proceed, e.g. + * login page. + */ + private Principal obtainUser(String pathInContext, Request request, + Response response, WebResourcePermission resourcePermission, + WebUserDataPermission dataPermission) throws IOException { + boolean unauthenticated = !(checked.implies(resourcePermission) || checked + .implies(dataPermission)); + boolean forbidden = excludedPermissions.implies(resourcePermission) + || excludedPermissions.implies(dataPermission); + + Authenticator authenticator = getAuthenticator(); + if (!unauthenticated && !forbidden) { + return authenticator.authenticate(realm, pathInContext, request, + response); + } else if (authenticator instanceof FormAuthenticator + && pathInContext.endsWith(FormAuthenticator.__J_SECURITY_CHECK)) { + /** + * This could be a post request to __J_SECURITY_CHECK. + */ + return authenticator.authenticate(realm, pathInContext, request, + response); + } + + // attempt to access an unprotected resource that is not the + // j_security_check. + // if we are logged in, return the logged in principal. + if (request != null) { + // null response appears to prevent redirect to login page + Principal user = authenticator.authenticate(realm, pathInContext, + request, null); + if (user != null) { + return user; + } + } + + /** + * No authentication is required. Return the defaultPrincipal. + */ + //TODO use run-as as nextCaller if present + ContextManager.setCallers(defaultPrincipal.getSubject(), defaultPrincipal.getSubject()); + return defaultPrincipal; + } + + /** + * Generate the default principal from the security config. + * + * @param defaultPrincipal + * The Geronimo security configuration. + * @param classLoader + * @return the default principal + */ + protected JAASJettyPrincipal generateDefaultPrincipal( + DefaultPrincipal defaultPrincipal, ClassLoader classLoader) + throws GeronimoSecurityException { + + if (defaultPrincipal == null) { + throw new GeronimoSecurityException( + "Unable to generate default principal"); + } + + try { + JAASJettyPrincipal result = new JAASJettyPrincipal("default"); + Subject defaultSubject = ConfigurationUtil.generateDefaultSubject( + defaultPrincipal, classLoader); + + result.setSubject(defaultSubject); + + return result; + } catch (DeploymentException de) { + throw new GeronimoSecurityException( + "Unable to generate default principal", de); + } + } + +} Propchange: geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettySecurityHandler.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettySecurityHandler.java ------------------------------------------------------------------------------ svn:keywords = Date Revision Propchange: geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettySecurityHandler.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Modified: geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyServer.java URL: http://svn.apache.org/viewvc/geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyServer.java?view=diff&rev=446934&r1=446787&r2=446934 ============================================================================== --- geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyServer.java (original) +++ geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyServer.java Sat Sep 16 13:09:57 2006 @@ -16,27 +16,55 @@ */ package org.apache.geronimo.jetty; -import org.mortbay.http.UserRealm; import org.mortbay.jetty.Server; +import org.mortbay.jetty.security.UserRealm; /** * JettyServer extends the base Jetty Server class to prevent managing any user realm information by the web.xml realm name * which is only relevant for basic and digest authentication and should not be tied to any * actual information about which security realm is in use. - * + * * @version $Rev$ $Date$ */ public class JettyServer extends Server { + public void addUserRealms(UserRealm[] realms) { + throw new IllegalArgumentException("You must supply a security-realm-name to every web module using security features"); + } + + public void addUserRealm(UserRealm realm) { + throw new IllegalArgumentException("You must supply a security-realm-name to every web module using security features"); + } + + /** + * TODO maybe remove intead? + * + * @param realm + * @return + * @deprecated + */ public UserRealm addRealm(UserRealm realm) { throw new IllegalArgumentException("You must supply a security-realm-name to every web module using security features"); } + /** + * TODO maybe remove instead? + * + * @param realmName + * @return + * @deprecated + */ public UserRealm getRealm(String realmName) { throw new IllegalArgumentException("You must supply a security-realm-name to every web module using security features"); } + /** + * TODO maybe remove instead? + * + * @param realm + * @deprecated + */ public synchronized void removeRealm(UserRealm realm) { throw new IllegalArgumentException("You must supply a security-realm-name to every web module using security features"); } Modified: geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyServletHolder.java URL: http://svn.apache.org/viewvc/geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyServletHolder.java?view=diff&rev=446934&r1=446787&r2=446934 ============================================================================== --- geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyServletHolder.java (original) +++ geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyServletHolder.java Sat Sep 16 13:09:57 2006 @@ -20,19 +20,18 @@ import java.util.Map; import java.util.Set; +import javax.security.auth.Subject; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.UnavailableException; -import javax.security.auth.Subject; import org.apache.geronimo.gbean.GBeanInfo; import org.apache.geronimo.gbean.GBeanInfoBuilder; import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory; import org.apache.geronimo.management.Servlet; -import org.apache.geronimo.security.ContextManager; import org.apache.geronimo.security.Callers; - +import org.apache.geronimo.security.ContextManager; import org.mortbay.jetty.servlet.ServletHolder; @@ -67,11 +66,14 @@ Subject runAsSubject, ServletHolder previous, //dependency for startup ordering JettyServletRegistration context) throws Exception { - super(context == null ? null : context.getServletHandler(), servletName, servletClassName, jspFile); + super(); + setName(servletName); + setClassName(servletClassName); //context will be null only for use as "default servlet info holder" in deployer. if (context != null) { - putAll(initParams); + setInitParameters(initParams); + setForcedPath(jspFile); if (loadOnStartup != null) { //This has no effect on the actual start order, the gbean references "previous" control that. setInitOrder(loadOnStartup.intValue()); Modified: geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyServletRegistration.java URL: http://svn.apache.org/viewvc/geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyServletRegistration.java?view=diff&rev=446934&r1=446787&r2=446934 ============================================================================== --- geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyServletRegistration.java (original) +++ geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyServletRegistration.java Sat Sep 16 13:09:57 2006 @@ -16,9 +16,7 @@ */ package org.apache.geronimo.jetty; -import java.util.Map; import java.util.Set; -import javax.security.jacc.PolicyContextException; import org.mortbay.jetty.servlet.ServletHandler; import org.mortbay.jetty.servlet.ServletHolder; Added: geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyThreadPool.java URL: http://svn.apache.org/viewvc/geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyThreadPool.java?view=auto&rev=446934 ============================================================================== --- geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyThreadPool.java (added) +++ geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyThreadPool.java Sat Sep 16 13:09:57 2006 @@ -0,0 +1,61 @@ +package org.apache.geronimo.jetty; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.mortbay.thread.ThreadPool; + +/** + * JettyThreadPool + * + * Class to implement Jetty org.mortbay.jetty.thread.ThreadPool interface + * and delegate to a Geronimo thread pool impl. + * + */ +public class JettyThreadPool implements ThreadPool { + + private org.apache.geronimo.pool.ThreadPool geronimoThreadPool; + + public JettyThreadPool(org.apache.geronimo.pool.ThreadPool geronimoThreadPool) { + this.geronimoThreadPool = geronimoThreadPool; + } + + + public boolean dispatch(Runnable work) { + this.geronimoThreadPool.execute(work); + return true; + //what has changed? +// try { +// this.geronimoThreadPool.execute(work); +// return true; +// } +// catch (Exception e) { +// log.warn(e); +// return false; +// } + } + + /** + * Jetty method. Caller wants to wait until the + * thread pool has stopped. + * + * @see org.mortbay.thread.ThreadPool#join() + */ + public void join() throws InterruptedException { + throw new UnsupportedOperationException("join not supported"); + } + + public int getThreads() { + return this.geronimoThreadPool.getPoolSize(); + } + + public int getIdleThreads() { + //TODO: not supported in geronimo thread pool + return 0; + } + + public boolean isLowOnThreads() { + // TODO: not supported in geronimo thread pool + return false; + } + +} Propchange: geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyThreadPool.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyThreadPool.java ------------------------------------------------------------------------------ svn:keywords = Date Revision Propchange: geronimo/sandbox/javaee5/modules-jee5/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty/JettyThreadPool.java ------------------------------------------------------------------------------ svn:mime-type = text/plain