Author: jawi
Date: Fri Apr 13 09:33:15 2012
New Revision: 1325685
URL: http://svn.apache.org/viewvc?rev=1325685&view=rev
Log:
ACE-260: lowered the loglevel for EOFExceptions that occur quite frequently
while adding/uploading artifacts. The exception is explainable due to the fact
that ArtifactRecognizers only download parts of an artifact.
Modified:
ace/trunk/ace-obr-servlet/src/main/java/org/apache/ace/obr/servlet/Activator.java
ace/trunk/ace-obr-servlet/src/main/java/org/apache/ace/obr/servlet/BundleServlet.java
Modified:
ace/trunk/ace-obr-servlet/src/main/java/org/apache/ace/obr/servlet/Activator.java
URL:
http://svn.apache.org/viewvc/ace/trunk/ace-obr-servlet/src/main/java/org/apache/ace/obr/servlet/Activator.java?rev=1325685&r1=1325684&r2=1325685&view=diff
==============================================================================
---
ace/trunk/ace-obr-servlet/src/main/java/org/apache/ace/obr/servlet/Activator.java
(original)
+++
ace/trunk/ace-obr-servlet/src/main/java/org/apache/ace/obr/servlet/Activator.java
Fri Apr 13 09:33:15 2012
@@ -19,7 +19,6 @@
package org.apache.ace.obr.servlet;
import javax.servlet.Servlet;
-import javax.servlet.http.HttpServlet;
import org.apache.ace.obr.storage.BundleStore;
import org.apache.felix.dm.DependencyActivatorBase;
Modified:
ace/trunk/ace-obr-servlet/src/main/java/org/apache/ace/obr/servlet/BundleServlet.java
URL:
http://svn.apache.org/viewvc/ace/trunk/ace-obr-servlet/src/main/java/org/apache/ace/obr/servlet/BundleServlet.java?rev=1325685&r1=1325684&r2=1325685&view=diff
==============================================================================
---
ace/trunk/ace-obr-servlet/src/main/java/org/apache/ace/obr/servlet/BundleServlet.java
(original)
+++
ace/trunk/ace-obr-servlet/src/main/java/org/apache/ace/obr/servlet/BundleServlet.java
Fri Apr 13 09:33:15 2012
@@ -18,20 +18,24 @@
*/
package org.apache.ace.obr.servlet;
+import static javax.servlet.http.HttpServletResponse.SC_NOT_FOUND;
+
+import java.io.Closeable;
+import java.io.EOFException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Dictionary;
+
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+
import org.apache.ace.obr.storage.BundleStore;
import org.osgi.service.cm.ConfigurationException;
import org.osgi.service.cm.ManagedService;
import org.osgi.service.log.LogService;
-import static javax.servlet.http.HttpServletResponse.*;
-
public class BundleServlet extends HttpServlet implements ManagedService {
public static final String TEXT_MIMETYPE = "text/plain";
@@ -41,6 +45,16 @@ public class BundleServlet extends HttpS
private volatile LogService m_log; /* will be injected by
dependencymanager */
private volatile BundleStore m_store; /* will be injected by
dependencymanager */
+ @Override
+ public String getServletInfo() {
+ return "Apache ACE OBR Servlet";
+ }
+
+ @SuppressWarnings("unchecked")
+ public void updated(Dictionary settings) throws ConfigurationException {
+ // nothing needs to be done, settings are propagated by the dependency
manager
+ }
+
/**
* Responds to POST requests sent to http://host:port/obr/resource by
writing the received data to the bundle store.
* Will send out a response that contains one of the following status
codes:
@@ -90,6 +104,7 @@ public class BundleServlet extends HttpS
sendResponse(response, HttpServletResponse.SC_BAD_REQUEST);
}
else {
+ // Remove leading slash...
String id = path.substring(1);
try {
if (m_store.remove(id)) {
@@ -124,48 +139,54 @@ public class BundleServlet extends HttpS
sendResponse(response, HttpServletResponse.SC_BAD_REQUEST);
}
else {
+ // Remove leasing slash...
String id = path.substring(1);
+
ServletOutputStream output = null;
+ InputStream fileStream = null;
try {
- InputStream fileStream = null;
- try {
- fileStream = m_store.get(id);
- if (fileStream != null) {
- // send the bundle as stream to the caller
- response.setContentType(TEXT_MIMETYPE);
- output = response.getOutputStream();
- byte[] buffer = new byte[COPY_BUFFER_SIZE];
- for (int bytes = fileStream.read(buffer); bytes != -1;
bytes = fileStream.read(buffer)) {
- output.write(buffer, 0, bytes);
- }
- }
- else {
- sendResponse(response,
HttpServletResponse.SC_NOT_FOUND);
- }
+ fileStream = m_store.get(id);
+ if (fileStream == null) {
+ sendResponse(response, HttpServletResponse.SC_NOT_FOUND);
}
- finally {
- if (fileStream != null) {
- try {
- fileStream.close();
- }
- catch (IOException ioe) {
- m_log.log(LogService.LOG_WARNING, "Exception
closing the stream " + request.getRequestURL(), ioe);
- }
+ else {
+ // send the bundle as stream to the caller
+ response.setContentType(TEXT_MIMETYPE);
+
+ output = response.getOutputStream();
+ byte[] buffer = new byte[COPY_BUFFER_SIZE];
+ for (int bytes = fileStream.read(buffer); bytes != -1;
bytes = fileStream.read(buffer)) {
+ output.write(buffer, 0, bytes);
}
}
}
+ catch (EOFException ex) {
+ // ACE-260: lower log-level of this exception; as it is
probably because the remote hung up early...
+ m_log.log(LogService.LOG_DEBUG, "EOF Exception in request: " +
request.getRequestURL() + "; probably the remote hung up early.");
+ }
catch (IOException ex) {
+ // ACE-260: all other exception are logged, as we might have a
possible resource leak...
m_log.log(LogService.LOG_WARNING, "Exception in request: " +
request.getRequestURL(), ex);
}
finally {
- try {
- if (output != null) {
- output.close();
- }
- }
- catch (Exception ex) {
- m_log.log(LogService.LOG_WARNING, "Exception trying to
close stream after request: " + request.getRequestURL(), ex);
- }
+ closeSafely(fileStream, request);
+ closeSafely(output, request);
+ }
+ }
+ }
+
+ private void closeSafely(Closeable resource, HttpServletRequest request) {
+ if (resource != null) {
+ try {
+ resource.close();
+ }
+ catch (EOFException ex) {
+ // ACE-260: lower log-level of this exception; as it is
probably because the remote hung up early...
+ m_log.log(LogService.LOG_DEBUG, "EOF Exception trying to close
stream: " + request.getRequestURL() + "; probably the remote hung up early.");
+ }
+ catch (Exception ex) {
+ // ACE-260: all other exception are logged, as we might have a
possible resource leak...
+ m_log.log(LogService.LOG_WARNING, "Exception trying to close
stream: " + request.getRequestURL(), ex);
}
}
}
@@ -184,14 +205,4 @@ public class BundleServlet extends HttpS
m_log.log(LogService.LOG_WARNING, "Unable to send response with
status code '" + statusCode + "'", e);
}
}
-
- @Override
- public String getServletInfo() {
- return "Apache ACE OBR Servlet";
- }
-
- @SuppressWarnings("unchecked")
- public void updated(Dictionary settings) throws ConfigurationException {
- // nothing needs to be done, settings are propagated by the dependency
manager
- }
}
\ No newline at end of file