cocoon-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From reinh...@apache.org
Subject svn commit: r806346 [3/3] - in /cocoon/cocoon3/trunk: cocoon-profiling/ cocoon-profiling/src/main/java/org/ cocoon-profiling/src/main/java/org/apache/ cocoon-profiling/src/main/java/org/apache/cocoon/ cocoon-profiling/src/main/java/org/apache/cocoon/pr...
Date Thu, 20 Aug 2009 20:43:22 GMT
Added: cocoon/cocoon3/trunk/cocoon-profiling/src/main/resources/META-INF/cocoon/spring/cocoon-profiling-component.xml
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-profiling/src/main/resources/META-INF/cocoon/spring/cocoon-profiling-component.xml?rev=806346&view=auto
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-profiling/src/main/resources/META-INF/cocoon/spring/cocoon-profiling-component.xml (added)
+++ cocoon/cocoon3/trunk/cocoon-profiling/src/main/resources/META-INF/cocoon/spring/cocoon-profiling-component.xml Thu Aug 20 20:43:20 2009
@@ -0,0 +1,111 @@
+<?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.
+ -->
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xmlns:aop="http://www.springframework.org/schema/aop"
+  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.5.xsd
+  http://www.springframework.org/schema/aop
+  http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
+  http://cocoon.apache.org/schema/configurator http://cocoon.apache.org/schema/configurator/cocoon-configurator-1.0.1.xsd
+  ">
+
+  <!-- spring -->
+  <bean id="org.apache.cocoon.profiling.spring.AutomaticProfilerInstaller"
+    class="org.apache.cocoon.profiling.spring.AutomaticProfilerInstaller"
+    init-method="installProfilers">
+    <property name="servletInvocationDispatcher" ref="org.apache.cocoon.profiling.aspects.ServletInvocationDispatcher" />
+    <property name="pipelineComponentInvocationDispatcher" ref="org.apache.cocoon.profiling.aspects.PipelineComponentInvocationDispatcher" />
+    <property name="pipelineInvocationDispatcher" ref="org.apache.cocoon.profiling.aspects.PipelineInvocationDispatcher" />
+    <property name="sitemapNodeInvocationDispatcher" ref="org.apache.cocoon.profiling.aspects.SitemapNodeInvocationDispatcher" />
+    <property name="profilingDataManager" ref="org.apache.cocoon.profiling.data.ProfilingDataManager" />
+    <property name="profilingIdGenerator" ref="org.apache.cocoon.profiling.data.ProfilingIdGenerator" />
+    <property name="profilers">
+      <configurator:bean-map type="org.apache.cocoon.profiling.profiler.Profiler" check-parent="true" />
+    </property>
+  </bean>
+
+  <!--  aspects -->
+  <bean id="org.apache.cocoon.profiling.aspects.ServletProfilingAspect" class="org.apache.cocoon.profiling.aspects.ServletProfilingAspect">
+    <property name="invocationDispatcher" ref="org.apache.cocoon.profiling.aspects.ServletInvocationDispatcher" />
+    <property name="profilingManagement" ref="org.apache.cocoon.profiling.jmx.ProfilingMBean"/>
+  </bean>
+
+  <bean id="org.apache.cocoon.profiling.aspects.PipelineComponentProfilingAspect" class="org.apache.cocoon.profiling.aspects.PipelineComponentProfilingAspect">
+    <property name="invocationDispatcher" ref="org.apache.cocoon.profiling.aspects.PipelineComponentInvocationDispatcher" />
+    <property name="profilingManagement" ref="org.apache.cocoon.profiling.jmx.ProfilingMBean"/>
+  </bean>
+
+  <bean id="org.apache.cocoon.profiling.aspects.PipelineProfilingAspect" class="org.apache.cocoon.profiling.aspects.PipelineProfilingAspect">
+    <property name="invocationDispatcher" ref="org.apache.cocoon.profiling.aspects.PipelineInvocationDispatcher" />
+    <property name="profilingManagement" ref="org.apache.cocoon.profiling.jmx.ProfilingMBean"/>
+  </bean>
+
+  <bean id="org.apache.cocoon.profiling.aspects.SitemapNodeProfilingAspect" class="org.apache.cocoon.profiling.aspects.SitemapNodeProfilingAspect">
+    <property name="invocationDispatcher" ref="org.apache.cocoon.profiling.aspects.SitemapNodeInvocationDispatcher" />
+    <property name="profilingManagement" ref="org.apache.cocoon.profiling.jmx.ProfilingMBean"/>
+  </bean>
+
+  <!-- dispatcher -->
+  <bean id="org.apache.cocoon.profiling.aspects.ServletInvocationDispatcher" class="org.apache.cocoon.profiling.aspects.InvocationDispatcher" />
+  <bean id="org.apache.cocoon.profiling.aspects.PipelineComponentInvocationDispatcher" class="org.apache.cocoon.profiling.aspects.InvocationDispatcher" />
+  <bean id="org.apache.cocoon.profiling.aspects.PipelineInvocationDispatcher" class="org.apache.cocoon.profiling.aspects.InvocationDispatcher" />
+  <bean id="org.apache.cocoon.profiling.aspects.SitemapNodeInvocationDispatcher" class="org.apache.cocoon.profiling.aspects.InvocationDispatcher" />
+
+  <!-- profilers -->
+  <bean id="org.apache.cocoon.profiling.profiler.ServletProfiler" class="org.apache.cocoon.profiling.profiler.ServletProfiler" />
+  <bean id="org.apache.cocoon.profiling.profiler.PipelineComponentProfiler" class="org.apache.cocoon.profiling.profiler.PipelineComponentProfiler" />
+  <bean id="org.apache.cocoon.profiling.profiler.PipelineProfiler" class="org.apache.cocoon.profiling.profiler.PipelineProfiler" />
+  <bean id="org.apache.cocoon.profiling.profiler.SitemapNodeProfiler" class="org.apache.cocoon.profiling.profiler.SitemapNodeProfiler" />
+  <bean id="org.apache.cocoon.profiling.profiler.MatchNodeProfiler" class="org.apache.cocoon.profiling.profiler.MatchNodeProfiler" />
+  <bean id="org.apache.cocoon.profiling.profiler.GenerateNodeProfiler" class="org.apache.cocoon.profiling.profiler.GenerateNodeProfiler" />
+  <bean id="org.apache.cocoon.profiling.profiler.PipelineNodeProfiler" class="org.apache.cocoon.profiling.profiler.PipelineNodeProfiler" />
+  <bean id="org.apache.cocoon.profiling.profiler.TransformNodeProfiler" class="org.apache.cocoon.profiling.profiler.TransformNodeProfiler" />
+
+  <!-- jmx -->
+  <bean id="org.apache.cocoon.profiling.jmx.ProfilingMBean" class="org.apache.cocoon.profiling.jmx.ProfilingManagement"/>
+
+  <!-- cocoon components -->
+  <bean name="generator:profiling" class="org.apache.cocoon.profiling.component.ProfilingGenerator" scope="prototype">
+    <property name="profilingDataHolder" ref="org.apache.cocoon.profiling.data.ProfilingDataHolder" />
+  </bean>
+
+  <bean name="serializer:profilingpng" class="org.apache.cocoon.profiling.component.ProfilingPngSerializer" scope="prototype">
+    <property name="profilingDataHolder" ref="org.apache.cocoon.profiling.data.ProfilingDataHolder" />
+  </bean>
+
+  <!-- misc components -->
+  <bean id="org.apache.cocoon.profiling.data.ProfilingDataManager" class="org.apache.cocoon.profiling.data.ProfilingDataManagerImpl">
+    <property name="profilingDataHolder" ref="org.apache.cocoon.profiling.data.ProfilingDataHolder" />
+  </bean>
+
+  <bean id="org.apache.cocoon.profiling.data.ProfilingDataHolder" class="org.apache.cocoon.profiling.data.EhCacheProfilingDataHolder" init-method="setupCache">
+  	<property name="cacheManager" ref="cacheManager"/>
+  	<property name="cacheName" value="profilingCache" />
+  </bean>
+  
+  <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
+  	<property name="configLocation" value="classpath:/META-INF/ehcache/cocoon-profiling-ehcache.xml" />
+  </bean>
+  
+  <bean id="org.apache.cocoon.profiling.data.ProfilingIdGenerator" class="org.apache.cocoon.profiling.data.UUIDProfilingIdGenerator" />
+
+  <aop:aspectj-autoproxy />
+</beans>

