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/10 21:42:05 UTC
svn commit: r1181170 - in /incubator/ace/trunk/ace-deployment-servlet: ./
src/main/java/org/apache/ace/deployment/processor/
src/main/java/org/apache/ace/deployment/servlet/
Author: marrs
Date: Mon Oct 10 19:42:04 2011
New Revision: 1181170
URL: http://svn.apache.org/viewvc?rev=1181170&view=rev
Log:
ACE-186 implemented a mechanism for adding DeploymentProcessor plugins
Added:
incubator/ace/trunk/ace-deployment-servlet/src/main/java/org/apache/ace/deployment/processor/
incubator/ace/trunk/ace-deployment-servlet/src/main/java/org/apache/ace/deployment/processor/DeploymentProcessor.java (with props)
Modified:
incubator/ace/trunk/ace-deployment-servlet/pom.xml
incubator/ace/trunk/ace-deployment-servlet/src/main/java/org/apache/ace/deployment/servlet/Activator.java
incubator/ace/trunk/ace-deployment-servlet/src/main/java/org/apache/ace/deployment/servlet/DeploymentServlet.java
Modified: incubator/ace/trunk/ace-deployment-servlet/pom.xml
URL: http://svn.apache.org/viewvc/incubator/ace/trunk/ace-deployment-servlet/pom.xml?rev=1181170&r1=1181169&r2=1181170&view=diff
==============================================================================
--- incubator/ace/trunk/ace-deployment-servlet/pom.xml (original)
+++ incubator/ace/trunk/ace-deployment-servlet/pom.xml Mon Oct 10 19:42:04 2011
@@ -33,7 +33,7 @@
<packaging>bundle</packaging>
<name>Apache ACE :: Deployment :: Servlet</name>
- <description />
+ <description>Servlet that is used by management agents to get an overview of available versions and request 'deployment packages' of specific versions or deltas between versions.</description>
<scm>
<connection>scm:svn:http://svn.apache.org/repos/asf/incubator/ace/trunk/ace-deployment-servlet</connection>
@@ -42,7 +42,11 @@
</scm>
<properties>
+ <export.package>
+ org.apache.ace.deployment.processor;version=${project.version}
+ </export.package>
<import.package>
+ org.apache.ace.deployment.processor;version=${project.version},
org.apache.ace.deployment.provider;version=${project.version},
org.apache.ace.deployment.streamgenerator;version=${project.version},
*
@@ -58,6 +62,10 @@
<dependencies>
<dependency>
<groupId>org.apache.ace</groupId>
+ <artifactId>org.apache.ace.deployment.api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.ace</groupId>
<artifactId>org.apache.ace.deployment.provider.api</artifactId>
</dependency>
<dependency>
@@ -85,5 +93,4 @@
<artifactId>servlet-api</artifactId>
</dependency>
</dependencies>
-
</project>
\ No newline at end of file
Added: incubator/ace/trunk/ace-deployment-servlet/src/main/java/org/apache/ace/deployment/processor/DeploymentProcessor.java
URL: http://svn.apache.org/viewvc/incubator/ace/trunk/ace-deployment-servlet/src/main/java/org/apache/ace/deployment/processor/DeploymentProcessor.java?rev=1181170&view=auto
==============================================================================
--- incubator/ace/trunk/ace-deployment-servlet/src/main/java/org/apache/ace/deployment/processor/DeploymentProcessor.java (added)
+++ incubator/ace/trunk/ace-deployment-servlet/src/main/java/org/apache/ace/deployment/processor/DeploymentProcessor.java Mon Oct 10 19:42:04 2011
@@ -0,0 +1,44 @@
+package org.apache.ace.deployment.processor;
+/*
+ * 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.
+ */
+
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * Deployment processors can post process the deployment package before it is sent to the original requester. This allows you to
+ * transform how the data is actually sent, allowing you to basically "repackage" the content on the fly. Deployment processors
+ * should be registered as services with a service property called "processor" which should match a request property of the same
+ * name and value.
+ */
+public interface DeploymentProcessor {
+ /**
+ * Post-process the stream and send it to the response. The input stream is the deployment package as it was generated. You
+ * should set the correct mime type and start writing to the response.
+ *
+ * @param inputStream the input stream for the deployment package
+ * @param request the original request, in case you want to access certain parameters
+ * @param response the response to write to
+ */
+ public void process(InputStream inputStream, HttpServletRequest request, HttpServletResponse response) throws IOException;
+}
Propchange: incubator/ace/trunk/ace-deployment-servlet/src/main/java/org/apache/ace/deployment/processor/DeploymentProcessor.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: incubator/ace/trunk/ace-deployment-servlet/src/main/java/org/apache/ace/deployment/servlet/Activator.java
URL: http://svn.apache.org/viewvc/incubator/ace/trunk/ace-deployment-servlet/src/main/java/org/apache/ace/deployment/servlet/Activator.java?rev=1181170&r1=1181169&r2=1181170&view=diff
==============================================================================
--- incubator/ace/trunk/ace-deployment-servlet/src/main/java/org/apache/ace/deployment/servlet/Activator.java (original)
+++ incubator/ace/trunk/ace-deployment-servlet/src/main/java/org/apache/ace/deployment/servlet/Activator.java Mon Oct 10 19:42:04 2011
@@ -20,6 +20,7 @@ package org.apache.ace.deployment.servle
import javax.servlet.Servlet;
+import org.apache.ace.deployment.processor.DeploymentProcessor;
import org.apache.ace.deployment.provider.DeploymentProvider;
import org.apache.ace.deployment.streamgenerator.StreamGenerator;
import org.apache.felix.dm.DependencyActivatorBase;
@@ -35,10 +36,12 @@ public class Activator extends Dependenc
manager.add(createComponent()
.setInterface(Servlet.class.getName(), null)
.setImplementation(DeploymentServlet.class)
+ .add(createConfigurationDependency().setPropagate(true).setPid(PID))
.add(createServiceDependency().setService(StreamGenerator.class).setRequired(true))
.add(createServiceDependency().setService(DeploymentProvider.class).setRequired(true))
+ .add(createServiceDependency().setService(DeploymentProcessor.class).setRequired(false).setCallbacks("addProcessor", "removeProcessor"))
.add(createServiceDependency().setService(LogService.class).setRequired(false))
- .add(createConfigurationDependency().setPropagate(true).setPid(PID)));
+ );
}
@Override
Modified: incubator/ace/trunk/ace-deployment-servlet/src/main/java/org/apache/ace/deployment/servlet/DeploymentServlet.java
URL: http://svn.apache.org/viewvc/incubator/ace/trunk/ace-deployment-servlet/src/main/java/org/apache/ace/deployment/servlet/DeploymentServlet.java?rev=1181170&r1=1181169&r2=1181170&view=diff
==============================================================================
--- incubator/ace/trunk/ace-deployment-servlet/src/main/java/org/apache/ace/deployment/servlet/DeploymentServlet.java (original)
+++ incubator/ace/trunk/ace-deployment-servlet/src/main/java/org/apache/ace/deployment/servlet/DeploymentServlet.java Mon Oct 10 19:42:04 2011
@@ -23,12 +23,17 @@ import java.io.InputStream;
import java.io.OutputStream;
import java.util.Dictionary;
import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
+
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+
+import org.apache.ace.deployment.processor.DeploymentProcessor;
import org.apache.ace.deployment.provider.DeploymentProvider;
import org.apache.ace.deployment.streamgenerator.StreamGenerator;
+import org.osgi.framework.ServiceReference;
import org.osgi.service.cm.ConfigurationException;
import org.osgi.service.cm.ManagedService;
import org.osgi.service.log.LogService;
@@ -38,17 +43,16 @@ import org.osgi.service.log.LogService;
* of data containing the DeploymentPackage (or fix package) for a specific gateway and version.
*/
public class DeploymentServlet extends HttpServlet implements ManagedService {
-
private static final long serialVersionUID = 1L;
-
public static final String CURRENT = "current";
+ public static final String PROCESSOR = "processor";
public static final String VERSIONS = "versions";
public static final String DP_MIMETYPE = "application/vnd.osgi.dp";
public static final String TEXT_MIMETYPE = "text/plain";
-
private volatile LogService m_log; /* injected by dependency manager */
private volatile StreamGenerator m_streamGenerator; /* injected by dependency manager */
private volatile DeploymentProvider m_provider; /* injected by dependency manager */
+ private final ConcurrentHashMap<String, DeploymentProcessor> m_processors = new ConcurrentHashMap<String, DeploymentProcessor>();
/**
* Responds to GET requests sent to this endpoint, the response depends on the requested path:
@@ -76,7 +80,6 @@ public class DeploymentServlet extends H
String version = pathElements[3];
handlePackageDelivery(gatewayID, version, versions, request, response);
}
-
}
catch (AceRestException e) {
m_log.log(LogService.LOG_WARNING, e.getMessage(), e);
@@ -113,13 +116,12 @@ public class DeploymentServlet extends H
private void handlePackageDelivery(final String gatewayID, final String version, final List<String> versions, final HttpServletRequest request, final HttpServletResponse response) throws AceRestException {
ServletOutputStream output = null;
- response.setContentType(TEXT_MIMETYPE);
try {
- output = response.getOutputStream();
if (!versions.contains(version)) {
throw new AceRestException(HttpServletResponse.SC_NOT_FOUND, "Unknown version (" + version + ")");
}
String current = request.getParameter(CURRENT);
+ String processor = request.getParameter(PROCESSOR);
InputStream inputStream;
if (current != null) {
@@ -129,7 +131,18 @@ public class DeploymentServlet extends H
inputStream = m_streamGenerator.getDeploymentPackage(gatewayID, version);
}
+ if (processor != null) {
+ DeploymentProcessor deploymentProcessor = m_processors.get(processor);
+ if (deploymentProcessor != null) {
+ deploymentProcessor.process(inputStream, request, response);
+ return;
+ }
+ else {
+ throw new AceRestException(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Could not find a deployment processor called: " + processor);
+ }
+ }
response.setContentType(DP_MIMETYPE);
+ output = response.getOutputStream();
byte[] buffer = new byte[1024 * 32];
for (int bytesRead = inputStream.read(buffer); bytesRead != -1; bytesRead = inputStream.read(buffer)) {
output.write(buffer, 0, bytesRead);
@@ -200,4 +213,22 @@ public class DeploymentServlet extends H
public void updated(Dictionary settings) throws ConfigurationException {
// Nothing needs to be done - handled by DependencyManager
}
+
+ public void addProcessor(ServiceReference ref, DeploymentProcessor processor) {
+ String key = (String) ref.getProperty(PROCESSOR);
+ if (key == null) {
+ m_log.log(LogService.LOG_WARNING, "Deployment processor ignored, required service property '" + PROCESSOR + "' is missing.");
+ return;
+ }
+ m_processors.putIfAbsent(key, processor);
+ }
+
+ public void removeProcessor(ServiceReference ref, DeploymentProcessor processor) {
+ String key = (String) ref.getProperty(PROCESSOR);
+ if (key == null) {
+ // we do not log this here again, we already did so in 'addProcessor'
+ return;
+ }
+ m_processors.remove(key);
+ }
}
\ No newline at end of file