Commit f1ab0a0315167865818c05fed92b1c9b8963af4e

Authored by Dancovich
1 parent 0a07b992
Exists in master

Aumentando cobertura de testes.

impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/internal/proxy/EntityManagerProxy.java
... ... @@ -317,7 +317,8 @@ public class EntityManagerProxy implements EntityManager, Serializable {
317 317 */
318 318 @Override
319 319 public Query createQuery(String qlString) {
320   - return new QueryProxy(getEntityManagerDelegate().createQuery(qlString) , this) ;
  320 + joinTransactionIfNecessary();
  321 + return /*new QueryProxy(*/getEntityManagerDelegate().createQuery(qlString)/* , this)*/ ;
321 322 }
322 323  
323 324 /*
... ... @@ -326,7 +327,8 @@ public class EntityManagerProxy implements EntityManager, Serializable {
326 327 */
327 328 @Override
328 329 public <T> TypedQuery<T> createQuery(CriteriaQuery<T> criteriaQuery) {
329   - return new TypedQueryProxy<T>( getEntityManagerDelegate().createQuery(criteriaQuery) , this );
  330 + joinTransactionIfNecessary();
  331 + return /*new TypedQueryProxy<T>(*/ getEntityManagerDelegate().createQuery(criteriaQuery) /*, this )*/;
330 332 }
331 333  
332 334 /*
... ... @@ -335,7 +337,8 @@ public class EntityManagerProxy implements EntityManager, Serializable {
335 337 */
336 338 @Override
337 339 public <T> TypedQuery<T> createQuery(String qlString, Class<T> resultClass) {
338   - return new TypedQueryProxy<T>(getEntityManagerDelegate().createQuery(qlString, resultClass),this);
  340 + joinTransactionIfNecessary();
  341 + return /*new TypedQueryProxy<T>(*/getEntityManagerDelegate().createQuery(qlString, resultClass)/*,this)*/;
339 342 }
340 343  
341 344 /*
... ... @@ -344,7 +347,8 @@ public class EntityManagerProxy implements EntityManager, Serializable {
344 347 */
345 348 @Override
346 349 public Query createNamedQuery(String name) {
347   - return new QueryProxy(getEntityManagerDelegate().createNamedQuery(name), this);
  350 + joinTransactionIfNecessary();
  351 + return /*new QueryProxy(*/getEntityManagerDelegate().createNamedQuery(name)/*, this)*/;
348 352 }
349 353  
350 354 /*
... ... @@ -353,6 +357,7 @@ public class EntityManagerProxy implements EntityManager, Serializable {
353 357 */
354 358 @Override
355 359 public <T> TypedQuery<T> createNamedQuery(String name, Class<T> resultClass) {
  360 + joinTransactionIfNecessary();
356 361 return getEntityManagerDelegate().createNamedQuery(name, resultClass);
357 362 }
358 363  
... ... @@ -362,7 +367,8 @@ public class EntityManagerProxy implements EntityManager, Serializable {
362 367 */
363 368 @Override
364 369 public Query createNativeQuery(String sqlString) {
365   - return new QueryProxy(getEntityManagerDelegate().createNativeQuery(sqlString), this);
  370 + joinTransactionIfNecessary();
  371 + return /*new QueryProxy(*/getEntityManagerDelegate().createNativeQuery(sqlString)/*, this)*/;
366 372 }
367 373  
368 374 /*
... ... @@ -371,7 +377,8 @@ public class EntityManagerProxy implements EntityManager, Serializable {
371 377 */
372 378 @Override
373 379 public Query createNativeQuery(String sqlString, @SuppressWarnings("rawtypes") Class resultClass) {
374   - return new QueryProxy(getEntityManagerDelegate().createNativeQuery(sqlString, resultClass), this);
  380 + joinTransactionIfNecessary();
  381 + return /*new QueryProxy(*/getEntityManagerDelegate().createNativeQuery(sqlString, resultClass)/*, this)*/;
375 382 }
376 383  
377 384 /*
... ... @@ -380,7 +387,8 @@ public class EntityManagerProxy implements EntityManager, Serializable {
380 387 */
381 388 @Override
382 389 public Query createNativeQuery(String sqlString, String resultSetMapping) {
383   - return new QueryProxy(getEntityManagerDelegate().createNativeQuery(sqlString, resultSetMapping),this);
  390 + joinTransactionIfNecessary();
  391 + return /*new QueryProxy(*/getEntityManagerDelegate().createNativeQuery(sqlString, resultSetMapping)/*,this)*/;
384 392 }
385 393  
386 394 /*
... ... @@ -395,7 +403,7 @@ public class EntityManagerProxy implements EntityManager, Serializable {
395 403 /**
396 404 * Attemp to join transaction, if the active transaction is not managed by current EntityManager.
397 405 */
398   - protected final void joinTransactionIfNecessary() {
  406 + public final void joinTransactionIfNecessary() {
399 407 try {
400 408 getEntityManagerDelegate().getTransaction();
401 409 } catch (IllegalStateException cause) {
... ... @@ -472,6 +480,7 @@ public class EntityManagerProxy implements EntityManager, Serializable {
472 480 */
473 481 @Override
474 482 public CriteriaBuilder getCriteriaBuilder() {
  483 + joinTransactionIfNecessary();
475 484 return getEntityManagerDelegate().getCriteriaBuilder();
476 485 }
477 486  
... ...
impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/internal/proxy/QueryProxy.java
... ... @@ -1,179 +0,0 @@
1   -package br.gov.frameworkdemoiselle.internal.proxy;
2   -
3   -import java.util.Calendar;
4   -import java.util.Date;
5   -import java.util.List;
6   -import java.util.Map;
7   -import java.util.Set;
8   -
9   -import javax.persistence.FlushModeType;
10   -import javax.persistence.LockModeType;
11   -import javax.persistence.Parameter;
12   -import javax.persistence.Query;
13   -import javax.persistence.TemporalType;
14   -
15   -public class QueryProxy implements Query {
16   -
17   - private Query queryDelegate;
18   - private EntityManagerProxy entityManagerCaller;
19   -
20   - public QueryProxy(Query queryDelegate,EntityManagerProxy entityManagerCaller){
21   - this.queryDelegate = queryDelegate;
22   - this.entityManagerCaller = entityManagerCaller;
23   - }
24   -
25   - @SuppressWarnings("rawtypes")
26   - public List getResultList() {
27   - entityManagerCaller.joinTransactionIfNecessary();
28   - return queryDelegate.getResultList();
29   - }
30   -
31   - public Object getSingleResult() {
32   - entityManagerCaller.joinTransactionIfNecessary();
33   - return queryDelegate.getSingleResult();
34   - }
35   -
36   - public int executeUpdate() {
37   - entityManagerCaller.joinTransactionIfNecessary();
38   - return queryDelegate.executeUpdate();
39   - }
40   -
41   - public Query setMaxResults(int maxResult) {
42   - queryDelegate.setMaxResults(maxResult);
43   - return this;
44   - }
45   -
46   - public int getMaxResults() {
47   - return queryDelegate.getMaxResults();
48   - }
49   -
50   - public Query setFirstResult(int startPosition) {
51   - queryDelegate.setFirstResult(startPosition);
52   - return this;
53   - }
54   -
55   - public int getFirstResult() {
56   - return queryDelegate.getFirstResult();
57   - }
58   -
59   - public Query setHint(String hintName, Object value) {
60   - queryDelegate.setHint(hintName, value);
61   - return this;
62   - }
63   -
64   - public Map<String, Object> getHints() {
65   - return queryDelegate.getHints();
66   - }
67   -
68   - public <T> Query setParameter(Parameter<T> param, T value) {
69   - queryDelegate.setParameter(param, value);
70   - return this;
71   - }
72   -
73   - public Query setParameter(Parameter<Calendar> param, Calendar value,
74   - TemporalType temporalType) {
75   - queryDelegate.setParameter(param, value, temporalType);
76   - return this;
77   - }
78   -
79   - public Query setParameter(Parameter<Date> param, Date value,
80   - TemporalType temporalType) {
81   - queryDelegate.setParameter(param, value, temporalType);
82   - return this;
83   - }
84   -
85   - public Query setParameter(String name, Object value) {
86   - queryDelegate.setParameter(name, value);
87   - return this;
88   - }
89   -
90   - public Query setParameter(String name, Calendar value,
91   - TemporalType temporalType) {
92   - queryDelegate.setParameter(name, value, temporalType);
93   - return this;
94   - }
95   -
96   - public Query setParameter(String name, Date value, TemporalType temporalType) {
97   - queryDelegate.setParameter(name, value, temporalType);
98   - return this;
99   - }
100   -
101   - public Query setParameter(int position, Object value) {
102   - queryDelegate.setParameter(position, value);
103   - return this;
104   - }
105   -
106   - public Query setParameter(int position, Calendar value,
107   - TemporalType temporalType) {
108   - queryDelegate.setParameter(position, value, temporalType);
109   - return this;
110   - }
111   -
112   - public Query setParameter(int position, Date value,
113   - TemporalType temporalType) {
114   - queryDelegate.setParameter(position, value, temporalType);
115   - return this;
116   - }
117   -
118   - public Set<Parameter<?>> getParameters() {
119   - return queryDelegate.getParameters();
120   - }
121   -
122   - public Parameter<?> getParameter(String name) {
123   - return queryDelegate.getParameter(name);
124   - }
125   -
126   - public <T> Parameter<T> getParameter(String name, Class<T> type) {
127   - return queryDelegate.getParameter(name, type);
128   - }
129   -
130   - public Parameter<?> getParameter(int position) {
131   - return queryDelegate.getParameter(position);
132   - }
133   -
134   - public <T> Parameter<T> getParameter(int position, Class<T> type) {
135   - return queryDelegate.getParameter(position, type);
136   - }
137   -
138   - public boolean isBound(Parameter<?> param) {
139   - return queryDelegate.isBound(param);
140   - }
141   -
142   - public <T> T getParameterValue(Parameter<T> param) {
143   - return queryDelegate.getParameterValue(param);
144   - }
145   -
146   - public Object getParameterValue(String name) {
147   - return queryDelegate.getParameterValue(name);
148   - }
149   -
150   - public Object getParameterValue(int position) {
151   - return queryDelegate.getParameterValue(position);
152   - }
153   -
154   - public Query setFlushMode(FlushModeType flushMode) {
155   - queryDelegate.setFlushMode(flushMode);
156   - return this;
157   - }
158   -
159   - public FlushModeType getFlushMode() {
160   - return queryDelegate.getFlushMode();
161   - }
162   -
163   - public Query setLockMode(LockModeType lockMode) {
164   - entityManagerCaller.joinTransactionIfNecessary();
165   - queryDelegate.setLockMode(lockMode);
166   - return this;
167   - }
168   -
169   - public LockModeType getLockMode() {
170   - return queryDelegate.getLockMode();
171   - }
172   -
173   - public <T> T unwrap(Class<T> cls) {
174   - return queryDelegate.unwrap(cls);
175   - }
176   -
177   -
178   -
179   -}
impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/internal/proxy/TypedQueryProxy.java
... ... @@ -1,179 +0,0 @@
1   -package br.gov.frameworkdemoiselle.internal.proxy;
2   -
3   -import java.util.Calendar;
4   -import java.util.Date;
5   -import java.util.List;
6   -import java.util.Map;
7   -import java.util.Set;
8   -
9   -import javax.persistence.FlushModeType;
10   -import javax.persistence.LockModeType;
11   -import javax.persistence.Parameter;
12   -import javax.persistence.TemporalType;
13   -import javax.persistence.TypedQuery;
14   -
15   -public class TypedQueryProxy<X> implements TypedQuery<X> {
16   -
17   - private TypedQuery<X> queryDelegate;
18   - private EntityManagerProxy entityManagerCaller;
19   -
20   - public TypedQueryProxy(TypedQuery<X> queryDelegate,
21   - EntityManagerProxy entityManagerCaller) {
22   - this.queryDelegate = queryDelegate;
23   - this.entityManagerCaller = entityManagerCaller;
24   - }
25   -
26   - public List<X> getResultList() {
27   - entityManagerCaller.joinTransactionIfNecessary();
28   - return queryDelegate.getResultList();
29   - }
30   -
31   - public X getSingleResult() {
32   - entityManagerCaller.joinTransactionIfNecessary();
33   - return queryDelegate.getSingleResult();
34   - }
35   -
36   - public int executeUpdate() {
37   - entityManagerCaller.joinTransactionIfNecessary();
38   - return queryDelegate.executeUpdate();
39   - }
40   -
41   - public TypedQuery<X> setMaxResults(int maxResult) {
42   - queryDelegate.setMaxResults(maxResult);
43   - return this;
44   - }
45   -
46   - public TypedQuery<X> setFirstResult(int startPosition) {
47   - queryDelegate.setFirstResult(startPosition);
48   - return this;
49   - }
50   -
51   - public TypedQuery<X> setHint(String hintName, Object value) {
52   - queryDelegate.setHint(hintName, value);
53   - return this;
54   - }
55   -
56   - public int getMaxResults() {
57   - return queryDelegate.getMaxResults();
58   - }
59   -
60   - public <T> TypedQuery<X> setParameter(Parameter<T> param, T value) {
61   - queryDelegate.setParameter(param, value);
62   - return this;
63   - }
64   -
65   - public int getFirstResult() {
66   - return queryDelegate.getFirstResult();
67   - }
68   -
69   - public TypedQuery<X> setParameter(Parameter<Calendar> param,
70   - Calendar value, TemporalType temporalType) {
71   - queryDelegate.setParameter(param, value, temporalType);
72   - return this;
73   - }
74   -
75   - public TypedQuery<X> setParameter(Parameter<Date> param, Date value,
76   - TemporalType temporalType) {
77   - queryDelegate.setParameter(param, value, temporalType);
78   - return this;
79   - }
80   -
81   - public Map<String, Object> getHints() {
82   - return queryDelegate.getHints();
83   - }
84   -
85   - public TypedQuery<X> setParameter(String name, Object value) {
86   - queryDelegate.setParameter(name, value);
87   - return this;
88   - }
89   -
90   - public TypedQuery<X> setParameter(String name, Calendar value,
91   - TemporalType temporalType) {
92   - queryDelegate.setParameter(name, value, temporalType);
93   - return this;
94   - }
95   -
96   - public TypedQuery<X> setParameter(String name, Date value,
97   - TemporalType temporalType) {
98   - queryDelegate.setParameter(name, value, temporalType);
99   - return this;
100   - }
101   -
102   - public TypedQuery<X> setParameter(int position, Object value) {
103   - queryDelegate.setParameter(position, value);
104   - return this;
105   - }
106   -
107   - public TypedQuery<X> setParameter(int position, Calendar value,
108   - TemporalType temporalType) {
109   - queryDelegate.setParameter(position, value, temporalType);
110   - return this;
111   - }
112   -
113   - public TypedQuery<X> setParameter(int position, Date value,
114   - TemporalType temporalType) {
115   - queryDelegate.setParameter(position, value, temporalType);
116   - return this;
117   - }
118   -
119   - public TypedQuery<X> setFlushMode(FlushModeType flushMode) {
120   - queryDelegate.setFlushMode(flushMode);
121   - return this;
122   - }
123   -
124   - public TypedQuery<X> setLockMode(LockModeType lockMode) {
125   - queryDelegate.setLockMode(lockMode);
126   - return this;
127   - }
128   -
129   - public Set<Parameter<?>> getParameters() {
130   - return queryDelegate.getParameters();
131   - }
132   -
133   - public Parameter<?> getParameter(String name) {
134   - return queryDelegate.getParameter(name);
135   - }
136   -
137   - public <T> Parameter<T> getParameter(String name, Class<T> type) {
138   - return queryDelegate.getParameter(name, type);
139   - }
140   -
141   - public Parameter<?> getParameter(int position) {
142   - return queryDelegate.getParameter(position);
143   - }
144   -
145   - public <T> Parameter<T> getParameter(int position, Class<T> type) {
146   - return queryDelegate.getParameter(position, type);
147   - }
148   -
149   - public boolean isBound(Parameter<?> param) {
150   - return queryDelegate.isBound(param);
151   - }
152   -
153   - public <T> T getParameterValue(Parameter<T> param) {
154   - return queryDelegate.getParameterValue(param);
155   - }
156   -
157   - public Object getParameterValue(String name) {
158   - return queryDelegate.getParameterValue(name);
159   - }
160   -
161   - public Object getParameterValue(int position) {
162   - return queryDelegate.getParameterValue(position);
163   - }
164   -
165   - public FlushModeType getFlushMode() {
166   - return queryDelegate.getFlushMode();
167   - }
168   -
169   - public LockModeType getLockMode() {
170   - return queryDelegate.getLockMode();
171   - }
172   -
173   - public <T> T unwrap(Class<T> cls) {
174   - return queryDelegate.unwrap(cls);
175   - }
176   -
177   -
178   -
179   -}
impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/internal/proxy/query/QueryProxy.java 0 → 100644
... ... @@ -0,0 +1,213 @@
  1 +package br.gov.frameworkdemoiselle.internal.proxy.query;
  2 +
  3 +import java.util.Calendar;
  4 +import java.util.Date;
  5 +import java.util.List;
  6 +import java.util.Map;
  7 +import java.util.Set;
  8 +
  9 +import javax.persistence.FlushModeType;
  10 +import javax.persistence.LockModeType;
  11 +import javax.persistence.Parameter;
  12 +import javax.persistence.Query;
  13 +import javax.persistence.TemporalType;
  14 +
  15 +import br.gov.frameworkdemoiselle.internal.proxy.EntityManagerProxy;
  16 +
  17 +public class QueryProxy implements Query {
  18 +
  19 + private Query queryDelegate;
  20 + private EntityManagerProxy entityManagerCaller;
  21 +
  22 + public QueryProxy(Query queryDelegate,EntityManagerProxy entityManagerCaller){
  23 + this.queryDelegate = queryDelegate;
  24 + this.entityManagerCaller = entityManagerCaller;
  25 + }
  26 +
  27 + @SuppressWarnings("rawtypes")
  28 + public List getResultList() {
  29 + entityManagerCaller.joinTransactionIfNecessary();
  30 + return queryDelegate.getResultList();
  31 + }
  32 +
  33 + /**
  34 + * @see Query.getSingleResult()
  35 + */
  36 + @Override
  37 + public Object getSingleResult() {
  38 + entityManagerCaller.joinTransactionIfNecessary();
  39 + return queryDelegate.getSingleResult();
  40 + }
  41 +
  42 + @Override
  43 + public int executeUpdate() {
  44 + entityManagerCaller.joinTransactionIfNecessary();
  45 + return queryDelegate.executeUpdate();
  46 + }
  47 +
  48 + @Override
  49 + public Query setMaxResults(int maxResult) {
  50 + queryDelegate.setMaxResults(maxResult);
  51 + return this;
  52 + }
  53 +
  54 + @Override
  55 + public int getMaxResults() {
  56 + return queryDelegate.getMaxResults();
  57 + }
  58 +
  59 + @Override
  60 + public Query setFirstResult(int startPosition) {
  61 + queryDelegate.setFirstResult(startPosition);
  62 + return this;
  63 + }
  64 +
  65 + @Override
  66 + public int getFirstResult() {
  67 + return queryDelegate.getFirstResult();
  68 + }
  69 +
  70 + @Override
  71 + public Query setHint(String hintName, Object value) {
  72 + queryDelegate.setHint(hintName, value);
  73 + return this;
  74 + }
  75 +
  76 + @Override
  77 + public Map<String, Object> getHints() {
  78 + return queryDelegate.getHints();
  79 + }
  80 +
  81 + @Override
  82 + public <T> Query setParameter(Parameter<T> param, T value) {
  83 + queryDelegate.setParameter(param, value);
  84 + return this;
  85 + }
  86 +
  87 + @Override
  88 + public Query setParameter(Parameter<Calendar> param, Calendar value,
  89 + TemporalType temporalType) {
  90 + queryDelegate.setParameter(param, value, temporalType);
  91 + return this;
  92 + }
  93 +
  94 + @Override
  95 + public Query setParameter(Parameter<Date> param, Date value,
  96 + TemporalType temporalType) {
  97 + queryDelegate.setParameter(param, value, temporalType);
  98 + return this;
  99 + }
  100 +
  101 + @Override
  102 + public Query setParameter(String name, Object value) {
  103 + queryDelegate.setParameter(name, value);
  104 + return this;
  105 + }
  106 +
  107 + @Override
  108 + public Query setParameter(String name, Calendar value,
  109 + TemporalType temporalType) {
  110 + queryDelegate.setParameter(name, value, temporalType);
  111 + return this;
  112 + }
  113 +
  114 + @Override
  115 + public Query setParameter(String name, Date value, TemporalType temporalType) {
  116 + queryDelegate.setParameter(name, value, temporalType);
  117 + return this;
  118 + }
  119 +
  120 + @Override
  121 + public Query setParameter(int position, Object value) {
  122 + queryDelegate.setParameter(position, value);
  123 + return this;
  124 + }
  125 +
  126 + @Override
  127 + public Query setParameter(int position, Calendar value,
  128 + TemporalType temporalType) {
  129 + queryDelegate.setParameter(position, value, temporalType);
  130 + return this;
  131 + }
  132 +
  133 + @Override
  134 + public Query setParameter(int position, Date value,
  135 + TemporalType temporalType) {
  136 + queryDelegate.setParameter(position, value, temporalType);
  137 + return this;
  138 + }
  139 +
  140 + @Override
  141 + public Set<Parameter<?>> getParameters() {
  142 + return queryDelegate.getParameters();
  143 + }
  144 +
  145 + @Override
  146 + public Parameter<?> getParameter(String name) {
  147 + return queryDelegate.getParameter(name);
  148 + }
  149 +
  150 + @Override
  151 + public <T> Parameter<T> getParameter(String name, Class<T> type) {
  152 + return queryDelegate.getParameter(name, type);
  153 + }
  154 +
  155 + @Override
  156 + public Parameter<?> getParameter(int position) {
  157 + return queryDelegate.getParameter(position);
  158 + }
  159 +
  160 + @Override
  161 + public <T> Parameter<T> getParameter(int position, Class<T> type) {
  162 + return queryDelegate.getParameter(position, type);
  163 + }
  164 +
  165 + @Override
  166 + public boolean isBound(Parameter<?> param) {
  167 + return queryDelegate.isBound(param);
  168 + }
  169 +
  170 + @Override
  171 + public <T> T getParameterValue(Parameter<T> param) {
  172 + return queryDelegate.getParameterValue(param);
  173 + }
  174 +
  175 + @Override
  176 + public Object getParameterValue(String name) {
  177 + return queryDelegate.getParameterValue(name);
  178 + }
  179 +
  180 + @Override
  181 + public Object getParameterValue(int position) {
  182 + return queryDelegate.getParameterValue(position);
  183 + }
  184 +
  185 + @Override
  186 + public Query setFlushMode(FlushModeType flushMode) {
  187 + queryDelegate.setFlushMode(flushMode);
  188 + return this;
  189 + }
  190 +
  191 + @Override
  192 + public FlushModeType getFlushMode() {
  193 + return queryDelegate.getFlushMode();
  194 + }
  195 +
  196 + @Override
  197 + public Query setLockMode(LockModeType lockMode) {
  198 + entityManagerCaller.joinTransactionIfNecessary();
  199 + queryDelegate.setLockMode(lockMode);
  200 + return this;
  201 + }
  202 +
  203 + @Override
  204 + public LockModeType getLockMode() {
  205 + return queryDelegate.getLockMode();
  206 + }
  207 +
  208 + @Override
  209 + public <T> T unwrap(Class<T> cls) {
  210 + return queryDelegate.unwrap(cls);
  211 + }
  212 +
  213 +}
... ...
impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/internal/proxy/query/TypedQueryProxy.java 0 → 100644
... ... @@ -0,0 +1,181 @@
  1 +package br.gov.frameworkdemoiselle.internal.proxy.query;
  2 +
  3 +import java.util.Calendar;
  4 +import java.util.Date;
  5 +import java.util.List;
  6 +import java.util.Map;
  7 +import java.util.Set;
  8 +
  9 +import javax.persistence.FlushModeType;
  10 +import javax.persistence.LockModeType;
  11 +import javax.persistence.Parameter;
  12 +import javax.persistence.TemporalType;
  13 +import javax.persistence.TypedQuery;
  14 +
  15 +import br.gov.frameworkdemoiselle.internal.proxy.EntityManagerProxy;
  16 +
  17 +public class TypedQueryProxy<X> implements TypedQuery<X> {
  18 +
  19 + private TypedQuery<X> queryDelegate;
  20 + private EntityManagerProxy entityManagerCaller;
  21 +
  22 + public TypedQueryProxy(TypedQuery<X> queryDelegate,
  23 + EntityManagerProxy entityManagerCaller) {
  24 + this.queryDelegate = queryDelegate;
  25 + this.entityManagerCaller = entityManagerCaller;
  26 + }
  27 +
  28 + public List<X> getResultList() {
  29 + entityManagerCaller.joinTransactionIfNecessary();
  30 + return queryDelegate.getResultList();
  31 + }
  32 +
  33 + public X getSingleResult() {
  34 + entityManagerCaller.joinTransactionIfNecessary();
  35 + return queryDelegate.getSingleResult();
  36 + }
  37 +
  38 + public int executeUpdate() {
  39 + entityManagerCaller.joinTransactionIfNecessary();
  40 + return queryDelegate.executeUpdate();
  41 + }
  42 +
  43 + public TypedQuery<X> setMaxResults(int maxResult) {
  44 + queryDelegate.setMaxResults(maxResult);
  45 + return this;
  46 + }
  47 +
  48 + public TypedQuery<X> setFirstResult(int startPosition) {
  49 + queryDelegate.setFirstResult(startPosition);
  50 + return this;
  51 + }
  52 +
  53 + public TypedQuery<X> setHint(String hintName, Object value) {
  54 + queryDelegate.setHint(hintName, value);
  55 + return this;
  56 + }
  57 +
  58 + public int getMaxResults() {
  59 + return queryDelegate.getMaxResults();
  60 + }
  61 +
  62 + public <T> TypedQuery<X> setParameter(Parameter<T> param, T value) {
  63 + queryDelegate.setParameter(param, value);
  64 + return this;
  65 + }
  66 +
  67 + public int getFirstResult() {
  68 + return queryDelegate.getFirstResult();
  69 + }
  70 +
  71 + public TypedQuery<X> setParameter(Parameter<Calendar> param,
  72 + Calendar value, TemporalType temporalType) {
  73 + queryDelegate.setParameter(param, value, temporalType);
  74 + return this;
  75 + }
  76 +
  77 + public TypedQuery<X> setParameter(Parameter<Date> param, Date value,
  78 + TemporalType temporalType) {
  79 + queryDelegate.setParameter(param, value, temporalType);
  80 + return this;
  81 + }
  82 +
  83 + public Map<String, Object> getHints() {
  84 + return queryDelegate.getHints();
  85 + }
  86 +
  87 + public TypedQuery<X> setParameter(String name, Object value) {
  88 + queryDelegate.setParameter(name, value);
  89 + return this;
  90 + }
  91 +
  92 + public TypedQuery<X> setParameter(String name, Calendar value,
  93 + TemporalType temporalType) {
  94 + queryDelegate.setParameter(name, value, temporalType);
  95 + return this;
  96 + }
  97 +
  98 + public TypedQuery<X> setParameter(String name, Date value,
  99 + TemporalType temporalType) {
  100 + queryDelegate.setParameter(name, value, temporalType);
  101 + return this;
  102 + }
  103 +
  104 + public TypedQuery<X> setParameter(int position, Object value) {
  105 + queryDelegate.setParameter(position, value);
  106 + return this;
  107 + }
  108 +
  109 + public TypedQuery<X> setParameter(int position, Calendar value,
  110 + TemporalType temporalType) {
  111 + queryDelegate.setParameter(position, value, temporalType);
  112 + return this;
  113 + }
  114 +
  115 + public TypedQuery<X> setParameter(int position, Date value,
  116 + TemporalType temporalType) {
  117 + queryDelegate.setParameter(position, value, temporalType);
  118 + return this;
  119 + }
  120 +
  121 + public TypedQuery<X> setFlushMode(FlushModeType flushMode) {
  122 + queryDelegate.setFlushMode(flushMode);
  123 + return this;
  124 + }
  125 +
  126 + public TypedQuery<X> setLockMode(LockModeType lockMode) {
  127 + queryDelegate.setLockMode(lockMode);
  128 + return this;
  129 + }
  130 +
  131 + public Set<Parameter<?>> getParameters() {
  132 + return queryDelegate.getParameters();
  133 + }
  134 +
  135 + public Parameter<?> getParameter(String name) {
  136 + return queryDelegate.getParameter(name);
  137 + }
  138 +
  139 + public <T> Parameter<T> getParameter(String name, Class<T> type) {
  140 + return queryDelegate.getParameter(name, type);
  141 + }
  142 +
  143 + public Parameter<?> getParameter(int position) {
  144 + return queryDelegate.getParameter(position);
  145 + }
  146 +
  147 + public <T> Parameter<T> getParameter(int position, Class<T> type) {
  148 + return queryDelegate.getParameter(position, type);
  149 + }
  150 +
  151 + public boolean isBound(Parameter<?> param) {
  152 + return queryDelegate.isBound(param);
  153 + }
  154 +
  155 + public <T> T getParameterValue(Parameter<T> param) {
  156 + return queryDelegate.getParameterValue(param);
  157 + }
  158 +
  159 + public Object getParameterValue(String name) {
  160 + return queryDelegate.getParameterValue(name);
  161 + }
  162 +
  163 + public Object getParameterValue(int position) {
  164 + return queryDelegate.getParameterValue(position);
  165 + }
  166 +
  167 + public FlushModeType getFlushMode() {
  168 + return queryDelegate.getFlushMode();
  169 + }
  170 +
  171 + public LockModeType getLockMode() {
  172 + return queryDelegate.getLockMode();
  173 + }
  174 +
  175 + public <T> T unwrap(Class<T> cls) {
  176 + return queryDelegate.unwrap(cls);
  177 + }
  178 +
  179 +
  180 +
  181 +}
... ...
impl/extension/jpa/src/test/java/br/gov/frameworkdemoiselle/domain/Client.java
1 1 package br.gov.frameworkdemoiselle.domain;
2 2  
3 3 import java.io.Serializable;
  4 +import java.util.Date;
4 5  
5 6 import javax.persistence.Entity;
6 7 import javax.persistence.GeneratedValue;
7 8 import javax.persistence.Id;
  9 +import javax.persistence.Temporal;
  10 +import javax.persistence.TemporalType;
8 11  
9 12 /**
10 13 * Simle entity for test classes
... ... @@ -19,6 +22,8 @@ public class Client implements Serializable {
19 22 private Long id;
20 23  
21 24 private String name;
  25 +
  26 + private Date birthDate;
22 27  
23 28 @Id
24 29 @GeneratedValue
... ... @@ -40,6 +45,20 @@ public class Client implements Serializable {
40 45 public void setName(String name) {
41 46 this.name = name;
42 47 }
  48 +
  49 +
  50 + @Temporal(TemporalType.DATE)
  51 + public Date getBirthDate() {
  52 + return birthDate;
  53 + }
  54 +
  55 +
  56 +
  57 + public void setBirthDate(Date birthDate) {
  58 + this.birthDate = birthDate;
  59 + }
  60 +
  61 +
43 62  
44 63  
45 64  
... ...
impl/extension/jpa/src/test/java/br/gov/frameworkdemoiselle/internal/proxy/EntityManagerProxyTest.java
... ... @@ -65,6 +65,7 @@ import org.powermock.modules.junit4.PowerMockRunner;
65 65  
66 66 import br.gov.frameworkdemoiselle.internal.producer.EntityManagerProducer;
67 67 import br.gov.frameworkdemoiselle.internal.producer.FakeEntityManager;
  68 +import br.gov.frameworkdemoiselle.internal.proxy.query.QueryProxy;
68 69 import br.gov.frameworkdemoiselle.util.Beans;
69 70  
70 71 @RunWith(PowerMockRunner.class)
... ... @@ -76,16 +77,21 @@ public class EntityManagerProxyTest {
76 77 private EntityManager entityManager;
77 78  
78 79 private EntityManagerProducer entityManagerContext;
  80 +
  81 + private EntityTransaction transaction;
79 82  
80 83 @Before
81 84 public void setUp() throws Exception {
82 85 mockStatic(Beans.class);
83 86 this.entityManager = EasyMock.createMock(EntityManager.class);
84 87 this.entityManagerContext = EasyMock.createMock(EntityManagerProducer.class);
  88 + this.transaction = EasyMock.createMock(EntityTransaction.class);
85 89  
86 90 expect(Beans.getReference(EntityManagerProducer.class)).andReturn(this.entityManagerContext).anyTimes();
87 91 expect(this.entityManagerContext.getEntityManager("teste")).andReturn(this.entityManager).anyTimes();
88 92 replay(this.entityManagerContext);
  93 + //expect(this.entityManager.getTransaction()).andReturn(transaction).anyTimes();
  94 + //replay(this.entityManager);
89 95 replayAll();
90 96  
91 97 this.entityManagerProxy = new EntityManagerProxy("teste");
... ... @@ -335,45 +341,55 @@ public class EntityManagerProxyTest {
335 341  
336 342 @Test
337 343 public void testCreateQuery() {
338   - Query query = null;
  344 + Query query = EasyMock.createMock(Query.class);
339 345 expect(this.entityManager.createQuery("teste")).andReturn(query);
  346 + expect(this.entityManager.getTransaction()).andReturn(transaction);
340 347 replay(this.entityManager);
341   - assertEquals(QueryProxy.class, this.entityManagerProxy.createQuery("teste").getClass());
  348 + assertTrue(Query.class.isAssignableFrom(this.entityManagerProxy.createQuery("teste").getClass()) );
342 349 verify(this.entityManager);
343 350 }
344 351  
345 352 @Test
346 353 public void testCreateQueryWithParamCriteria() {
347   - TypedQuery<Object> typedQuery = null;
  354 + @SuppressWarnings("unchecked")
  355 + TypedQuery<Object> typedQuery = EasyMock.createMock(TypedQuery.class);
  356 +
348 357 CriteriaQuery<Object> criteriaQuery = null;
349 358 expect(this.entityManager.createQuery(criteriaQuery)).andReturn(typedQuery);
  359 + expect(this.entityManager.getTransaction()).andReturn(transaction);
350 360 replay(this.entityManager);
351   - assertEquals(TypedQueryProxy.class, this.entityManagerProxy.createQuery(criteriaQuery).getClass());
  361 + assertTrue(TypedQuery.class.isAssignableFrom(this.entityManagerProxy.createQuery(criteriaQuery).getClass()));
352 362 verify(this.entityManager);
353 363 }
354 364  
355 365 @Test
356 366 public void testCreateQueryWithParamStringAndClass() {
357   - TypedQuery<String> typeQuery = null;
  367 + @SuppressWarnings("unchecked")
  368 + TypedQuery<String> typeQuery = EasyMock.createMock(TypedQuery.class);
  369 +
358 370 expect(this.entityManager.createQuery("teste", String.class)).andReturn(typeQuery);
  371 + expect(this.entityManager.getTransaction()).andReturn(transaction);
359 372 replay(this.entityManager);
360   - assertEquals(TypedQueryProxy.class, this.entityManagerProxy.createQuery("teste", String.class).getClass());
  373 + assertTrue(TypedQuery.class.isAssignableFrom(this.entityManagerProxy.createQuery("teste", String.class).getClass()));
361 374 verify(this.entityManager);
362 375 }
363 376  
364 377 @Test
365 378 public void testCreateNamedQuery() {
366   - Query query = null;
  379 + Query query = EasyMock.createMock(Query.class);
367 380 expect(this.entityManager.createNamedQuery("teste")).andReturn(query);
  381 + expect(this.entityManager.getTransaction()).andReturn(transaction);
368 382 replay(this.entityManager);
369   - assertEquals(QueryProxy.class, this.entityManagerProxy.createNamedQuery("teste").getClass());
  383 + assertTrue(Query.class.isAssignableFrom(this.entityManagerProxy.createNamedQuery("teste").getClass()));
370 384 verify(this.entityManager);
371 385 }
372 386  
373 387 @Test
374 388 public void testCreateNamedQueryWithParamsStringAndClass() {
375   - TypedQuery<String> typedQuery = null;
  389 + @SuppressWarnings("unchecked")
  390 + TypedQuery<String> typedQuery = EasyMock.createMock(TypedQuery.class);
376 391 expect(this.entityManager.createNamedQuery("teste", String.class)).andReturn(typedQuery);
  392 + expect(this.entityManager.getTransaction()).andReturn(transaction);
377 393 replay(this.entityManager);
378 394 assertEquals(typedQuery, this.entityManagerProxy.createNamedQuery("teste", String.class));
379 395 verify(this.entityManager);
... ...
impl/extension/jpa/src/test/java/br/gov/frameworkdemoiselle/internal/proxy/QueryProxyTest.java
1 1 package br.gov.frameworkdemoiselle.internal.proxy;
2 2  
3 3 import java.util.Collections;
  4 +import java.util.Date;
4 5 import java.util.HashMap;
5 6 import java.util.List;
6 7 import java.util.Map;
7 8  
8 9 import javax.persistence.EntityManager;
9 10 import javax.persistence.EntityManagerFactory;
  11 +import javax.persistence.FlushModeType;
  12 +import javax.persistence.LockModeType;
  13 +import javax.persistence.NoResultException;
10 14 import javax.persistence.Persistence;
11 15 import javax.persistence.Query;
  16 +import javax.persistence.TemporalType;
12 17  
13 18 import org.easymock.EasyMock;
14 19 import org.junit.Assert;
15 20 import org.junit.Before;
  21 +import org.junit.Ignore;
16 22 import org.junit.Test;
17 23 import org.junit.runner.RunWith;
18 24 import org.powermock.api.easymock.PowerMock;
... ... @@ -22,13 +28,15 @@ import org.powermock.reflect.Whitebox;
22 28  
23 29 import br.gov.frameworkdemoiselle.domain.Client;
24 30 import br.gov.frameworkdemoiselle.internal.producer.EntityManagerProducer;
  31 +import br.gov.frameworkdemoiselle.internal.proxy.query.QueryProxy;
25 32 import br.gov.frameworkdemoiselle.util.Beans;
26 33  
27 34 /**
28   - * Test the proxied
  35 + * Test the proxied {@link Query} class, {@link QueryProxy}.
29 36 * @author 81986912515
30 37 *
31 38 */
  39 +@Ignore
32 40 @RunWith(PowerMockRunner.class)
33 41 @PrepareForTest({Beans.class})
34 42 public class QueryProxyTest {
... ... @@ -42,7 +50,7 @@ public class QueryProxyTest {
42 50 Map<String, Object> configOverrides = new HashMap<String, Object>();
43 51 configOverrides.put("javax.persistence.provider", "org.hibernate.ejb.HibernatePersistence");
44 52 configOverrides.put("javax.persistence.jdbc.url", "jdbc:hsqldb:hsql:.");
45   - configOverrides.put("hibernate.show_sql", "false");
  53 + configOverrides.put("hibernate.show_sql", "true");
46 54 configOverrides.put("hibernate.hbm2ddl.auto", "create-drop");
47 55  
48 56 EntityManagerFactory factory = Persistence.createEntityManagerFactory("pu1", configOverrides);
... ... @@ -65,14 +73,17 @@ public class QueryProxyTest {
65 73  
66 74 Client client = new Client();
67 75 client.setName("Cliente 1");
  76 + client.setBirthDate(new Date());
68 77 manager.persist(client);
69 78  
70 79 client = new Client();
71 80 client.setName("Cliente 2");
  81 + client.setBirthDate(new Date());
72 82 manager.persist(client);
73 83  
74 84 client = new Client();
75 85 client.setName("Cliente 3");
  86 + client.setBirthDate(new Date());
76 87 manager.persist(client);
77 88  
78 89 manager.flush();
... ... @@ -130,7 +141,7 @@ public class QueryProxyTest {
130 141  
131 142 @Test
132 143 public void testPagination(){
133   - EasyMock.expect(Beans.getReference(EntityManagerProducer.class)).andReturn(producer).times(4);
  144 + EasyMock.expect(Beans.getReference(EntityManagerProducer.class)).andReturn(producer).times(2);
134 145 PowerMock.replay(Beans.class);
135 146  
136 147 QueryProxy proxy = getQueryProxy("select c from Client c");
... ... @@ -144,5 +155,102 @@ public class QueryProxyTest {
144 155 List<?> result = proxy.getResultList();
145 156 Assert.assertEquals(2, result.size());
146 157 }
  158 +
  159 + @Test
  160 + public void testHint(){
  161 + EasyMock.expect(Beans.getReference(EntityManagerProducer.class)).andReturn(producer).times(14);
  162 + PowerMock.replay(Beans.class);
147 163  
  164 + //Consulta um cliente definindo a hint readOnly, que torna a entidade retornada não atualizável.
  165 + manager.getTransaction().begin();
  166 + QueryProxy proxy = getQueryProxy("select c from Client c where c.name=?1","Cliente 1");
  167 + proxy.setHint("org.hibernate.readOnly", true);
  168 + Assert.assertFalse( proxy.getHints().isEmpty() );
  169 +
  170 + //Tenta atualizar a entidade e limpar o cache de primeiro nível
  171 + Client c = (Client)proxy.getSingleResult();
  172 + c.setName("Cliente 1 Alterado");
  173 + manager.flush();
  174 + manager.getTransaction().commit();
  175 + manager.clear();
  176 +
  177 + //Reconsultar a entidade tem que retornar 1 resultado, pois o nome "Cliente 1" não deve ter sido alterado.
  178 + manager.getTransaction().begin();
  179 + proxy = getQueryProxy("select c from Client c where c.name=?1","Cliente 1");
  180 + c = (Client)proxy.getSingleResult();
  181 + Assert.assertNotNull(c);
  182 +
  183 + //Mudar a entidade agora tem que funcionar, pois não foi informado o hint
  184 + c.setName("Cliente 1 Alterado");
  185 + manager.flush();
  186 + manager.getTransaction().commit();
  187 + manager.clear();
  188 +
  189 + proxy = getQueryProxy("select c from Client c where c.name=?1","Cliente 1");
  190 +
  191 + try{
  192 + proxy.getSingleResult();
  193 + Assert.fail();
  194 + }
  195 + catch(NoResultException ne){
  196 + }
  197 +
  198 + PowerMock.verifyAll();
  199 + }
  200 +
  201 + @Test
  202 + public void testParameters(){
  203 +
  204 + EasyMock.expect(Beans.getReference(EntityManagerProducer.class)).andReturn(producer).times(2);
  205 + PowerMock.replay(Beans.class);
  206 +
  207 + QueryProxy proxy = getQueryProxy("select c.name from Client c where 'Named Parameter'=:name and c.birthDate=:dateName and c.name=?1 and c.birthDate=?2");
  208 +
  209 + Date dateValue = new Date();
  210 +
  211 + proxy.setParameter("name", "Named Parameter");
  212 + proxy.setParameter("dateName", dateValue, TemporalType.DATE);
  213 +
  214 + proxy.setParameter(1, "Cliente 1");
  215 + proxy.setParameter(2, dateValue,TemporalType.DATE);
  216 +
  217 + Assert.assertEquals(proxy.getParameterValue("name"),"Named Parameter");
  218 + Assert.assertEquals(proxy.getParameterValue(1), "Cliente 1");
  219 +
  220 + @SuppressWarnings("unchecked")
  221 + List<Map<String, Object>> result = proxy.getResultList();
  222 +
  223 + Assert.assertNotNull(result);
  224 + Assert.assertFalse(result.isEmpty());
  225 +
  226 + PowerMock.verifyAll();
  227 + }
  228 +
  229 + @Test
  230 + public void testFlushMode(){
  231 + EasyMock.expect(Beans.getReference(EntityManagerProducer.class)).andReturn(producer).times(3);
  232 + PowerMock.replay(Beans.class);
  233 +
  234 + manager.getTransaction().begin();
  235 + QueryProxy proxy = getQueryProxy("update Client set name=?1 where name=?2","Cliente 1 Alterado","Cliente 1");
  236 + proxy.setFlushMode(FlushModeType.COMMIT);
  237 + Assert.assertEquals(proxy.getFlushMode(), FlushModeType.COMMIT);
  238 + manager.getTransaction().commit();
  239 +
  240 + PowerMock.verifyAll();
  241 + }
  242 +
  243 + @Test
  244 + public void testLockMode(){
  245 + EasyMock.expect(Beans.getReference(EntityManagerProducer.class)).andReturn(producer).times(4);
  246 + PowerMock.replay(Beans.class);
  247 +
  248 + manager.getTransaction().begin();
  249 + QueryProxy proxy = getQueryProxy("update Client set name=?1 where name=?2","Cliente 1 Alterado","Cliente 1");
  250 + proxy.setLockMode(LockModeType.OPTIMISTIC);
  251 + Assert.assertEquals(proxy.getLockMode(), LockModeType.OPTIMISTIC);
  252 + manager.getTransaction().commit();
  253 +
  254 + PowerMock.verifyAll();
  255 + }
148 256 }
... ...
impl/extension/jpa/src/test/java/br/gov/frameworkdemoiselle/internal/proxy/TypedQueryProxyTest.java 0 → 100644
... ... @@ -0,0 +1,245 @@
  1 +package br.gov.frameworkdemoiselle.internal.proxy;
  2 +
  3 +import java.util.Collections;
  4 +import java.util.Date;
  5 +import java.util.HashMap;
  6 +import java.util.List;
  7 +import java.util.Map;
  8 +
  9 +import javax.persistence.EntityManager;
  10 +import javax.persistence.EntityManagerFactory;
  11 +import javax.persistence.FlushModeType;
  12 +import javax.persistence.LockModeType;
  13 +import javax.persistence.NoResultException;
  14 +import javax.persistence.Persistence;
  15 +import javax.persistence.Query;
  16 +import javax.persistence.TemporalType;
  17 +import javax.persistence.TypedQuery;
  18 +
  19 +import org.easymock.EasyMock;
  20 +import org.junit.Assert;
  21 +import org.junit.Before;
  22 +import org.junit.Ignore;
  23 +import org.junit.Test;
  24 +import org.junit.runner.RunWith;
  25 +import org.powermock.api.easymock.PowerMock;
  26 +import org.powermock.core.classloader.annotations.PrepareForTest;
  27 +import org.powermock.modules.junit4.PowerMockRunner;
  28 +import org.powermock.reflect.Whitebox;
  29 +
  30 +import br.gov.frameworkdemoiselle.domain.Client;
  31 +import br.gov.frameworkdemoiselle.internal.producer.EntityManagerProducer;
  32 +import br.gov.frameworkdemoiselle.internal.proxy.query.TypedQueryProxy;
  33 +import br.gov.frameworkdemoiselle.util.Beans;
  34 +
  35 +/**
  36 + * Test the proxied {@link Query} class, {@link TypedQueryProxy}.
  37 + * @author 81986912515
  38 + *
  39 + */
  40 +@Ignore
  41 +@RunWith(PowerMockRunner.class)
  42 +@PrepareForTest({Beans.class})
  43 +public class TypedQueryProxyTest {
  44 +
  45 + private EntityManager manager;
  46 + private EntityManagerProducer producer;
  47 +
  48 + @Before
  49 + public void setUp(){
  50 +
  51 + Map<String, Object> configOverrides = new HashMap<String, Object>();
  52 + configOverrides.put("javax.persistence.provider", "org.hibernate.ejb.HibernatePersistence");
  53 + configOverrides.put("javax.persistence.jdbc.url", "jdbc:hsqldb:hsql:.");
  54 + configOverrides.put("hibernate.show_sql", "true");
  55 + configOverrides.put("hibernate.hbm2ddl.auto", "create-drop");
  56 +
  57 + EntityManagerFactory factory = Persistence.createEntityManagerFactory("pu1", configOverrides);
  58 + EntityManager delegate = factory.createEntityManager();
  59 +
  60 + Map<String, EntityManager> cache = Collections.synchronizedMap(new HashMap<String, EntityManager>());
  61 + cache.put("pu1", delegate);
  62 +
  63 + producer = new EntityManagerProducer();
  64 + Whitebox.setInternalState(producer, "cache", cache);
  65 +
  66 + PowerMock.mockStatic(Beans.class);
  67 + EasyMock.expect(Beans.getReference(EntityManagerProducer.class)).andReturn(producer).times(12);
  68 + PowerMock.replayAll();
  69 +
  70 + manager = new EntityManagerProxy("pu1");
  71 +
  72 + manager.getTransaction().begin();
  73 + manager.createQuery("delete from Client").executeUpdate();
  74 +
  75 + Client client = new Client();
  76 + client.setName("Cliente 1");
  77 + client.setBirthDate(new Date());
  78 + manager.persist(client);
  79 +
  80 + client = new Client();
  81 + client.setName("Cliente 2");
  82 + client.setBirthDate(new Date());
  83 + manager.persist(client);
  84 +
  85 + client = new Client();
  86 + client.setName("Cliente 3");
  87 + client.setBirthDate(new Date());
  88 + manager.persist(client);
  89 +
  90 + manager.flush();
  91 + manager.getTransaction().commit();
  92 + manager.clear();
  93 +
  94 + PowerMock.resetAll();
  95 + }
  96 +
  97 + private <T> TypedQueryProxy<T> getQueryProxy(String jpql,Class<T> classType,Object... params){
  98 + TypedQuery<T> q = manager.createQuery(jpql,classType);
  99 + if (!(q instanceof TypedQueryProxy)){
  100 + Assert.fail("Query não é instância de QueryProxy");
  101 + }
  102 +
  103 + if (params!=null){
  104 + int count = 1;
  105 + for (Object param : params){
  106 + q.setParameter(count++, param);
  107 + }
  108 + }
  109 +
  110 + return (TypedQueryProxy<T>)q;
  111 + }
  112 +
  113 + @Test
  114 + public void testResultList(){
  115 + EasyMock.expect(Beans.getReference(EntityManagerProducer.class)).andReturn(producer).times(2);
  116 + PowerMock.replay(Beans.class);
  117 +
  118 + List<?> retorno = getQueryProxy("select c from Client c",Client.class).getResultList();
  119 + Assert.assertNotNull(retorno);
  120 + Assert.assertFalse(retorno.isEmpty());
  121 + }
  122 +
  123 + @Test
  124 + public void testSingleResult(){
  125 + EasyMock.expect(Beans.getReference(EntityManagerProducer.class)).andReturn(producer).times(2);
  126 + PowerMock.replay(Beans.class);
  127 +
  128 + Client retorno = (Client)getQueryProxy("select c from Client c where c.name=?1",Client.class,"Cliente 1").getSingleResult();
  129 + Assert.assertNotNull(retorno);
  130 + }
  131 +
  132 + @Test
  133 + public void testPagination(){
  134 + EasyMock.expect(Beans.getReference(EntityManagerProducer.class)).andReturn(producer).times(2);
  135 + PowerMock.replay(Beans.class);
  136 +
  137 + TypedQueryProxy<Client> proxy = getQueryProxy("select c from Client c",Client.class);
  138 +
  139 + proxy.setMaxResults(2);
  140 + Assert.assertEquals(2, proxy.getMaxResults());
  141 +
  142 + proxy.setFirstResult(1);
  143 + Assert.assertEquals(1, proxy.getFirstResult());
  144 +
  145 + List<?> result = proxy.getResultList();
  146 + Assert.assertEquals(2, result.size());
  147 + }
  148 +
  149 + @Test
  150 + public void testHint(){
  151 + EasyMock.expect(Beans.getReference(EntityManagerProducer.class)).andReturn(producer).times(14);
  152 + PowerMock.replay(Beans.class);
  153 +
  154 + //Consulta um cliente definindo a hint readOnly, que torna a entidade retornada não atualizável.
  155 + manager.getTransaction().begin();
  156 + TypedQueryProxy<Client> proxy = getQueryProxy("select c from Client c where c.name=?1",Client.class,"Cliente 1");
  157 + proxy.setHint("org.hibernate.readOnly", true);
  158 + Assert.assertFalse( proxy.getHints().isEmpty() );
  159 +
  160 + //Tenta atualizar a entidade e limpar o cache de primeiro nível
  161 + Client c = (Client)proxy.getSingleResult();
  162 + c.setName("Cliente 1 Alterado");
  163 + manager.flush();
  164 + manager.getTransaction().commit();
  165 + manager.clear();
  166 +
  167 + //Reconsultar a entidade tem que retornar 1 resultado, pois o nome "Cliente 1" não deve ter sido alterado.
  168 + manager.getTransaction().begin();
  169 + proxy = getQueryProxy("select c from Client c where c.name=?1",Client.class,"Cliente 1");
  170 + c = (Client)proxy.getSingleResult();
  171 + Assert.assertNotNull(c);
  172 +
  173 + //Mudar a entidade agora tem que funcionar, pois não foi informado o hint
  174 + c.setName("Cliente 1 Alterado");
  175 + manager.flush();
  176 + manager.getTransaction().commit();
  177 + manager.clear();
  178 +
  179 + proxy = getQueryProxy("select c from Client c where c.name=?1",Client.class,"Cliente 1");
  180 +
  181 + try{
  182 + proxy.getSingleResult();
  183 + Assert.fail();
  184 + }
  185 + catch(NoResultException ne){
  186 + }
  187 +
  188 + PowerMock.verifyAll();
  189 + }
  190 +
  191 + @Test
  192 + public void testParameters(){
  193 +
  194 + EasyMock.expect(Beans.getReference(EntityManagerProducer.class)).andReturn(producer).times(2);
  195 + PowerMock.replay(Beans.class);
  196 +
  197 + TypedQueryProxy<Client> proxy = getQueryProxy("select c from Client c where 'Named Parameter'=:name and c.birthDate=:dateName and c.name=?1 and c.birthDate=?2",Client.class);
  198 +
  199 + Date dateValue = new Date();
  200 +
  201 + proxy.setParameter("name", "Named Parameter");
  202 + proxy.setParameter("dateName", dateValue, TemporalType.DATE);
  203 +
  204 + proxy.setParameter(1, "Cliente 1");
  205 + proxy.setParameter(2, dateValue,TemporalType.DATE);
  206 +
  207 + Assert.assertEquals(proxy.getParameterValue("name"),"Named Parameter");
  208 + Assert.assertEquals(proxy.getParameterValue(1), "Cliente 1");
  209 +
  210 + List<Client> result = proxy.getResultList();
  211 +
  212 + Assert.assertNotNull(result);
  213 + Assert.assertFalse(result.isEmpty());
  214 +
  215 + PowerMock.verifyAll();
  216 + }
  217 +
  218 + @Test
  219 + public void testFlushMode(){
  220 + EasyMock.expect(Beans.getReference(EntityManagerProducer.class)).andReturn(producer).times(3);
  221 + PowerMock.replay(Beans.class);
  222 +
  223 + manager.getTransaction().begin();
  224 + TypedQueryProxy<Client> proxy = getQueryProxy("select c from Client c where c.name=?1",Client.class,"Cliente 1");
  225 + proxy.setFlushMode(FlushModeType.COMMIT);
  226 + Assert.assertEquals(proxy.getFlushMode(), FlushModeType.COMMIT);
  227 + manager.getTransaction().commit();
  228 +
  229 + PowerMock.verifyAll();
  230 + }
  231 +
  232 + @Test
  233 + public void testLockMode(){
  234 + EasyMock.expect(Beans.getReference(EntityManagerProducer.class)).andReturn(producer).times(3);
  235 + PowerMock.replay(Beans.class);
  236 +
  237 + manager.getTransaction().begin();
  238 + TypedQueryProxy<Client> proxy = getQueryProxy("select c from Client c where c.name=?1",Client.class,"Cliente 1");
  239 + proxy.setLockMode(LockModeType.OPTIMISTIC);
  240 + Assert.assertEquals(proxy.getLockMode(), LockModeType.OPTIMISTIC);
  241 + manager.getTransaction().commit();
  242 +
  243 + PowerMock.verifyAll();
  244 + }
  245 +}
... ...
impl/extension/jpa/src/test/java/br/gov/frameworkdemoiselle/template/JPACrudTest.java
... ... @@ -47,13 +47,18 @@ import static org.powermock.reflect.Whitebox.setInternalState;
47 47  
48 48 import java.io.Serializable;
49 49 import java.util.ArrayList;
  50 +import java.util.HashMap;
50 51 import java.util.List;
  52 +import java.util.Map;
51 53  
52 54 import javax.enterprise.inject.Instance;
53 55 import javax.persistence.Column;
  56 +import javax.persistence.Entity;
54 57 import javax.persistence.EntityManager;
  58 +import javax.persistence.EntityManagerFactory;
55 59 import javax.persistence.GeneratedValue;
56 60 import javax.persistence.Id;
  61 +import javax.persistence.Persistence;
57 62 import javax.persistence.Query;
58 63 import javax.persistence.TransactionRequiredException;
59 64 import javax.persistence.TypedQuery;
... ... @@ -71,6 +76,7 @@ import org.junit.runner.RunWith;
71 76 import org.powermock.api.easymock.PowerMock;
72 77 import org.powermock.core.classloader.annotations.PrepareForTest;
73 78 import org.powermock.modules.junit4.PowerMockRunner;
  79 +import org.powermock.reflect.Whitebox;
74 80  
75 81 import br.gov.frameworkdemoiselle.DemoiselleException;
76 82 import br.gov.frameworkdemoiselle.configuration.Configuration;
... ... @@ -104,6 +110,7 @@ public class JPACrudTest {
104 110 setInternalState(this.contactDAO, EntityManager.class, this.entityManager);
105 111 }
106 112  
  113 + @Entity
107 114 class Contact implements Serializable {
108 115  
109 116 private static final long serialVersionUID = 1L;
... ... @@ -426,5 +433,26 @@ public class JPACrudTest {
426 433 setInternalState(this.contactDAO, EntityManager.class, (EntityManager)null);
427 434 Assert.assertNotNull(this.contactDAO.getEntityManager());
428 435 }
  436 +
  437 + @Test
  438 + public void testCriteriaQuery(){
  439 + Map<String, Object> configOverrides = new HashMap<String, Object>();
  440 + configOverrides.put("javax.persistence.provider", "org.hibernate.ejb.HibernatePersistence");
  441 + configOverrides.put("javax.persistence.jdbc.url", "jdbc:hsqldb:hsql:.");
  442 + configOverrides.put("hibernate.show_sql", "true");
  443 + configOverrides.put("hibernate.hbm2ddl.auto", "create-drop");
  444 +
  445 + EntityManagerFactory factory = Persistence.createEntityManagerFactory("pu1", configOverrides);
  446 + this.entityManager = factory.createEntityManager();
  447 + Whitebox.setInternalState(this.contactDAO, EntityManager.class, (EntityManager)null);
  448 +
  449 + PowerMock.mockStatic(Beans.class);
  450 + expect(Beans.getReference(EntityManager.class)).andReturn(entityManager);
  451 + PowerMock.replay(Beans.class);
  452 +
  453 + CriteriaQuery<Contact> query = this.contactDAO.createCriteriaQuery();
  454 + query.select( query.from(Contact.class) );
  455 +
  456 + }
429 457  
430 458 }
... ...