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 }
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)