You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ace.apache.org by ma...@apache.org on 2011/10/28 17:22:16 UTC

svn commit: r1190396 - in /incubator/ace/trunk: ./ ace-http-redirector/ ace-http-redirector/src/ ace-http-redirector/src/main/ ace-http-redirector/src/main/java/ ace-http-redirector/src/main/java/org/ ace-http-redirector/src/main/java/org/apache/ ace-h...

Author: marrs
Date: Fri Oct 28 15:22:15 2011
New Revision: 1190396

URL: http://svn.apache.org/viewvc?rev=1190396&view=rev
Log:
ACE-49 added a new bundle that allows you to configure redirects

Added:
    incubator/ace/trunk/ace-http-redirector/
    incubator/ace/trunk/ace-http-redirector/pom.xml
    incubator/ace/trunk/ace-http-redirector/src/
    incubator/ace/trunk/ace-http-redirector/src/main/
    incubator/ace/trunk/ace-http-redirector/src/main/java/
    incubator/ace/trunk/ace-http-redirector/src/main/java/org/
    incubator/ace/trunk/ace-http-redirector/src/main/java/org/apache/
    incubator/ace/trunk/ace-http-redirector/src/main/java/org/apache/ace/
    incubator/ace/trunk/ace-http-redirector/src/main/java/org/apache/ace/http/
    incubator/ace/trunk/ace-http-redirector/src/main/java/org/apache/ace/http/redirector/
    incubator/ace/trunk/ace-http-redirector/src/main/java/org/apache/ace/http/redirector/Activator.java
    incubator/ace/trunk/ace-http-redirector/src/main/java/org/apache/ace/http/redirector/RedirectServlet.java
    incubator/ace/trunk/ace-target-devserver/src/main/resources/conf/org.apache.ace.http.redirector.factory/
    incubator/ace/trunk/ace-target-devserver/src/main/resources/conf/org.apache.ace.http.redirector.factory/root-to-ace.cfg
Modified:
    incubator/ace/trunk/ace-target-devserver/pom.xml
    incubator/ace/trunk/pom.xml
    incubator/ace/trunk/pom/pom.xml

Added: incubator/ace/trunk/ace-http-redirector/pom.xml
URL: http://svn.apache.org/viewvc/incubator/ace/trunk/ace-http-redirector/pom.xml?rev=1190396&view=auto
==============================================================================
--- incubator/ace/trunk/ace-http-redirector/pom.xml (added)
+++ incubator/ace/trunk/ace-http-redirector/pom.xml Fri Oct 28 15:22:15 2011
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+    <!--
+
+        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.
+    -->
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.ace</groupId>
+        <artifactId>ace-pom</artifactId>
+        <version>0.8.1-incubator-SNAPSHOT</version>
+        <relativePath>../pom/pom.xml</relativePath>
+    </parent>
+
+    <version>0.8.1-incubator-SNAPSHOT</version>
+    <artifactId>org.apache.ace.http.redirector</artifactId>
+    <packaging>bundle</packaging>
+
+    <name>Apache ACE :: Http Redirector</name>
+    <description>Redirects HTTP requests from one (local) URL to another. Multiple redirects can be configured via a managed service factory.</description>
+
+    <scm>
+        <connection>scm:svn:http://svn.apache.org/repos/asf/incubator/ace/trunk/ace-http-redirector</connection>
+        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/incubator/ace/trunk/ace-http-redirector</developerConnection>
+        <url>http://svn.apache.org/repos/asf/incubator/ace/trunk/ace-http-redirector</url>
+    </scm>
+
+    <properties>
+        <export.package>
+        </export.package>
+        <private.package>
+            org.apache.ace.http.redirector
+        </private.package>
+        <import.package>
+            *
+        </import.package>
+        <bundle.activator>
+            org.apache.ace.http.redirector.Activator
+        </bundle.activator>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.compendium</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.dependencymanager</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>servlet-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.ace</groupId>
+            <artifactId>org.apache.ace.httplistener</artifactId>
+        </dependency>
+    </dependencies>
+</project>
\ No newline at end of file

