Skip to content

Commit

Permalink
Fixed failing test because of hanging code in OrderService.getNewOrde…
Browse files Browse the repository at this point in the history
…rNumber - TRUNK-4183
  • Loading branch information
wluyima committed Feb 9, 2014
1 parent 0797dc9 commit c4052b5
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 22 deletions.
Expand Up @@ -16,19 +16,17 @@
import java.util.Date;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.Criteria;
import org.hibernate.LockMode;
import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Disjunction;
import org.hibernate.criterion.Restrictions;
import org.openmrs.CareSetting;
import org.openmrs.Concept;
import org.openmrs.Encounter;
import org.openmrs.GlobalProperty;
import org.openmrs.Order;
import org.openmrs.Order.Action;
import org.openmrs.OrderFrequency;
Expand Down Expand Up @@ -162,34 +160,28 @@ public Order getOrderByOrderNumber(String orderNumber) {
*/
@Override
public Long getNextOrderNumberSeedSequenceValue() {
Criteria searchCriteria = sessionFactory.getCurrentSession().createCriteria(GlobalProperty.class);
searchCriteria.add(Restrictions.eq("property", OpenmrsConstants.GLOBAL_PROPERTY_NEXT_ORDER_NUMBER_SEED));
searchCriteria.setLockMode(LockMode.PESSIMISTIC_WRITE);
Query query = sessionFactory.getCurrentSession().createSQLQuery(
"select property_value from global_property where property = '"
+ OpenmrsConstants.GLOBAL_PROPERTY_NEXT_ORDER_NUMBER_SEED + "' for update");

GlobalProperty globalProperty = (GlobalProperty) searchCriteria.uniqueResult();
if (globalProperty == null) {
List results = query.list();
if (results.size() == 0) {
throw new APIException("Missing global property named: "
+ OpenmrsConstants.GLOBAL_PROPERTY_NEXT_ORDER_NUMBER_SEED);
}

String gpTextValue = globalProperty.getPropertyValue();
if (StringUtils.isBlank(gpTextValue)) {
throw new APIException("Invalid value for global property named: "
+ OpenmrsConstants.GLOBAL_PROPERTY_NEXT_ORDER_NUMBER_SEED);
}

Long gpNumericValue = null;
try {
gpNumericValue = Long.parseLong(gpTextValue);
gpNumericValue = Long.parseLong(results.get(0).toString());
}
catch (NumberFormatException ex) {
throw new APIException("Invalid value for global property named: "
+ OpenmrsConstants.GLOBAL_PROPERTY_NEXT_ORDER_NUMBER_SEED);
}

globalProperty.setPropertyValue(String.valueOf(gpNumericValue + 1));

sessionFactory.getCurrentSession().save(globalProperty);
sessionFactory.getCurrentSession().createSQLQuery(
"update global_property set property_value = '" + String.valueOf(gpNumericValue + 1) + "' where property = '"
+ OpenmrsConstants.GLOBAL_PROPERTY_NEXT_ORDER_NUMBER_SEED + "'").executeUpdate();

return gpNumericValue;
}
Expand Down
4 changes: 2 additions & 2 deletions api/src/main/java/org/openmrs/api/impl/OrderServiceImpl.java
Expand Up @@ -258,7 +258,7 @@ public Order getOrderByUuid(String uuid) throws APIException {
* @see org.openmrs.api.OrderNumberGenerator#getNewOrderNumber()
*/
@Override
public synchronized String getNewOrderNumber() {
public String getNewOrderNumber() {
return ORDER_NUMBER_PREFIX + Context.getOrderService().getNextOrderNumberSeedSequenceValue();
}

Expand Down Expand Up @@ -295,7 +295,7 @@ public List<Order> getOrderHistoryByConcept(Patient patient, Concept concept) {
*/
@Override
@Transactional(propagation = Propagation.REQUIRES_NEW)
public Long getNextOrderNumberSeedSequenceValue() {
public synchronized Long getNextOrderNumberSeedSequenceValue() {
return dao.getNextOrderNumberSeedSequenceValue();
}

Expand Down
2 changes: 0 additions & 2 deletions api/src/test/java/org/openmrs/api/OrderServiceTest.java
Expand Up @@ -29,7 +29,6 @@

import org.junit.Assert;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.openmrs.CareSetting;
import org.openmrs.Concept;
Expand Down Expand Up @@ -132,7 +131,6 @@ public void purgeOrder_shouldDeleteObsThatReference() throws Exception {
* @see {@link OrderNumberGenerator#getNewOrderNumber()}
*/
@Test
@Ignore
@Verifies(value = "should always return unique orderNumbers when called multiple times without saving orders", method = "getNewOrderNumber()")
public void getNewOrderNumber_shouldAlwaysReturnUniqueOrderNumbersWhenCalledMultipleTimesWithoutSavingOrders()
throws Exception {
Expand Down

0 comments on commit c4052b5

Please sign in to comment.