You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ace.apache.org by ja...@apache.org on 2012/08/03 15:23:52 UTC
svn commit: r1368938 -
/ace/sandbox/marrs/org.apache.ace.repository.ext/src/org/apache/ace/repository/ext/impl/RemoteRepository.java
Author: jawi
Date: Fri Aug 3 13:23:51 2012
New Revision: 1368938
URL: http://svn.apache.org/viewvc?rev=1368938&view=rev
Log:
Made the repository implementation explicitly close the connections were
possible.
Modified:
ace/sandbox/marrs/org.apache.ace.repository.ext/src/org/apache/ace/repository/ext/impl/RemoteRepository.java
Modified: ace/sandbox/marrs/org.apache.ace.repository.ext/src/org/apache/ace/repository/ext/impl/RemoteRepository.java
URL: http://svn.apache.org/viewvc/ace/sandbox/marrs/org.apache.ace.repository.ext/src/org/apache/ace/repository/ext/impl/RemoteRepository.java?rev=1368938&r1=1368937&r2=1368938&view=diff
==============================================================================
--- ace/sandbox/marrs/org.apache.ace.repository.ext/src/org/apache/ace/repository/ext/impl/RemoteRepository.java (original)
+++ ace/sandbox/marrs/org.apache.ace.repository.ext/src/org/apache/ace/repository/ext/impl/RemoteRepository.java Fri Aug 3 13:23:51 2012
@@ -44,7 +44,7 @@ public class RemoteRepository implements
private static final String MIME_APPLICATION_OCTET_STREAM = "application/octet-stream";
- private static final int COPY_BUFFER_SIZE = 4096;
+ private static final int COPY_BUFFER_SIZE = 64 * 1024;
private final URL m_url;
private final String m_customer;
@@ -78,13 +78,16 @@ public class RemoteRepository implements
HttpURLConnection connection = (HttpURLConnection) m_connectionFactory.createConnection(url);
if (connection.getResponseCode() == HttpServletResponse.SC_NOT_FOUND) {
- throw new IllegalArgumentException("Requested version not found in remote repository. (" + connection.getResponseMessage() + ")");
+ connection.disconnect();
+ throw new IllegalArgumentException("Requested version not found in remote repository. (" + connection.getResponseMessage() + ")");
}
if (connection.getResponseCode() != HttpServletResponse.SC_OK) {
+ connection.disconnect();
throw new IOException("Connection error: " + connection.getResponseMessage());
}
return connection.getInputStream();
+
}
public boolean commit(InputStream data, long fromVersion) throws IOException, IllegalArgumentException {
@@ -95,29 +98,45 @@ public class RemoteRepository implements
connection.setRequestProperty("Content-Type", MIME_APPLICATION_OCTET_STREAM);
OutputStream out = connection.getOutputStream();
- copy(data, out);
- out.flush();
- out.close();
-
- return connection.getResponseCode() == HttpServletResponse.SC_OK;
+ try {
+ copy(data, out);
+ } finally {
+ out.flush();
+ out.close();
+ }
+
+ try {
+ return connection.getResponseCode() == HttpServletResponse.SC_OK;
+ } finally {
+ connection.disconnect();
+ }
}
public SortedRangeSet getRange() throws IOException {
URL url = buildCommand(m_url, COMMAND_QUERY, 0);
+
HttpURLConnection connection = (HttpURLConnection) m_connectionFactory.createConnection(url);
- if (connection.getResponseCode() == HttpServletResponse.SC_OK) {
- BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
- String line = reader.readLine();
- if (line == null) {
- throw new IOException("Repository not found: customer=" + m_customer + ", name=" + m_name);
- }
- String representation = line.substring(line.lastIndexOf(','));
- reader.close();
- return new SortedRangeSet(representation);
+ try {
+ if (connection.getResponseCode() == HttpServletResponse.SC_OK) {
+ BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
+ try {
+ String line = reader.readLine();
+ if (line == null) {
+ throw new IOException("Repository not found: customer=" + m_customer + ", name=" + m_name);
+ }
+
+ String representation = line.substring(line.lastIndexOf(','));
+ return new SortedRangeSet(representation);
+ } finally {
+ reader.close();
+ }
+ }
+
+ throw new IOException("Connection error: " + connection.getResponseMessage());
+ } finally {
+ connection.disconnect();
}
-
- throw new IOException("Connection error: " + connection.getResponseMessage());
}
/**
@@ -145,34 +164,36 @@ public class RemoteRepository implements
* @return The command string.
*/
private URL buildCommand(URL url, String command, long version) {
- StringBuffer result = new StringBuffer();
+ StringBuilder params = new StringBuilder();
if (m_customer != null) {
- if (result.length() != 0) {
- result.append("&");
+ if (params.length() != 0) {
+ params.append("&");
}
- result.append("customer=").append(m_customer);
+ params.append("customer=").append(m_customer);
}
if (m_name != null) {
- if (result.length() != 0) {
- result.append("&");
+ if (params.length() != 0) {
+ params.append("&");
}
- result.append("name=").append(m_name);
+ params.append("name=").append(m_name);
}
if (command != COMMAND_QUERY) {
- if (result.length() != 0) {
- result.append("&");
+ if (params.length() != 0) {
+ params.append("&");
}
- result.append("version=").append(version);
+ params.append("version=").append(version);
+ }
+
+ StringBuilder newURL = new StringBuilder();
+ newURL.append(url.toExternalForm());
+ newURL.append(command);
+ if (params.length() > 0) {
+ newURL.append("?").append(params);
}
try {
- if (result.length() > 0) {
- return new URL(url.toString() + command + "?" + result.toString());
- }
- else {
- return new URL(url.toString() + command);
- }
+ return new URL(newURL.toString());
}
catch (MalformedURLException e) {
throw new IllegalArgumentException("Could not create URL: " + e.getMessage());