Propchange: cocoon/cocoon3/trunk/cocoon-profiling/src/main/resources/META-INF/cocoon/spring/cocoon-profiling-component.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/cocoon3/trunk/cocoon-profiling/src/main/resources/META-INF/cocoon/spring/cocoon-profiling-component.xml
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: cocoon/cocoon3/trunk/cocoon-profiling/src/main/resources/META-INF/cocoon/spring/cocoon-profiling-component.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Added: cocoon/cocoon3/trunk/cocoon-profiling/src/main/resources/META-INF/cocoon/spring/cocoon-profiling-servlet-service.xml
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-profiling/src/main/resources/META-INF/cocoon/spring/cocoon-profiling-servlet-service.xml?rev=806346&view=auto
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-profiling/src/main/resources/META-INF/cocoon/spring/cocoon-profiling-servlet-service.xml (added)
+++ cocoon/cocoon3/trunk/cocoon-profiling/src/main/resources/META-INF/cocoon/spring/cocoon-profiling-servlet-service.xml Thu Aug 20 20:43:20 2009
@@ -0,0 +1,30 @@
+<?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
+  und
+-->
+<!-- $Id$ -->
+<beans xmlns="http://www.springframework.org/schema/beans"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xmlns:servlet="http://cocoon.apache.org/schema/servlet"
+  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+  http://cocoon.apache.org/schema/servlet http://cocoon.apache.org/schema/servlet/cocoon-servlet-1.0.xsd">
+
+  <bean id="org.apache.cocoon.profiling.servlet" class="org.apache.cocoon.servlet.XMLSitemapServlet">
+    <servlet:context mount-path="/cocoon-profiling" context-path="blockcontext:/cocoon-profiling/"/>
+  </bean>
+</beans>

Propchange: cocoon/cocoon3/trunk/cocoon-profiling/src/main/resources/META-INF/cocoon/spring/cocoon-profiling-servlet-service.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/cocoon3/trunk/cocoon-profiling/src/main/resources/META-INF/cocoon/spring/cocoon-profiling-servlet-service.xml
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: cocoon/cocoon3/trunk/cocoon-profiling/src/main/resources/META-INF/cocoon/spring/cocoon-profiling-servlet-service.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Added: cocoon/cocoon3/trunk/cocoon-profiling/src/main/resources/META-INF/ehcache/cocoon-profiling-ehcache.xml
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-profiling/src/main/resources/META-INF/ehcache/cocoon-profiling-ehcache.xml?rev=806346&view=auto
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-profiling/src/main/resources/META-INF/ehcache/cocoon-profiling-ehcache.xml (added)
+++ cocoon/cocoon3/trunk/cocoon-profiling/src/main/resources/META-INF/ehcache/cocoon-profiling-ehcache.xml Thu Aug 20 20:43:20 2009
@@ -0,0 +1,33 @@
+<?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.
+ -->
+<ehcache>
+  <diskStore path="java.io.tmpdir" />
+
+  <defaultCache name="defaultCache" maxElementsInMemory="10"
+    eternal="false" overflowToDisk="true" timeToIdleSeconds="0"
+    timeToLiveSeconds="0" diskPersistent="true" diskExpiryThreadIntervalSeconds="120"
+    memoryStoreEvictionPolicy="FIFO" maxElementsOnDisk="1000"/>
+
+  <cache name="profilingCache" maxElementsInMemory="10"
+    eternal="false" overflowToDisk="true" timeToIdleSeconds="0"
+    timeToLiveSeconds="0" diskPersistent="true" diskExpiryThreadIntervalSeconds="120" 
+    memoryStoreEvictionPolicy="FIFO" maxElementsOnDisk="1000"/>
+
+</ehcache>

