comparison gwt-client/src/main/java/org/dive4elements/river/client/server/ArtifactHelper.java @ 6450:eb4d0950ae87

GWT client: prevent too many create artifact calls at the same time by limiting them to 5.
author Sascha L. Teichmann <teichmann@intevation.de>
date Wed, 26 Jun 2013 21:35:53 +0200
parents 8d9859d776e5
children 238fc722f87a
comparison
equal deleted inserted replaced
6448:00aa1bc72a65 6450:eb4d0950ae87
14 import org.apache.log4j.Logger; 14 import org.apache.log4j.Logger;
15 15
16 import java.util.ArrayList; 16 import java.util.ArrayList;
17 import java.util.List; 17 import java.util.List;
18 import java.util.Map; 18 import java.util.Map;
19 import java.util.concurrent.Semaphore;
19 20
20 import org.dive4elements.artifacts.common.utils.ClientProtocolUtils; 21 import org.dive4elements.artifacts.common.utils.ClientProtocolUtils;
21 import org.dive4elements.artifacts.common.utils.CreationFilter; 22 import org.dive4elements.artifacts.common.utils.CreationFilter;
22 23
23 import org.dive4elements.artifacts.httpclient.exceptions.ConnectionException; 24 import org.dive4elements.artifacts.httpclient.exceptions.ConnectionException;
50 /** Name of the factory to generate a MainvaluesArtifact. */ 51 /** Name of the factory to generate a MainvaluesArtifact. */
51 private static final String MAINVALUE_ARTIFACT_FACTORY = "mainvalue"; 52 private static final String MAINVALUE_ARTIFACT_FACTORY = "mainvalue";
52 53
53 private static final String SQ_RELATION_ARTIFACT = "staticsqrelation"; 54 private static final String SQ_RELATION_ARTIFACT = "staticsqrelation";
54 55
56 // To prevent pile up of create artifact calls only permit a limited
57 // number of parallel creates.
58 public static final int MAX_CREATE = 5;
59
60 private static final Semaphore CREATE_SEMAPHORE = new Semaphore(MAX_CREATE);
61
55 private ArtifactHelper() { 62 private ArtifactHelper() {
56 } 63 }
57 64
58 65
59 /** 66 /**
88 95
89 Document create = ClientProtocolUtils.newCreateDocument( 96 Document create = ClientProtocolUtils.newCreateDocument(
90 factory, uuid, ids, filter, targetOut); 97 factory, uuid, ids, filter, targetOut);
91 98
92 return sendCreate(serverUrl, locale, create); 99 return sendCreate(serverUrl, locale, create);
93
94 } 100 }
95 101
96 /** 102 /**
97 * Creates a new MainvaluesArtifact. 103 * Creates a new MainvaluesArtifact.
98 * 104 *
168 String serverUrl, 174 String serverUrl,
169 String locale, 175 String locale,
170 Document doc) 176 Document doc)
171 throws ServerException 177 throws ServerException
172 { 178 {
173 HttpClient client = new HttpClientImpl(serverUrl, locale);
174
175 try { 179 try {
176 return (Artifact) client.create(doc, new FLYSArtifactCreator()); 180 CREATE_SEMAPHORE.acquire();
177 } 181 }
178 catch (ConnectionException ce) { 182 catch (InterruptedException ie) {
179 logger.error(ce, ce); 183 throw new ServerException(ERROR_CREATE_ARTIFACT);
180 } 184 }
181 185 try {
182 throw new ServerException(ERROR_CREATE_ARTIFACT); 186 HttpClient client = new HttpClientImpl(serverUrl, locale);
187
188 try {
189 return (Artifact) client.create(doc, new FLYSArtifactCreator());
190 }
191 catch (ConnectionException ce) {
192 logger.error(ce, ce);
193 }
194
195 throw new ServerException(ERROR_CREATE_ARTIFACT);
196 }
197 finally {
198 CREATE_SEMAPHORE.release();
199 }
183 } 200 }
184 201
185 202
186 /** 203 /**
187 * Create CreationFilter from Recommendation.Filter. 204 * Create CreationFilter from Recommendation.Filter.

http://dive4elements.wald.intevation.org