Added: incubator/ace/trunk/ace-http-redirector/src/main/java/org/apache/ace/http/redirector/Activator.java
URL: http://svn.apache.org/viewvc/incubator/ace/trunk/ace-http-redirector/src/main/java/org/apache/ace/http/redirector/Activator.java?rev=1190396&view=auto
==============================================================================
--- incubator/ace/trunk/ace-http-redirector/src/main/java/org/apache/ace/http/redirector/Activator.java (added)
+++ incubator/ace/trunk/ace-http-redirector/src/main/java/org/apache/ace/http/redirector/Activator.java Fri Oct 28 15:22:15 2011
@@ -0,0 +1,62 @@
+package org.apache.ace.http.redirector;
+
+import java.util.Dictionary;
+import java.util.Properties;
+import java.util.concurrent.ConcurrentHashMap;
+
+import javax.servlet.Servlet;
+
+import org.apache.felix.dm.Component;
+import org.apache.felix.dm.DependencyActivatorBase;
+import org.apache.felix.dm.DependencyManager;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
+import org.osgi.service.cm.ConfigurationException;
+import org.osgi.service.cm.ManagedServiceFactory;
+import org.osgi.service.log.LogService;
+
+public class Activator extends DependencyActivatorBase implements ManagedServiceFactory {
+    private static final String PID = "org.apache.ace.http.redirector.factory";
+    private final ConcurrentHashMap<String, Component> m_servlets = new ConcurrentHashMap<String, Component>();
+    
+    @Override
+    public void init(BundleContext context, DependencyManager manager) throws Exception {
+        manager.add(createComponent()
+            .setInterface(ManagedServiceFactory.class.getName(), new Properties() {{ put(Constants.SERVICE_PID, PID); }})
+            .setImplementation(this)
+        );
+    }
+
+    @Override
+    public void destroy(BundleContext context, DependencyManager manager) throws Exception {
+    }
+    
+    public String getName() {
+        return "Http Redirector";
+    }
+
+    public void updated(String pid, Dictionary properties) throws ConfigurationException {
+        Component component = m_servlets.get(pid);
+        if (component == null) {
+            component = getDependencyManager().createComponent()
+                .setInterface(Servlet.class.getName(), properties)
+                .setImplementation(new RedirectServlet(properties))
+                ;
+            m_servlets.put(pid, component);
+            getDependencyManager().add(component);
+        }
+        else {
+            RedirectServlet servlet = (RedirectServlet) component.getService();
+            if (servlet != null) {
+                servlet.update(properties);
+            }
+        }
+    }
+
+    public void deleted(String pid) {
+        Component component = m_servlets.remove(pid);
+        if (component != null) {
+            getDependencyManager().remove(component);
+        }
+    }
+}

Added: incubator/ace/trunk/ace-http-redirector/src/main/java/org/apache/ace/http/redirector/RedirectServlet.java
URL: http://svn.apache.org/viewvc/incubator/ace/trunk/ace-http-redirector/src/main/java/org/apache/ace/http/redirector/RedirectServlet.java?rev=1190396&view=auto
==============================================================================
--- incubator/ace/trunk/ace-http-redirector/src/main/java/org/apache/ace/http/redirector/RedirectServlet.java (added)
+++ incubator/ace/trunk/ace-http-redirector/src/main/java/org/apache/ace/http/redirector/RedirectServlet.java Fri Oct 28 15:22:15 2011
@@ -0,0 +1,64 @@
+package org.apache.ace.http.redirector;
+
+import java.io.IOException;
+import java.util.Dictionary;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.ace.http.listener.constants.HttpConstants;
+import org.osgi.framework.ServiceRegistration;
+import org.osgi.service.cm.ConfigurationException;
+
+/**
+ * Servlet that will redirect from a source URL to a target URL. If you append ?show to the source URL,
+ * it will instead show you the redirect (and you can still click on the target URL).
+ */
+public class RedirectServlet extends HttpServlet {
+    public static final String REDIRECT_URL_KEY = "org.apache.ace.webui.vaadin.redirect";
+    private final Object LOCK = new Object();
+    private volatile ServiceRegistration m_registration;
+    private String m_redirectURL;
+    private String m_sourceURL;
+    
+    public RedirectServlet(Dictionary properties) throws ConfigurationException {
+        setup(properties);
+    }
+
+    @Override
+    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+        String src;
+        String url;
+        synchronized (LOCK) {
+            src = m_sourceURL;
+            url = m_redirectURL;
+        }
+        if (req.getParameter("show") != null) {
+            resp.setContentType("text/html");
+            resp.getWriter().println("<h1>Http Redirector</h1><p>Redirect configured from " + src + " to <a href=\"" + url + "\">" + url + "</a></p>");
+        }
+        else {
+            resp.sendRedirect(url);
+        }
+    }
+    
+    public void update(Dictionary properties) throws ConfigurationException {
+        setup(properties);
+        m_registration.setProperties(properties);
+    }
+
+    private void setup(Dictionary properties) throws ConfigurationException {
+        synchronized (LOCK) {
+            m_redirectURL = (String) properties.get(REDIRECT_URL_KEY);
+            m_sourceURL = (String) properties.get(HttpConstants.ENDPOINT);
+            if (m_sourceURL == null) {
+                throw new ConfigurationException(HttpConstants.ENDPOINT, "needs to be specified");
+            }
+            if (m_redirectURL == null) {
+                throw new ConfigurationException(REDIRECT_URL_KEY, "needs to be specified");
+            }
+        }
+    }
+}