Propchange: cocoon/cocoon3/trunk/cocoon-profiling/src/main/resources/META-INF/ehcache/cocoon-profiling-ehcache.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/cocoon3/trunk/cocoon-profiling/src/main/resources/META-INF/ehcache/cocoon-profiling-ehcache.xml
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: cocoon/cocoon3/trunk/cocoon-profiling/src/main/resources/META-INF/ehcache/cocoon-profiling-ehcache.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Added: cocoon/cocoon3/trunk/cocoon-profiling/src/main/resources/output.xsd
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-profiling/src/main/resources/output.xsd?rev=806346&view=auto
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-profiling/src/main/resources/output.xsd (added)
+++ cocoon/cocoon3/trunk/cocoon-profiling/src/main/resources/output.xsd Thu Aug 20 20:43:20 2009
@@ -0,0 +1,150 @@
+<?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
+  und
+-->
+  <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+	<xs:element name="value" type="xs:string"/>
+	<xs:element name="servlet">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="invocations"/>
+				<xs:element ref="children"/>
+			</xs:sequence>
+			<xs:attribute name="profiler" type="xs:string" use="required"/>
+			<xs:attribute name="name" use="required">
+				<xs:simpleType>
+					<xs:restriction base="xs:string">
+						<xs:enumeration value="XMLSitemapServlet"/>
+					</xs:restriction>
+				</xs:simpleType>
+			</xs:attribute>
+			<xs:attribute name="executionTime" type="xs:string" use="required"/>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="return-value">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="value"/>
+			</xs:sequence>
+			<xs:attribute name="class" type="xs:string" use="required"/>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="result">
+		<xs:complexType>
+			<xs:choice>
+				<xs:element ref="return-value"/>
+				<xs:element ref="exception"/>
+			</xs:choice>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="exception">
+		<xs:complexType>
+			<xs:attribute name="class" type="xs:string" use="required"/>
+			<xs:attribute name="message" type="xs:string" use="required"/>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="property">
+		<xs:complexType>
+			<xs:simpleContent>
+				<xs:extension base="xs:string">
+					<xs:attribute name="id" type="xs:string" use="required"/>
+				</xs:extension>
+			</xs:simpleContent>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="properties">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="property" minOccurs="0" maxOccurs="unbounded"/>
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="node">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="invocations"/>
+				<xs:element ref="children"/>
+			</xs:sequence>
+			<xs:attribute name="profiler" type="xs:string" use="required"/>
+			<xs:attribute name="name" type="xs:string" use="required"/>
+			<xs:attribute name="executionTime" type="xs:string" use="required"/>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="invocations">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="invocation" maxOccurs="unbounded"/>
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="invocation">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="properties"/>
+				<xs:element ref="arguments"/>
+				<xs:element ref="result"/>
+			</xs:sequence>
+			<xs:attribute name="method" type="xs:string" use="required"/>
+			<xs:attribute name="executionTime" type="xs:string" use="required"/>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="component">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="invocations"/>
+				<xs:element ref="children"/>
+			</xs:sequence>
+			<xs:attribute name="profiler" type="xs:string" use="required"/>
+			<xs:attribute name="name" type="xs:string" use="required"/>
+			<xs:attribute name="executionTime" type="xs:string" use="required"/>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="cocoon-profiling">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="servlet"/>
+			</xs:sequence>
+			<xs:attribute name="id" type="xs:string" use="required"/>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="children">
+		<xs:complexType>
+			<xs:choice minOccurs="0">
+				<xs:element ref="component"/>
+				<xs:element ref="node" maxOccurs="unbounded"/>
+				<xs:element ref="servlet" maxOccurs="unbounded"/>
+			</xs:choice>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="arguments">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="argument" minOccurs="0" maxOccurs="unbounded"/>
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="argument">
+		<xs:complexType>
+			<xs:simpleContent>
+				<xs:extension base="xs:string">
+					<xs:attribute name="class" type="xs:string" use="required"/>
+				</xs:extension>
+			</xs:simpleContent>
+		</xs:complexType>
+	</xs:element>
+</xs:schema>

Propchange: cocoon/cocoon3/trunk/cocoon-profiling/src/main/resources/output.xsd
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/cocoon3/trunk/cocoon-profiling/src/main/resources/output.xsd
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: cocoon/cocoon3/trunk/cocoon-profiling/src/main/resources/output.xsd
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Added: cocoon/cocoon3/trunk/cocoon-profiling/src/test/java/org/apache/cocoon/profiling/TestServletProfiler.java
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-profiling/src/test/java/org/apache/cocoon/profiling/TestServletProfiler.java?rev=806346&view=auto
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-profiling/src/test/java/org/apache/cocoon/profiling/TestServletProfiler.java (added)
+++ cocoon/cocoon3/trunk/cocoon-profiling/src/test/java/org/apache/cocoon/profiling/TestServletProfiler.java Thu Aug 20 20:43:20 2009
@@ -0,0 +1,60 @@
+/*
+ * 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.cocoon.profiling;
+
+import static org.junit.Assert.*;
+
+import org.apache.cocoon.profiling.profiler.ServletProfiler;
+import org.junit.Before;
+import org.junit.Test;
+
+public class TestServletProfiler {
+
+    private ServletProfiler servletProfiler;
+
+    @Before
+    public void setup() {
+        this.servletProfiler = new ServletProfiler();
+        this.servletProfiler.setMountPath("/myproject/");
+    }
+
+    @Test
+    public void testRelativeUrl() {
+        assertEquals("controller/profiling/ID", this.servletProfiler.createRelativeUrl(
+                "http://localhost/myproject/home.html", "ID"));
+
+        assertEquals("../controller/profiling/ID", this.servletProfiler.createRelativeUrl(
+                "http://localhost/myproject/foo/home.html", "ID"));
+
+        assertEquals("../../controller/profiling/ID", this.servletProfiler.createRelativeUrl(
+                "http://localhost/myproject/foo/bar/home.html", "ID"));
+
+        assertEquals("../../../controller/profiling/ID", this.servletProfiler.createRelativeUrl(
+                "http://localhost/myproject/foo/bar/buz/home.html", "ID"));
+
+        assertEquals("../../../controller/profiling/ID", this.servletProfiler.createRelativeUrl(
+                "http://localhost/myproject/foo/bar/buz/home.html?a=1", "ID"));
+
+        assertEquals("../../../controller/profiling/ID", this.servletProfiler.createRelativeUrl(
+                "http://localhost/myproject/foo/bar/buz/home.html?a=1&b=2", "ID"));
+
+        assertEquals("../../../controller/profiling/ID", this.servletProfiler.createRelativeUrl(
+                "http://localhost/myproject/foo/bar/buz/home.html?a=1&b=/", "ID"));
+    }
+}

Propchange: cocoon/cocoon3/trunk/cocoon-profiling/src/test/java/org/apache/cocoon/profiling/TestServletProfiler.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/cocoon3/trunk/cocoon-profiling/src/test/java/org/apache/cocoon/profiling/TestServletProfiler.java
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: cocoon/cocoon3/trunk/cocoon-profiling/src/test/java/org/apache/cocoon/profiling/TestServletProfiler.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: cocoon/cocoon3/trunk/cocoon-profiling/src/test/resources/org/apache/cocoon/profiling/simple.xml
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-profiling/src/test/resources/org/apache/cocoon/profiling/simple.xml?rev=806346&view=auto
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-profiling/src/test/resources/org/apache/cocoon/profiling/simple.xml (added)
+++ cocoon/cocoon3/trunk/cocoon-profiling/src/test/resources/org/apache/cocoon/profiling/simple.xml Thu Aug 20 20:43:20 2009
@@ -0,0 +1,17 @@
+<?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.
+  -->
+
+<simple>simple-text</simple>

Propchange: cocoon/cocoon3/trunk/cocoon-profiling/src/test/resources/org/apache/cocoon/profiling/simple.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/cocoon3/trunk/cocoon-profiling/src/test/resources/org/apache/cocoon/profiling/simple.xml
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: cocoon/cocoon3/trunk/cocoon-profiling/src/test/resources/org/apache/cocoon/profiling/simple.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Added: cocoon/cocoon3/trunk/cocoon-sample-webapp/src/test/java/org/apache/cocoon/it/ProfilingTest.java
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-sample-webapp/src/test/java/org/apache/cocoon/it/ProfilingTest.java?rev=806346&view=auto
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-sample-webapp/src/test/java/org/apache/cocoon/it/ProfilingTest.java (added)
+++ cocoon/cocoon3/trunk/cocoon-sample-webapp/src/test/java/org/apache/cocoon/it/ProfilingTest.java Thu Aug 20 20:43:20 2009
@@ -0,0 +1,41 @@
+/*
+ * 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.cocoon.it;
+
+/**
+ * Test profiling.
+ */
+public class ProfilingTest extends CocoonHtmlUnitTestCase {
+
+    public void testCachingPipeline() throws Exception {
+        this.loadResponse("caching-pipeline/on");
+        this.loadResponse("caching-pipeline/on");
+        String profilingId = this.response.getResponseHeaderValue("X-Cocoon-Profiling-ID");
+        assertNotNull("Profiling ID not found", profilingId);
+
+        this.loadResponse("controller/profiling/" + profilingId);
+        assertEquals(200, this.response.getStatusCode());
+        assertTrue(this.response.getContentAsString().length() > 100);
+        assertTrue(this.response.getContentAsString().length() > 100);
+        assertEquals("text/xml", this.response.getContentType());
+
+        this.loadResponse("controller/profiling/" + profilingId + ".png");
+        assertEquals(200, this.response.getStatusCode());
+        assertTrue(this.response.getContentAsString().length() > 100);
+        assertEquals("image/png", this.response.getContentType());
+    }
+}

