You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2014/06/05 22:57:38 UTC
svn commit: r1600759 -
/sling/trunk/tooling/ide/impl-vlt/src/org/apache/sling/ide/jcr/RepositoryUtils.java
Author: rombert
Date: Thu Jun 5 20:57:37 2014
New Revision: 1600759
URL: http://svn.apache.org/r1600759
Log:
SLING-3647 - No repository found at ... URL scheme http not supported.
only
Since the RepositoryProvider is not thread-safe, explicitly synchronize
access to it. This potentially fixes the bug, but it remains to be
validated.
Modified:
sling/trunk/tooling/ide/impl-vlt/src/org/apache/sling/ide/jcr/RepositoryUtils.java
Modified: sling/trunk/tooling/ide/impl-vlt/src/org/apache/sling/ide/jcr/RepositoryUtils.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/impl-vlt/src/org/apache/sling/ide/jcr/RepositoryUtils.java?rev=1600759&r1=1600758&r2=1600759&view=diff
==============================================================================
--- sling/trunk/tooling/ide/impl-vlt/src/org/apache/sling/ide/jcr/RepositoryUtils.java (original)
+++ sling/trunk/tooling/ide/impl-vlt/src/org/apache/sling/ide/jcr/RepositoryUtils.java Thu Jun 5 20:57:37 2014
@@ -31,36 +31,43 @@ import org.apache.sling.ide.transport.Re
public abstract class RepositoryUtils {
private static final RepositoryProvider REPOSITORY_PROVIDER = new RepositoryProvider();
+ private static final Object SYNC = new Object();
private static final String[] WEBDAV_URL_LOCATIONS = new String[] { "server/-/jcr:root", "crx/-/jcr:root" };
public static Repository getRepository(RepositoryInfo repositoryInfo) throws RepositoryException {
-
- return REPOSITORY_PROVIDER.getRepository(getRepositoryAddress(repositoryInfo));
+ synchronized (SYNC) {
+ return REPOSITORY_PROVIDER.getRepository(getRepositoryAddress(repositoryInfo));
+ }
}
public static RepositoryAddress getRepositoryAddress(RepositoryInfo repositoryInfo) {
StringBuilder errors = new StringBuilder();
for (String webDavUrlLocation : WEBDAV_URL_LOCATIONS) {
- Session session = null;
- try {
- // TODO proper error handling
+
+ Session session = null;
String url = repositoryInfo.getUrl() + webDavUrlLocation;
- RepositoryAddress address = new RepositoryAddress(url);
- Repository repository = REPOSITORY_PROVIDER.getRepository(address);
- // TODO - this can be costly performance-wise ; we should cache this information
- session = repository.login(new SimpleCredentials(repositoryInfo.getUsername(), repositoryInfo
- .getPassword().toCharArray()));
- return address;
- } catch (URISyntaxException e) {
- throw new RuntimeException(e);
- } catch (RepositoryException e) {
- errors.append(webDavUrlLocation).append(" : ").append(e.getMessage()).append('\n');
- continue;
- } finally {
- if (session != null) {
- session.logout();
+ try {
+ // TODO proper error handling
+ RepositoryAddress address = new RepositoryAddress(url);
+ Repository repository;
+ synchronized (SYNC) {
+ repository = REPOSITORY_PROVIDER.getRepository(address);
+ }
+
+ // TODO - this can be costly performance-wise ; we should cache this information
+ session = repository.login(new SimpleCredentials(repositoryInfo.getUsername(), repositoryInfo
+ .getPassword().toCharArray()));
+ return address;
+ } catch (URISyntaxException e) {
+ throw new RuntimeException(e);
+ } catch (RepositoryException e) {
+ errors.append(url).append(" : ").append(e.getMessage()).append('\n');
+ continue;
+ } finally {
+ if (session != null) {
+ session.logout();
+ }
}
- }
}
errors.deleteCharAt(errors.length() - 1);