# HG changeset patch # User Sascha L. Teichmann # Date 1372275353 -7200 # Node ID eb4d0950ae87c106c7a0d5646f3e5ea48c79c773 # Parent 00aa1bc72a65f4ddfedb48e01be7210d52a78e9e GWT client: prevent too many create artifact calls at the same time by limiting them to 5. diff -r 00aa1bc72a65 -r eb4d0950ae87 gwt-client/src/main/java/org/dive4elements/river/client/server/ArtifactHelper.java --- a/gwt-client/src/main/java/org/dive4elements/river/client/server/ArtifactHelper.java Wed Jun 26 20:50:58 2013 +0200 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/server/ArtifactHelper.java Wed Jun 26 21:35:53 2013 +0200 @@ -16,6 +16,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.concurrent.Semaphore; import org.dive4elements.artifacts.common.utils.ClientProtocolUtils; import org.dive4elements.artifacts.common.utils.CreationFilter; @@ -52,6 +53,12 @@ private static final String SQ_RELATION_ARTIFACT = "staticsqrelation"; + // To prevent pile up of create artifact calls only permit a limited + // number of parallel creates. + public static final int MAX_CREATE = 5; + + private static final Semaphore CREATE_SEMAPHORE = new Semaphore(MAX_CREATE); + private ArtifactHelper() { } @@ -90,7 +97,6 @@ factory, uuid, ids, filter, targetOut); return sendCreate(serverUrl, locale, create); - } /** @@ -170,16 +176,27 @@ Document doc) throws ServerException { - HttpClient client = new HttpClientImpl(serverUrl, locale); - try { - return (Artifact) client.create(doc, new FLYSArtifactCreator()); + CREATE_SEMAPHORE.acquire(); } - catch (ConnectionException ce) { - logger.error(ce, ce); + catch (InterruptedException ie) { + throw new ServerException(ERROR_CREATE_ARTIFACT); } + try { + HttpClient client = new HttpClientImpl(serverUrl, locale); - throw new ServerException(ERROR_CREATE_ARTIFACT); + try { + return (Artifact) client.create(doc, new FLYSArtifactCreator()); + } + catch (ConnectionException ce) { + logger.error(ce, ce); + } + + throw new ServerException(ERROR_CREATE_ARTIFACT); + } + finally { + CREATE_SEMAPHORE.release(); + } }