Propchange: cocoon/cocoon3/trunk/cocoon-sample-webapp/src/test/java/org/apache/cocoon/it/ProfilingTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/cocoon3/trunk/cocoon-sample-webapp/src/test/java/org/apache/cocoon/it/ProfilingTest.java
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: cocoon/cocoon3/trunk/cocoon-sample-webapp/src/test/java/org/apache/cocoon/it/ProfilingTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: cocoon/cocoon3/trunk/cocoon-sample/src/main/resources/COB-INF/sitemap.xmap
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-sample/src/main/resources/COB-INF/sitemap.xmap?rev=806346&r1=806345&r2=806346&view=diff
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-sample/src/main/resources/COB-INF/sitemap.xmap (original)
+++ cocoon/cocoon3/trunk/cocoon-sample/src/main/resources/COB-INF/sitemap.xmap Thu Aug 20 20:43:20 2009
@@ -364,6 +364,13 @@
 
     <!-- ~~~~~~~~~~~~~~~~ controller ~~~~~~~~~~~~~~~ -->
     <map:pipeline>
+      <map:match pattern="controller/profiling/{id}.png">
+        <map:serialize type="profilingpng" id="{map:id}" />
+      </map:match>
+      <map:match pattern="controller/profiling/{id}">
+        <map:generate type="profiling" id="{map:id}" />
+        <map:serialize type="xml" />
+      </map:match>
       <map:match pattern="controller/{id}/{name}">
         <controller:call controller="rest-controller" select="org.apache.cocoon.sample.controller.DemoRESTController">
           <map:parameter name="id" value="{map:id}" />

