You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by gi...@apache.org on 2007/05/21 15:53:17 UTC
svn commit: r540145 - in
/cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main:
java/org/apache/cocoon/servletservice/DispatcherServlet.java
resources/META-INF/cocoon/spring/cocoon-servlet-service-block-servlet-map.xml
Author: giacomo
Date: Mon May 21 06:53:17 2007
New Revision: 540145
URL: http://svn.apache.org/viewvc?view=rev&rev=540145
Log:
make use of collected map of block servlets
Added:
cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/resources/META-INF/cocoon/spring/cocoon-servlet-service-block-servlet-map.xml (with props)
Modified:
cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/DispatcherServlet.java
Modified: cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/DispatcherServlet.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/DispatcherServlet.java?view=diff&rev=540145&r1=540144&r2=540145
==============================================================================
--- cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/DispatcherServlet.java (original)
+++ cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/DispatcherServlet.java Mon May 21 06:53:17 2007
@@ -19,8 +19,6 @@
import java.io.IOException;
import java.lang.reflect.Proxy;
import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
@@ -33,8 +31,6 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.springframework.beans.BeanWrapperImpl;
-import org.springframework.beans.factory.BeanFactoryUtils;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
@@ -52,37 +48,27 @@
public class DispatcherServlet
extends HttpServlet {
- private static final String MOUNT_PATH = "mountPath";
-
- /** All registered mountable servlets. */
- private Map mountableServlets;
-
- /** The startup date of the Spring application context used to setup the mountable servlets. */
- private long applicationContextStartDate;
-
/** By default we use the logger for this class. */
private Log logger = LogFactory.getLog(getClass());
+
+ /** The servlet collector bean */
+ private Map blockServletCollector;
public void init() throws ServletException {
- createMountableServletsMap();
this.log("Block dispatcher was initialized successfully.");
}
protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
- ApplicationContext appContext =
- WebApplicationContextUtils.getRequiredWebApplicationContext(this.getServletContext());
- if (appContext.getStartupDate() != this.applicationContextStartDate) {
- createMountableServletsMap();
- }
-
+ final Map mountableServlets = getBlockServletMap();
String path = req.getPathInfo();
path = path == null ? "" : path;
+
// find the servlet which mount path is the longest prefix of the path info
int index = path.length();
Servlet servlet = null;
while (servlet == null && index != -1) {
path = path.substring(0, index);
- servlet = (Servlet)this.mountableServlets.get(path);
+ servlet = (Servlet)mountableServlets.get(path);
index = path.lastIndexOf('/');
}
if (servlet == null) {
@@ -106,36 +92,6 @@
servlet.service(request, res);
}
- private void createMountableServletsMap() {
- Map mServlets = new HashMap();
- // get the beanFactory from the web application context
- ApplicationContext appContext =
- WebApplicationContextUtils.getRequiredWebApplicationContext(this.getServletContext());
-
- // the returned map contains the bean names as key and the beans as values
- final Map servlets =
- BeanFactoryUtils.beansOfTypeIncludingAncestors(appContext, Servlet.class);
-
- // register and initialize the servlets that have a mount path property
- final Iterator i = servlets.values().iterator();
- while ( i.hasNext() ) {
- final Servlet servlet = (Servlet) i.next();
- BeanWrapperImpl wrapper = new BeanWrapperImpl(servlet);
- if (wrapper.isReadableProperty(MOUNT_PATH)) {
- String mountPath = (String) wrapper.getPropertyValue(MOUNT_PATH);
- this.logger.debug("DispatcherServlet: initializing servlet " + servlet + " at "
- + mountPath);
- mServlets.put(mountPath, servlet);
- }
- }
- this.mountableServlets = mServlets;
-
- // set the application context start date
- this.applicationContextStartDate = appContext.getStartupDate();
-
- this.logger.info("DispatcherServlet is (re)set the table of mountable servlets based on " + appContext);
- }
-
private void getInterfaces(Set interfaces, Class clazz) {
Class[] clazzInterfaces = clazz.getInterfaces();
for (int i = 0; i < clazzInterfaces.length; i++) {
@@ -158,4 +114,14 @@
getInterfaces(interfaces, clazz);
return (Class[]) interfaces.toArray(new Class[interfaces.size()]);
}
+
+ public Map getBlockServletMap()
+ {
+ if(this.blockServletCollector == null) {
+ final ApplicationContext applicationContext =
+ WebApplicationContextUtils.getRequiredWebApplicationContext(this.getServletContext());
+ this.blockServletCollector = (Map)applicationContext.getBean( "org.apache.cocoon.servletservice.spring.BlockServletMap" );
+ }
+ return blockServletCollector;
+ }
}
Added: cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/resources/META-INF/cocoon/spring/cocoon-servlet-service-block-servlet-map.xml
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/resources/META-INF/cocoon/spring/cocoon-servlet-service-block-servlet-map.xml?view=auto&rev=540145
==============================================================================
--- cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/resources/META-INF/cocoon/spring/cocoon-servlet-service-block-servlet-map.xml (added)
+++ cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/resources/META-INF/cocoon/spring/cocoon-servlet-service-block-servlet-map.xml Mon May 21 06:53:17 2007
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<!-- SVN $Id: cocoon-servlet-service-block-path-module.xml 504719 2007-02-07 22:17:36Z danielf $ -->
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:configurator="http://cocoon.apache.org/schema/configurator"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
+ http://cocoon.apache.org/schema/configurator http://cocoon.apache.org/schema/configurator/cocoon-configurator-1.0.2.xsd">
+
+ <configurator:bean-map id="org.apache.cocoon.servletservice.spring.BlockServletMap"
+ type="javax.servlet.Servlet"
+ has-properties="mountPath"
+ key-property="mountPath"/>
+</beans>
Propchange: cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/resources/META-INF/cocoon/spring/cocoon-servlet-service-block-servlet-map.xml
------------------------------------------------------------------------------
svn:eol-style = native