Mercurial > dive4elements > river
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. |