Added: cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/profiling/MockHttpServletRequest.java
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/profiling/MockHttpServletRequest.java?rev=806346&view=auto
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/profiling/MockHttpServletRequest.java (added)
+++ cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/profiling/MockHttpServletRequest.java Thu Aug 20 20:43:20 2009
@@ -0,0 +1,261 @@
+/*
+ * 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.cocoon.profiling;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.security.Principal;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.Locale;
+import java.util.Map;
+
+import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletInputStream;
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+class MockHttpServletRequest implements HttpServletRequest {
+
+    private Map<String, Object> parameters;
+    private String requestURI;
+
+    public MockHttpServletRequest(Map<String, Object> parameters) {
+        this.parameters = parameters;
+    }
+
+    public Object getAttribute(String name) {
+        return null;
+    }
+
+    public Enumeration<String> getAttributeNames() {
+        return null;
+    }
+
+    public String getAuthType() {
+        return null;
+    }
+
+    public String getCharacterEncoding() {
+        return null;
+    }
+
+    public int getContentLength() {
+        return 0;
+    }
+
+    public String getContentType() {
+        return null;
+    }
+
+    public String getContextPath() {
+        return "";
+    }
+
+    public Cookie[] getCookies() {
+        return null;
+    }
+
+    public long getDateHeader(String name) {
+        return 0;
+    }
+
+    public String getHeader(String name) {
+        return null;
+    }
+
+    public Enumeration<String> getHeaderNames() {
+        return null;
+    }
+
+    public Enumeration<String> getHeaders(String name) {
+        return null;
+    }
+
+    public ServletInputStream getInputStream() throws IOException {
+        return null;
+    }
+
+    public int getIntHeader(String name) {
+        return 0;
+    }
+
+    public String getLocalAddr() {
+        return null;
+    }
+
+    public Locale getLocale() {
+        return null;
+    }
+
+    public Enumeration<Locale> getLocales() {
+        return null;
+    }
+
+    public String getLocalName() {
+        return null;
+    }
+
+    public int getLocalPort() {
+        return 0;
+    }
+
+    public String getMethod() {
+        return "GET";
+    }
+
+    public String getParameter(String name) {
+        return this.parameters.get(name).toString();
+    }
+
+    public Map<String, Object> getParameterMap() {
+        return this.parameters;
+    }
+
+    public Enumeration<String> getParameterNames() {
+        return Collections.enumeration(this.parameters.keySet());
+    }
+
+    public String[] getParameterValues(String name) {
+        return new String[] {this.getParameter(name)};
+    }
+
+    public String getPathInfo() {
+        return null;
+    }
+
+    public String getPathTranslated() {
+        return null;
+    }
+
+    public String getProtocol() {
+        return null;
+    }
+
+    public String getQueryString() {
+        return null;
+    }
+
+    public BufferedReader getReader() throws IOException {
+        return null;
+    }
+
+    public String getRealPath(String path) {
+        return null;
+    }
+
+    public String getRemoteAddr() {
+        return null;
+    }
+
+    public String getRemoteHost() {
+        return null;
+    }
+
+    public int getRemotePort() {
+        return 0;
+    }
+
+    public String getRemoteUser() {
+        return null;
+    }
+
+    public RequestDispatcher getRequestDispatcher(String path) {
+        return null;
+    }
+
+    public String getRequestedSessionId() {
+        return null;
+    }
+
+    public String getRequestURI() {
+        return this.requestURI;
+    }
+
+    public void setRequestURI(String uri) {
+        this.requestURI = uri;
+    }
+
+    public StringBuffer getRequestURL() {
+        return new StringBuffer(this.requestURI);
+    }
+
+    public String getScheme() {
+        return null;
+    }
+
+    public String getServerName() {
+        return null;
+    }
+
+    public int getServerPort() {
+        return 0;
+    }
+
+    public String getServletPath() {
+        return "/";
+    }
+
+    public HttpSession getSession() {
+        return null;
+    }
+
+    public HttpSession getSession(boolean create) {
+        return null;
+    }
+
+    public Principal getUserPrincipal() {
+        return null;
+    }
+
+    public boolean isRequestedSessionIdFromCookie() {
+        return false;
+    }
+
+    public boolean isRequestedSessionIdFromUrl() {
+        return false;
+    }
+
+    public boolean isRequestedSessionIdFromURL() {
+        return false;
+    }
+
+    public boolean isRequestedSessionIdValid() {
+        return false;
+    }
+
+    public boolean isSecure() {
+        return false;
+    }
+
+    public boolean isUserInRole(String role) {
+        return false;
+    }
+
+    public void removeAttribute(String name) {
+    }
+
+    public void setAttribute(String name, Object o) {
+    }
+
+    public void setCharacterEncoding(String env) throws UnsupportedEncodingException {
+    }
+}

Propchange: cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/profiling/MockHttpServletRequest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/profiling/MockHttpServletRequest.java
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/profiling/MockHttpServletRequest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/profiling/MockHttpServletResponse.java
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/profiling/MockHttpServletResponse.java?rev=806346&view=auto
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/profiling/MockHttpServletResponse.java (added)
+++ cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/profiling/MockHttpServletResponse.java Thu Aug 20 20:43:20 2009
@@ -0,0 +1,166 @@
+/*
+ * 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.cocoon.profiling;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletResponse;
+
+class MockHttpServletResponse implements HttpServletResponse {
+
+    private String redirect;
+
+    private int statusCode;
+
+    private Map<String, String> headers = new HashMap<String, String>();
+
+    public MockHttpServletResponse() {
+        super();
+    }
+
+    public String getHeader(String name) {
+        return this.headers.get(name);
+    }
+
+    public void addCookie(Cookie cookie) {
+    }
+
+    public void addDateHeader(String name, long date) {
+    }
+
+    public void addHeader(String name, String value) {
+        this.headers.put(name, value);
+    }
+
+    public void setHeader(String name, String value) {
+        this.headers.put(name, value);
+    }
+
+    public void addIntHeader(String name, int value) {
+    }
+
+    public boolean containsHeader(String name) {
+        return false;
+    }
+
+    public String encodeRedirectUrl(String url) {
+        return url;
+    }
+
+    public String encodeRedirectURL(String url) {
+        return url;
+    }
+
+    public String encodeUrl(String url) {
+        return null;
+    }
+
+    public String encodeURL(String url) {
+        return null;
+    }
+
+    public void flushBuffer() throws IOException {
+    }
+
+    public int getBufferSize() {
+        return 0;
+    }
+
+    public String getCharacterEncoding() {
+        return null;
+    }
+
+    public String getContentType() {
+        return null;
+    }
+
+    public Locale getLocale() {
+        return null;
+    }
+
+    public ServletOutputStream getOutputStream() throws IOException {
+        return null;
+    }
+
+    public PrintWriter getWriter() throws IOException {
+        return null;
+    }
+
+    public boolean hasRedirected() {
+        return this.redirect != null;
+    }
+
+    public boolean isCommitted() {
+        return false;
+    }
+
+    public void reset() {
+    }
+
+    public void resetBuffer() {
+    }
+
+    public void sendError(int sc) throws IOException {
+    }
+
+    public void sendError(int sc, String msg) throws IOException {
+    }
+
+    public void sendRedirect(String location) throws IOException {
+        this.redirect = location;
+    }
+
+    public void setBufferSize(int size) {
+    }
+
+    public void setCharacterEncoding(String charset) {
+    }
+
+    public void setContentLength(int len) {
+    }
+
+    public void setContentType(String type) {
+    }
+
+    public void setDateHeader(String name, long date) {
+    }
+
+    public void setIntHeader(String name, int value) {
+    }
+
+    public void setLocale(Locale loc) {
+    }
+
+    public void setStatus(int sc) {
+        this.statusCode = sc;
+    }
+
+    public void setStatus(int sc, String sm) {
+    }
+
+    public int getStatusCode() {
+        return this.statusCode;
+    }
+}

Propchange: cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/profiling/MockHttpServletResponse.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/profiling/MockHttpServletResponse.java
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/profiling/MockHttpServletResponse.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/profiling/MockXMLSitemapServlet.java
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/profiling/MockXMLSitemapServlet.java?rev=806346&view=auto
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/profiling/MockXMLSitemapServlet.java (added)
+++ cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/profiling/MockXMLSitemapServlet.java Thu Aug 20 20:43:20 2009
@@ -0,0 +1,131 @@
+/*
+ * 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.cocoon.profiling;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.cocoon.servlet.node.LastModifiedCollector;
+import org.apache.cocoon.servlet.node.MimeTypeCollector;
+import org.apache.cocoon.servlet.util.HttpContextHelper;
+import org.apache.cocoon.sitemap.Invocation;
+
+class MockXMLSitemapServlet extends HttpServlet implements SitemapServlet {
+
+    private static final long serialVersionUID = 1L;
+
+    private ServletConfig servletConfig;
+    private String version = "3";
+    private ProfilingIntegrationTest test;
+
+    @Override
+    public void init(ServletConfig config) throws ServletException {
+        this.servletConfig = config;
+        super.init(this.servletConfig);
+    }
+
+    public void invoke(String requestURI, Map<String, Object> parameters, OutputStream outputStream)
+            throws ServletException {
+
+        Invocation buildInvocation = this.test.buildInvocation(requestURI, parameters);
+
+        this.test.sitemap.invoke(buildInvocation);
+    }
+
+    @Override
+    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException,
+            IOException {
+
+        try {
+            Map<String, Object> parameters = this.getInvocationParameters(request);
+            HttpContextHelper.storeRequest(request, parameters);
+            HttpContextHelper.storeResponse(response, parameters);
+
+            // invoke the sitemap engine
+            ByteArrayOutputStream baos = new ByteArrayOutputStream(8192);
+            this.invoke(this.calcSitemapRequestURI(request), parameters, baos);
+
+            // collect meta information from the previous run of the sitemap
+            // engine
+            long lastModified = LastModifiedCollector.getLastModified();
+            int contentLengh = baos.size();
+
+            // send the Last-Modified header
+            if (lastModified > -1) {
+                response.setDateHeader("Last-Modified", lastModified);
+            }
+
+            response.setHeader("X-Cocoon-Version", this.version);
+
+            // Content-Type handling
+            String mimeType = MimeTypeCollector.getMimeType();
+            if (mimeType == null || "".equals(mimeType) || "content/unknown".equals(mimeType)) {
+                mimeType = this.servletConfig.getServletContext().getMimeType(request.getRequestURI());
+            }
+            if (mimeType != null) {
+                response.setContentType(mimeType);
+            }
+
+            // Status code handling
+            int statusCode = HttpServletResponse.SC_OK;
+            response.setStatus(statusCode);
+
+            // write the sitemap result to the output stream
+            if (contentLengh > 0) {
+                response.setContentLength(contentLengh);
+                response.getOutputStream().write(baos.toByteArray());
+            }
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    private String calcSitemapRequestURI(HttpServletRequest request) {
+        String contextPath = request.getContextPath();
+        String mountPath = request.getServletPath();
+        return request.getRequestURI().substring(contextPath.length() + mountPath.length());
+    }
+
+    @SuppressWarnings("unchecked")
+    private Map<String, Object> getInvocationParameters(HttpServletRequest req) {
+        Map<String, Object> invocationParameters = new HashMap<String, Object>();
+
+        for (Enumeration<String> names = req.getParameterNames(); names.hasMoreElements();) {
+            String name = names.nextElement();
+            invocationParameters.put(name, req.getParameter(name));
+        }
+
+        return invocationParameters;
+    }
+
+    public void setTestcase(ProfilingIntegrationTest test) {
+        this.test = test;
+    }
+}

Propchange: cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/profiling/MockXMLSitemapServlet.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/profiling/MockXMLSitemapServlet.java
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/profiling/MockXMLSitemapServlet.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/profiling/ProfilingIntegrationTest.java
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/profiling/ProfilingIntegrationTest.java?rev=806346&view=auto
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/profiling/ProfilingIntegrationTest.java (added)
+++ cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/profiling/ProfilingIntegrationTest.java Thu Aug 20 20:43:20 2009
@@ -0,0 +1,427 @@
+/*
+ * 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.cocoon.profiling;
+
+import static org.junit.Assert.*;
+
+import java.io.ByteArrayOutputStream;
+import java.net.URL;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.cocoon.pipeline.NonCachingPipeline;
+import org.apache.cocoon.pipeline.Pipeline;
+import org.apache.cocoon.profiling.component.ProfilingGenerator;
+import org.apache.cocoon.profiling.component.ProfilingPngSerializer;
+import org.apache.cocoon.profiling.data.ProfilingData;
+import org.apache.cocoon.profiling.data.ProfilingDataHolder;
+import org.apache.cocoon.profiling.profiler.PipelineComponentProfiler;
+import org.apache.cocoon.sax.component.XMLSerializer;
+import org.apache.cocoon.servlet.util.HttpContextHelper;
+import org.apache.cocoon.servletservice.CallStackHelper;
+import org.apache.cocoon.sitemap.ComponentProvider;
+import org.apache.cocoon.sitemap.Invocation;
+import org.apache.cocoon.sitemap.InvocationImpl;
+import org.apache.cocoon.sitemap.MockServletContext;
+import org.apache.cocoon.sitemap.SitemapBuilder;
+import org.apache.cocoon.sitemap.node.SitemapNode;
+import org.apache.cocoon.sitemap.objectmodel.ObjectModel;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+public class ProfilingIntegrationTest {
+
+    private static final String X_COCOON_PROFILING_ID = "X-Cocoon-Profiling-ID";
+
+    SitemapNode sitemap;
+
+    private static ApplicationContext applicationContext;
+
+    private static ComponentProvider componentProvider;
+
+    private ByteArrayOutputStream output;
+
+    private SitemapServlet servlet;
+
+    @BeforeClass
+    public static void beforeClass() {
+        applicationContext = getApplicationContext();
+        componentProvider = getComponentProvider();
+    }
+
+    @Before
+    public void setup() throws Exception {
+        this.sitemap = this.getSitemap();
+        this.servlet = (SitemapServlet) applicationContext.getBean("MockSitemapServlet");
+        this.servlet.setTestcase(this);
+        this.output = new ByteArrayOutputStream();
+
+        Map<String, Object> emptyMap = Collections.emptyMap();
+        CallStackHelper.enterServlet(new MockServletContext(), new MockHttpServletRequest(emptyMap),
+                new MockHttpServletResponse());
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        CallStackHelper.leaveServlet();
+    }
+
+    private static ApplicationContext getApplicationContext() {
+        return new ClassPathXmlApplicationContext(new String[] {
+
+        "META-INF/cocoon/spring/cocoon-sitemap.xml",
+
+        "META-INF/cocoon/spring/cocoon-pipeline-action.xml",
+
+        "META-INF/cocoon/spring/cocoon-pipeline-component.xml",
+
+        "META-INF/cocoon/spring/cocoon-pipeline.xml",
+
+        "META-INF/cocoon/spring/cocoon-sitemap-node.xml",
+
+        "META-INF/cocoon/spring/cocoon-expression-language.xml",
+
+        "META-INF/cocoon/spring/cocoon-servlet-node.xml",
+
+        "META-INF/cocoon/spring/cocoon-servlet-component.xml",
+
+        "META-INF/cocoon/spring/cocoon-controller.xml",
+
+        "META-INF/cocoon/spring/cocoon-profiling-component.xml",
+
+        "cocoon-profiling-test-component.xml",
+
+        });
+    }
+
+    private static ComponentProvider getComponentProvider() {
+        return (ComponentProvider) applicationContext.getBean("org.apache.cocoon.sitemap.ComponentProvider");
+    }
+
+    private SitemapNode getSitemap() throws Exception {
+        URL sitemapURL = this.getClass().getResource("/COB-INF/sitemap.xmap");
+
+        SitemapBuilder sb = (SitemapBuilder) applicationContext.getBean("org.apache.cocoon.sitemap.SitemapBuilder");
+
+        return sb.build(sitemapURL);
+    }
+
+    @Test
+    @SuppressWarnings("unchecked")
+    public void testSimpleGenerator() throws Exception {
+        String id = "42";
+        ProfilingData profilingData = new ProfilingData();
+        profilingData.setInvocationStartTime(System.nanoTime());
+        profilingData.setInvocationEndTime(System.nanoTime() + 1000000000);
+        profilingData.addData("foo", "bar");
+        profilingData.setProfiler(new PipelineComponentProfiler().getClass().getSimpleName());
+        profilingData.setTarget(new ProfilingPngSerializer());
+        profilingData.setReturnValue(null);
+
+        ProfilingDataHolder holder = (ProfilingDataHolder) applicationContext
+                .getBean("org.apache.cocoon.profiling.data.ProfilingDataHolder");
+
+        holder.store(id, profilingData);
+
+        HashMap<String, Object> configuration = new HashMap<String, Object>();
+        configuration.put("id", id);
+
+        ProfilingGenerator profilingGenerator = new ProfilingGenerator();
+        profilingGenerator.setProfilingDataHolder(holder);
+
+        Pipeline pipeline = new NonCachingPipeline();
+        profilingGenerator.setConfiguration(configuration);
+
+        pipeline.addComponent(profilingGenerator);
+        pipeline.addComponent(new XMLSerializer());
+
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        pipeline.setup(baos, configuration);
+        pipeline.execute();
+
+        String s = baos.toString();
+
+        assertTrue(s.contains("<cocoon-profiling id=\"42\">"));
+        assertTrue(s.contains("<component"));
+        assertTrue(s.contains("<properties><property id=\"foo\">bar</property></properties>"));
+    }
+
+    @Test
+    public void testServletInvocation() throws Exception {
+        Map<String, Object> parameters = new HashMap<String, Object>();
+        MockHttpServletResponse response = this.invokeServlet("/sax-pipeline/simple-xsd", parameters);
+
+        assertEquals("3", response.getHeader("X-Cocoon-Version"));
+
+        String profilingId = response.getHeader(X_COCOON_PROFILING_ID);
+        assertNotNull(profilingId);
+
+        ProfilingDataHolder dataHolder = (ProfilingDataHolder) applicationContext
+                .getBean("org.apache.cocoon.profiling.data.ProfilingDataHolder");
+
+        ProfilingData profilingData = dataHolder.get(profilingId);
+
+        assertTrue(profilingData.getChildren().size() > 0);
+
+        response = this.invokeServlet("/controller/profiling/" + profilingId, new HashMap<String, Object>());
+    }
+
+    @Test
+    public void testSitemap() throws Exception {
+        Map<String, Object> parameters = new HashMap<String, Object>();
+        MockHttpServletResponse response = this.invokeServlet("/", parameters);
+
+        assertEquals("3", response.getHeader("X-Cocoon-Version"));
+
+        String profilingId = response.getHeader(X_COCOON_PROFILING_ID);
+        assertNotNull(profilingId);
+
+        ProfilingDataHolder dataHolder = (ProfilingDataHolder) applicationContext
+                .getBean("org.apache.cocoon.profiling.data.ProfilingDataHolder");
+
+        ProfilingData profilingData = dataHolder.get(profilingId);
+
+        assertTrue(this.containsProfilingData("Sitemap", profilingData, null));
+    }
+
+    @Test
+    public void testMatchEqual() throws Exception {
+        Map<String, Object> parameters = new HashMap<String, Object>();
+        MockHttpServletResponse response = this.invokeServlet("/sax-pipeline/simple", parameters);
+
+        assertEquals("3", response.getHeader("X-Cocoon-Version"));
+
+        String profilingId = response.getHeader(X_COCOON_PROFILING_ID);
+        assertNotNull(profilingId);
+
+        ProfilingDataHolder dataHolder = (ProfilingDataHolder) applicationContext
+                .getBean("org.apache.cocoon.profiling.data.ProfilingDataHolder");
+
+        ProfilingData profilingData = dataHolder.get(profilingId);
+
+        assertTrue(profilingData.getChildren().size() > 0);
+        HashMap<String, String> attributes = new HashMap<String, String>();
+        attributes.put("equals", null);
+        assertTrue(this.containsProfilingData("MatchNode", profilingData, attributes));
+    }
+
+    @Test
+    public void testMatchPattern() throws Exception {
+        Map<String, Object> parameters = new HashMap<String, Object>();
+        MockHttpServletResponse response = this.invokeServlet("/sax-pipeline/simple-xhtml", parameters);
+
+        assertEquals("3", response.getHeader("X-Cocoon-Version"));
+
+        String profilingId = response.getHeader(X_COCOON_PROFILING_ID);
+        assertNotNull(profilingId);
+
+        ProfilingDataHolder dataHolder = (ProfilingDataHolder) applicationContext
+                .getBean("org.apache.cocoon.profiling.data.ProfilingDataHolder");
+
+        ProfilingData profilingData = dataHolder.get(profilingId);
+
+        assertTrue(profilingData.getChildren().size() > 0);
+        HashMap<String, String> attributes = new HashMap<String, String>();
+        attributes.put("pattern", null);
+        assertTrue(this.containsProfilingData("MatchNode", profilingData, attributes));
+    }
+
+    @Test
+    public void testMatchWildcard() throws Exception {
+        Map<String, Object> parameters = new HashMap<String, Object>();
+        MockHttpServletResponse response = this.invokeServlet("/advanced-matching-2", parameters);
+
+        assertEquals("3", response.getHeader("X-Cocoon-Version"));
+
+        String profilingId = response.getHeader(X_COCOON_PROFILING_ID);
+        assertNotNull(profilingId);
+
+        ProfilingDataHolder dataHolder = (ProfilingDataHolder) applicationContext
+                .getBean("org.apache.cocoon.profiling.data.ProfilingDataHolder");
+
+        ProfilingData profilingData = dataHolder.get(profilingId);
+
+        assertTrue(profilingData.getChildren().size() > 0);
+        HashMap<String, String> attributes = new HashMap<String, String>();
+        attributes.put("wildcard", null);
+        assertTrue(this.containsProfilingData("MatchNode", profilingData, attributes));
+
+        // check the nesting of profiling data objects
+        assertTrue(this.checkProfilingDataStructure(profilingData, 0));
+
+        // check parent and child references
+        assertTrue(this.checkProfilingDataReferences(profilingData));
+    }
+
+    @Test
+    public void testMatchRegExp() throws Exception {
+        HashMap<String, Object> parameters = new HashMap<String, Object>();
+        parameters.put("param1", 29);
+
+        MockHttpServletResponse response = this.invokeServlet("/advanced-matching", parameters);
+
+        assertEquals("3", response.getHeader("X-Cocoon-Version"));
+
+        String profilingId = response.getHeader(X_COCOON_PROFILING_ID);
+        assertNotNull(profilingId);
+
+        ProfilingDataHolder dataHolder = (ProfilingDataHolder) applicationContext
+                .getBean("org.apache.cocoon.profiling.data.ProfilingDataHolder");
+
+        ProfilingData profilingData = dataHolder.get(profilingId);
+
+        assertTrue(profilingData.getChildren().size() > 0);
+        HashMap<String, String> attributes = new HashMap<String, String>();
+        attributes.put("regexp", null);
+        assertTrue(this.containsProfilingData("MatchNode", profilingData, attributes));
+    }
+
+    @Test
+    public void testProfilingDataStructure() throws Exception {
+        HashMap<String, Object> parameters = new HashMap<String, Object>();
+        parameters.put("param1", 29);
+
+        MockHttpServletResponse response = this.invokeServlet("/advanced-matching", parameters);
+
+        assertEquals("3", response.getHeader("X-Cocoon-Version"));
+
+        String profilingId = response.getHeader(X_COCOON_PROFILING_ID);
+        assertNotNull(profilingId);
+
+        ProfilingDataHolder dataHolder = (ProfilingDataHolder) applicationContext
+                .getBean("org.apache.cocoon.profiling.data.ProfilingDataHolder");
+
+        ProfilingData profilingData = dataHolder.get(profilingId);
+
+        // check the nesting of profiling data objects
+        assertTrue(this.checkProfilingDataStructure(profilingData, 0));
+
+        // check parent and child references
+        assertTrue(this.checkProfilingDataReferences(profilingData));
+
+        // check invocation times
+        assertTrue(this.checkProfilingDataInvocationTimes(profilingData, null));
+    }
+
+    /**
+     * checks the order of the PD objects according to invocation time
+     */
+    private boolean checkProfilingDataInvocationTimes(ProfilingData data, ProfilingData data2) {
+        for (ProfilingData d : data.getChildren()) {
+            if (d.getInvocationStartTime() < data.getInvocationStartTime()) {
+                return false;
+            }
+
+            if (data2 != null && d.getInvocationStartTime() > data2.getInvocationStartTime()) {
+                return false;
+            }
+            for (int i = 0; i < data.getChildren().size() - 1; i++) {
+                if (!this.checkProfilingDataInvocationTimes(data.getChildren().get(i), data.getChildren().get(i + 1))) {
+                    return false;
+                }
+            }
+            if (!this.checkProfilingDataInvocationTimes(data.getChildren().get(data.getChildren().size() - 1), null)) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * checks the nesting of the ProfilingData objects
+     */
+    private boolean checkProfilingDataStructure(ProfilingData data, int level) {
+        if (data.getInvocationDepth() != level) {
+            return false;
+        }
+        for (ProfilingData d : data.getChildren()) {
+            if (!this.checkProfilingDataStructure(d, level + 1)) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * checks parent and child references
+     */
+    private boolean checkProfilingDataReferences(ProfilingData data) {
+        for (ProfilingData d : data.getChildren()) {
+            if (d.getParent() != data) {
+                return false;
+            }
+            if (!this.checkProfilingDataReferences(d)) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    private MockHttpServletResponse invokeServlet(String requestURI, Map<String, Object> data) throws Exception {
+        MockHttpServletRequest request = new MockHttpServletRequest(data);
+
+        request.setRequestURI(requestURI);
+
+        HttpContextHelper.storeRequest(request, data);
+        MockHttpServletResponse response = new MockHttpServletResponse();
+        HttpContextHelper.storeResponse(response, data);
+
+        // Invocation invocation = this.buildInvocation(requestURI);
+
+        // HttpContextHelper.storeRequest(request, invocation.getParameters());
+
+        // servlet.invoke(requestURI, data, System.out);
+        this.servlet.service(request, response);
+
+        return response;
+    }
+
+    Invocation buildInvocation(String request, Map<String, Object> params) {
+        InvocationImpl invocation = new InvocationImpl(this.output);
+
+        invocation.setBaseURL(this.getClass().getResource("/COB-INF/"));
+        invocation.setRequestURI(request);
+        invocation.setComponentProvider(componentProvider);
+        invocation.setObjectModel(new ObjectModel(params));
+
+        return invocation;
+    }
+
+    private boolean containsProfilingData(String expectedDisplayName, ProfilingData profilingData,
+            Map<String, String> attributes) {
+        String displayName = profilingData.getDisplayName();
+        if (displayName != null && displayName.contains(expectedDisplayName)) {
+            // TODO: check attributes
+            return true;
+        }
+
+        for (ProfilingData pd : profilingData.getChildren()) {
+            if (this.containsProfilingData(expectedDisplayName, pd, attributes)) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+}

Propchange: cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/profiling/ProfilingIntegrationTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/profiling/ProfilingIntegrationTest.java
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/profiling/ProfilingIntegrationTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/profiling/SitemapServlet.java
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/profiling/SitemapServlet.java?rev=806346&view=auto
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/profiling/SitemapServlet.java (added)
+++ cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/profiling/SitemapServlet.java Thu Aug 20 20:43:20 2009
@@ -0,0 +1,31 @@
+/*
+ * 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.cocoon.profiling;
+
+import java.io.OutputStream;
+import java.util.Map;
+
+import javax.servlet.Servlet;
+import javax.servlet.ServletException;
+
+interface SitemapServlet extends Servlet {
+
+    void setTestcase(ProfilingIntegrationTest test);
+
+    void invoke(String requestURI, Map<String, Object> parameters, OutputStream outputStream) throws ServletException;
+}

Propchange: cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/profiling/SitemapServlet.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/profiling/SitemapServlet.java
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/profiling/SitemapServlet.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: cocoon/cocoon3/trunk/cocoon-sample/src/test/resources/cocoon-profiling-test-component.xml
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-sample/src/test/resources/cocoon-profiling-test-component.xml?rev=806346&view=auto
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-sample/src/test/resources/cocoon-profiling-test-component.xml (added)
+++ cocoon/cocoon3/trunk/cocoon-sample/src/test/resources/cocoon-profiling-test-component.xml Thu Aug 20 20:43:20 2009
@@ -0,0 +1,27 @@
+<?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.
+  -->
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xmlns:aop="http://www.springframework.org/schema/aop"
+  xsi:schemaLocation="http://www.springframework.org/schema/beans
+  http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+  http://www.springframework.org/schema/aop
+  http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
+  ">
+
+  <bean id="MockSitemapServlet" class="org.apache.cocoon.profiling.MockXMLSitemapServlet" />
+  <aop:aspectj-autoproxy />
+
+</beans>

Propchange: cocoon/cocoon3/trunk/cocoon-sample/src/test/resources/cocoon-profiling-test-component.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/cocoon3/trunk/cocoon-sample/src/test/resources/cocoon-profiling-test-component.xml
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: cocoon/cocoon3/trunk/cocoon-sample/src/test/resources/cocoon-profiling-test-component.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Modified: cocoon/cocoon3/trunk/parent/pom.xml
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/parent/pom.xml?rev=806346&r1=806345&r2=806346&view=diff
==============================================================================
--- cocoon/cocoon3/trunk/parent/pom.xml (original)
+++ cocoon/cocoon3/trunk/parent/pom.xml Thu Aug 20 20:43:20 2009
@@ -118,6 +118,11 @@
       </dependency>
       <dependency>
         <groupId>org.apache.cocoon</groupId>
+        <artifactId>cocoon-configuration-api</artifactId>
+        <version>1.0.2</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.cocoon</groupId>
         <artifactId>cocoon-spring-configurator</artifactId>
         <version>2.1.0</version>
       </dependency>
@@ -161,6 +166,11 @@
       </dependency>
       <dependency>
         <groupId>org.springframework</groupId>
+        <artifactId>spring-context-support</artifactId>
+        <version>2.5.6</version>
+      </dependency>
+      <dependency>
+        <groupId>org.springframework</groupId>
         <artifactId>spring-dao</artifactId>
         <version>2.5.6</version>
       </dependency>
@@ -180,6 +190,11 @@
         <version>2.5.6</version>
       </dependency>
       <dependency>
+      <groupId>org.springframework</groupId>
+        <artifactId>spring-jmx</artifactId>
+        <version>2.0.8</version>
+      </dependency>
+      <dependency>
         <groupId>org.aspectj</groupId>
         <artifactId>aspectjrt</artifactId>
         <version>1.6.1</version>
@@ -257,6 +272,11 @@
         <version>1.2.14</version>
       </dependency>
       <dependency>
+        <groupId>net.sf.ehcache</groupId>
+        <artifactId>ehcache</artifactId>
+        <version>1.6.1</version>
+      </dependency>
+      <dependency>
         <groupId>net.sourceforge.nekohtml</groupId>
         <artifactId>nekohtml</artifactId>
         <version>1.9.9</version>



Mime
View raw message