Modified: incubator/ace/trunk/ace-target-devserver/pom.xml
URL: http://svn.apache.org/viewvc/incubator/ace/trunk/ace-target-devserver/pom.xml?rev=1190396&r1=1190395&r2=1190396&view=diff
==============================================================================
--- incubator/ace/trunk/ace-target-devserver/pom.xml (original)
+++ incubator/ace/trunk/ace-target-devserver/pom.xml Fri Oct 28 15:22:15 2011
@@ -274,6 +274,11 @@
         </dependency>
         <dependency>
             <groupId>org.apache.ace</groupId>
+            <artifactId>org.apache.ace.http.redirector</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.ace</groupId>
             <artifactId>org.apache.ace.obr.metadata</artifactId>
             <scope>runtime</scope>
         </dependency>

Added: incubator/ace/trunk/ace-target-devserver/src/main/resources/conf/org.apache.ace.http.redirector.factory/root-to-ace.cfg
URL: http://svn.apache.org/viewvc/incubator/ace/trunk/ace-target-devserver/src/main/resources/conf/org.apache.ace.http.redirector.factory/root-to-ace.cfg?rev=1190396&view=auto
==============================================================================
--- incubator/ace/trunk/ace-target-devserver/src/main/resources/conf/org.apache.ace.http.redirector.factory/root-to-ace.cfg (added)
+++ incubator/ace/trunk/ace-target-devserver/src/main/resources/conf/org.apache.ace.http.redirector.factory/root-to-ace.cfg Fri Oct 28 15:22:15 2011
@@ -0,0 +1,2 @@
+org.apache.ace.server.servlet.endpoint=/
+org.apache.ace.webui.vaadin.redirect=/ace/

Modified: incubator/ace/trunk/pom.xml
URL: http://svn.apache.org/viewvc/incubator/ace/trunk/pom.xml?rev=1190396&r1=1190395&r2=1190396&view=diff
==============================================================================
--- incubator/ace/trunk/pom.xml (original)
+++ incubator/ace/trunk/pom.xml Fri Oct 28 15:22:15 2011
@@ -80,6 +80,7 @@
         <module>ace-deployment-verifier</module>
         <module>ace-deployment-verifier-ui</module>
         <module>ace-httplistener</module>
+        <module>ace-http-redirector</module>
 
         <module>ace-server-log-store</module>
         <module>ace-server-log-ui</module>
@@ -205,6 +206,7 @@
                 <module>ace-discovery-api</module>
                 <module>ace-discovery-property</module>
                 <module>ace-httplistener</module>
+                <module>ace-http-redirector</module>
                 <module>ace-obr-metadata</module>
                 <module>ace-obr-storage</module>
                 <module>ace-obr-servlet</module>

Modified: incubator/ace/trunk/pom/pom.xml
URL: http://svn.apache.org/viewvc/incubator/ace/trunk/pom/pom.xml?rev=1190396&r1=1190395&r2=1190396&view=diff
==============================================================================
--- incubator/ace/trunk/pom/pom.xml (original)
+++ incubator/ace/trunk/pom/pom.xml Fri Oct 28 15:22:15 2011
@@ -470,6 +470,11 @@
             </dependency>
             <dependency>
                 <groupId>org.apache.ace</groupId>
+                <artifactId>org.apache.ace.http.redirector</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.ace</groupId>
                 <artifactId>org.apache.ace.identification.api</artifactId>
                 <version>${project.version}</version>
             </dependency>