Mercurial > lada > lada-server
annotate src/main/java/de/intevation/lada/util/data/DataTransaction.java @ 1290:14876c62f692
Push down refreshing of persisted objects deeper into the stack.
There are more places besides creation of Probe objects where it is
useful to return within the response what has been really written to
the database (including modifications by the database itself) instead
of merely the request data, e.g. creation of Ort objects, which
includes database generated ort_ids.
author | Tom Gottfried <tom@intevation.de> |
---|---|
date | Wed, 08 Feb 2017 18:02:05 +0100 |
parents | 7683c4162746 |
children |
rev | line source |
---|---|
457
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
1 /* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
2 * Software engineering by Intevation GmbH |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
3 * |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
4 * This file is Free Software under the GNU GPL (v>=3) |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
5 * and comes with ABSOLUTELY NO WARRANTY! Check out |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
6 * the documentation coming with IMIS-Labordaten-Application for details. |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
7 */ |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
8 package de.intevation.lada.util.data; |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
9 |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
10 import javax.ejb.EJBTransactionRolledbackException; |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
11 import javax.ejb.Stateless; |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
12 import javax.ejb.TransactionAttribute; |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
13 import javax.ejb.TransactionAttributeType; |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
14 import javax.inject.Inject; |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
15 import javax.persistence.EntityExistsException; |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
16 import javax.persistence.EntityManager; |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
17 import javax.persistence.Query; |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
18 import javax.persistence.TransactionRequiredException; |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
19 |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
20 /** |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
21 * Abstract class implementing low level data operations. |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
22 * |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
23 * @author <a href="mailto:rrenkert@intevation.de">Raimund Renkert</a> |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
24 */ |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
25 @Stateless |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
26 public class DataTransaction |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
27 { |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
28 @Inject |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
29 protected EntityManagerProducer emp; |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
30 |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
31 protected String jndiPath; |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
32 |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
33 /** |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
34 * Create object in the database. |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
35 * This operation can not be undone. |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
36 * |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
37 * @param object The object to create |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
38 * |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
39 * @throws EntityExistsException |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
40 * @throws IllegalArgumentException |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
41 * @throws EJBTransactionRolledbackException |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
42 * @throws TransactionRequiredException |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
43 */ |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
44 @TransactionAttribute(TransactionAttributeType.REQUIRED) |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
45 public void persistInDatabase(Object object, String dataSource) |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
46 throws EntityExistsException, |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
47 IllegalArgumentException, |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
48 EJBTransactionRolledbackException, |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
49 TransactionRequiredException |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
50 { |
1290
14876c62f692
Push down refreshing of persisted objects deeper into the stack.
Tom Gottfried <tom@intevation.de>
parents:
1100
diff
changeset
|
51 EntityManager manager = emp.entityManager(dataSource); |
14876c62f692
Push down refreshing of persisted objects deeper into the stack.
Tom Gottfried <tom@intevation.de>
parents:
1100
diff
changeset
|
52 manager.persist(object); |
14876c62f692
Push down refreshing of persisted objects deeper into the stack.
Tom Gottfried <tom@intevation.de>
parents:
1100
diff
changeset
|
53 |
14876c62f692
Push down refreshing of persisted objects deeper into the stack.
Tom Gottfried <tom@intevation.de>
parents:
1100
diff
changeset
|
54 /* Refreshing the object is necessary because some objects use |
14876c62f692
Push down refreshing of persisted objects deeper into the stack.
Tom Gottfried <tom@intevation.de>
parents:
1100
diff
changeset
|
55 dynamic-insert, meaning null-valued columns are not INSERTed |
14876c62f692
Push down refreshing of persisted objects deeper into the stack.
Tom Gottfried <tom@intevation.de>
parents:
1100
diff
changeset
|
56 to the DB to take advantage of DB DEFAULT values, or triggers |
14876c62f692
Push down refreshing of persisted objects deeper into the stack.
Tom Gottfried <tom@intevation.de>
parents:
1100
diff
changeset
|
57 modify the object during INSERT. */ |
14876c62f692
Push down refreshing of persisted objects deeper into the stack.
Tom Gottfried <tom@intevation.de>
parents:
1100
diff
changeset
|
58 manager.refresh(object); |
457
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
59 } |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
60 |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
61 /** |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
62 * Create object in the database. |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
63 * This operation can not be undone. |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
64 * |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
65 * @param object The object to create |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
66 * |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
67 * @throws EntityExistsException |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
68 * @throws IllegalArgumentException |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
69 * @throws EJBTransactionRolledbackException |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
70 * @throws TransactionRequiredException |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
71 */ |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
72 @TransactionAttribute(TransactionAttributeType.REQUIRED) |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
73 public void updateInDatabase(Object object, String dataSource) |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
74 throws EntityExistsException, |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
75 IllegalArgumentException, |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
76 EJBTransactionRolledbackException, |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
77 TransactionRequiredException |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
78 { |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
79 emp.entityManager(dataSource).merge(object); |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
80 } |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
81 |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
82 /** |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
83 * Remove an object from the datebase. |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
84 * This operation can not be undone. |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
85 * |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
86 * @param object The object to remove |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
87 * |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
88 * @throws IllegalArgumentException |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
89 * @throws TransactionRequiredException |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
90 */ |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
91 @TransactionAttribute(TransactionAttributeType.REQUIRED) |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
92 public void removeFromDatabase(Object object, String dataSource) |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
93 throws IllegalArgumentException, |
700
d74b5b1190ae
fixed delete probe service.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
457
diff
changeset
|
94 TransactionRequiredException, |
d74b5b1190ae
fixed delete probe service.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
457
diff
changeset
|
95 EJBTransactionRolledbackException |
457
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
96 { |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
97 EntityManager em = emp.entityManager(dataSource); |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
98 em.remove( |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
99 em.contains(object) ? |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
100 object : em.merge(object)); |
1100
7683c4162746
Updated importer.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1097
diff
changeset
|
101 em.flush(); |
457
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
102 } |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
103 |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
104 public Query queryFromString(String sql, String dataSource) { |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
105 EntityManager em = emp.entityManager(dataSource); |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
106 return em.createNativeQuery(sql); |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
107 } |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
108 |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
109 public EntityManager entityManager(String dataSource) { |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
110 return emp.entityManager(dataSource); |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
111 } |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
112 } |