annotate flys-backend/src/main/java/de/intevation/flys/model/Jetty.java @ 5779:ebec12def170

Datacage: Add a pool of builders to make it multi threadable. XML DOM is not thread safe. Therefore the old implementation only allowed one thread to use the builder at a time. As the complexity of the configuration has increased over time this has become a bottleneck of the whole application because it took quiet some time to build a result. Furthermore the builder code path is visited very frequent. So many concurrent requests were piled up resulting in long waits for the users. To mitigate this problem a round robin pool of builders is used now. Each of the pooled builders has an independent copy of the XML template and can be run in parallel. The number of builders is determined by the system property 'flys.datacage.pool.size'. It defaults to 4.
author Sascha L. Teichmann <teichmann@intevation.de>
date Sun, 21 Apr 2013 12:48:09 +0200
parents b582df0c7b00
children
rev   line source
5437
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
1 package de.intevation.flys.model;
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
2
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
3 import java.io.Serializable;
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
4 import java.util.List;
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
5
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
6 import javax.persistence.Column;
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
7 import javax.persistence.Entity;
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
8 import javax.persistence.Id;
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
9 import javax.persistence.JoinColumn;
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
10 import javax.persistence.OneToOne;
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
11 import javax.persistence.Table;
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
12
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
13 import com.vividsolutions.jts.geom.Geometry;
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
14
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
15 import org.hibernate.Session;
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
16 import org.hibernate.Query;
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
17 import org.hibernate.annotations.Type;
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
18
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
19 import de.intevation.flys.backend.SessionHolder;
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
20
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
21 @Entity
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
22 @Table(name = "jetties")
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
23 public class Jetty
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
24 implements Serializable
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
25 {
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
26 private Integer id;
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
27 private River river;
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
28 private Geometry geom;
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
29
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
30 public Jetty() {
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
31 }
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
32
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
33
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
34 @Id
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
35 @Column(name = "id")
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
36 public Integer getId() {
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
37 return id;
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
38 }
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
39
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
40
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
41 public void setId(Integer id) {
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
42 this.id = id;
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
43 }
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
44
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
45
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
46 @OneToOne
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
47 @JoinColumn(name = "river_id")
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
48 public River getRiver() {
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
49 return river;
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
50 }
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
51
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
52
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
53 public void setRiver(River river) {
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
54 this.river = river;
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
55 }
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
56
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
57 @Column(name = "geom")
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
58 @Type(type = "org.hibernatespatial.GeometryUserType")
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
59 public Geometry getGeom() {
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
60 return geom;
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
61 }
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
62
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
63
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
64 public void setGeom(Geometry geom) {
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
65 this.geom = geom;
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
66 }
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
67
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
68 public static List<Jetty> getJetties(int riverId, int kindId) {
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
69 Session session = SessionHolder.HOLDER.get();
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
70
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
71 Query query = session.createQuery(
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
72 "from Jetty where river.id =:river_id and kind_id=:kind_id");
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
73 query.setParameter("kind_id", kindId);
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
74 query.setParameter("river_id", riverId);
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
75
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
76 return query.list();
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
77 }
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
78 }
b582df0c7b00 Add Jetties to floodmap
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
79 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org