Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit c4052b5

Browse files
committedFeb 9, 2014
Fixed failing test because of hanging code in OrderService.getNewOrderNumber - TRUNK-4183
1 parent 0797dc9 commit c4052b5

File tree

3 files changed

+12
-22
lines changed

3 files changed

+12
-22
lines changed
 

‎api/src/main/java/org/openmrs/api/db/hibernate/HibernateOrderDAO.java

+10-18
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,17 @@
1616
import java.util.Date;
1717
import java.util.List;
1818

19-
import org.apache.commons.lang.StringUtils;
2019
import org.apache.commons.logging.Log;
2120
import org.apache.commons.logging.LogFactory;
2221
import org.hibernate.Criteria;
23-
import org.hibernate.LockMode;
22+
import org.hibernate.Query;
2423
import org.hibernate.SessionFactory;
2524
import org.hibernate.criterion.Criterion;
2625
import org.hibernate.criterion.Disjunction;
2726
import org.hibernate.criterion.Restrictions;
2827
import org.openmrs.CareSetting;
2928
import org.openmrs.Concept;
3029
import org.openmrs.Encounter;
31-
import org.openmrs.GlobalProperty;
3230
import org.openmrs.Order;
3331
import org.openmrs.Order.Action;
3432
import org.openmrs.OrderFrequency;
@@ -162,34 +160,28 @@ public Order getOrderByOrderNumber(String orderNumber) {
162160
*/
163161
@Override
164162
public Long getNextOrderNumberSeedSequenceValue() {
165-
Criteria searchCriteria = sessionFactory.getCurrentSession().createCriteria(GlobalProperty.class);
166-
searchCriteria.add(Restrictions.eq("property", OpenmrsConstants.GLOBAL_PROPERTY_NEXT_ORDER_NUMBER_SEED));
167-
searchCriteria.setLockMode(LockMode.PESSIMISTIC_WRITE);
163+
Query query = sessionFactory.getCurrentSession().createSQLQuery(
164+
"select property_value from global_property where property = '"
165+
+ OpenmrsConstants.GLOBAL_PROPERTY_NEXT_ORDER_NUMBER_SEED + "' for update");
168166

169-
GlobalProperty globalProperty = (GlobalProperty) searchCriteria.uniqueResult();
170-
if (globalProperty == null) {
167+
List results = query.list();
168+
if (results.size() == 0) {
171169
throw new APIException("Missing global property named: "
172170
+ OpenmrsConstants.GLOBAL_PROPERTY_NEXT_ORDER_NUMBER_SEED);
173171
}
174172

175-
String gpTextValue = globalProperty.getPropertyValue();
176-
if (StringUtils.isBlank(gpTextValue)) {
177-
throw new APIException("Invalid value for global property named: "
178-
+ OpenmrsConstants.GLOBAL_PROPERTY_NEXT_ORDER_NUMBER_SEED);
179-
}
180-
181173
Long gpNumericValue = null;
182174
try {
183-
gpNumericValue = Long.parseLong(gpTextValue);
175+
gpNumericValue = Long.parseLong(results.get(0).toString());
184176
}
185177
catch (NumberFormatException ex) {
186178
throw new APIException("Invalid value for global property named: "
187179
+ OpenmrsConstants.GLOBAL_PROPERTY_NEXT_ORDER_NUMBER_SEED);
188180
}
189181

190-
globalProperty.setPropertyValue(String.valueOf(gpNumericValue + 1));
191-
192-
sessionFactory.getCurrentSession().save(globalProperty);
182+
sessionFactory.getCurrentSession().createSQLQuery(
183+
"update global_property set property_value = '" + String.valueOf(gpNumericValue + 1) + "' where property = '"
184+
+ OpenmrsConstants.GLOBAL_PROPERTY_NEXT_ORDER_NUMBER_SEED + "'").executeUpdate();
193185

194186
return gpNumericValue;
195187
}

‎api/src/main/java/org/openmrs/api/impl/OrderServiceImpl.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ public Order getOrderByUuid(String uuid) throws APIException {
258258
* @see org.openmrs.api.OrderNumberGenerator#getNewOrderNumber()
259259
*/
260260
@Override
261-
public synchronized String getNewOrderNumber() {
261+
public String getNewOrderNumber() {
262262
return ORDER_NUMBER_PREFIX + Context.getOrderService().getNextOrderNumberSeedSequenceValue();
263263
}
264264

@@ -295,7 +295,7 @@ public List<Order> getOrderHistoryByConcept(Patient patient, Concept concept) {
295295
*/
296296
@Override
297297
@Transactional(propagation = Propagation.REQUIRES_NEW)
298-
public Long getNextOrderNumberSeedSequenceValue() {
298+
public synchronized Long getNextOrderNumberSeedSequenceValue() {
299299
return dao.getNextOrderNumberSeedSequenceValue();
300300
}
301301

‎api/src/test/java/org/openmrs/api/OrderServiceTest.java

-2
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929

3030
import org.junit.Assert;
3131
import org.junit.Before;
32-
import org.junit.Ignore;
3332
import org.junit.Test;
3433
import org.openmrs.CareSetting;
3534
import org.openmrs.Concept;
@@ -132,7 +131,6 @@ public void purgeOrder_shouldDeleteObsThatReference() throws Exception {
132131
* @see {@link OrderNumberGenerator#getNewOrderNumber()}
133132
*/
134133
@Test
135-
@Ignore
136134
@Verifies(value = "should always return unique orderNumbers when called multiple times without saving orders", method = "getNewOrderNumber()")
137135
public void getNewOrderNumber_shouldAlwaysReturnUniqueOrderNumbersWhenCalledMultipleTimesWithoutSavingOrders()
138136
throws Exception {

0 commit comments

Comments
 (0)