Skip to content

Commit 683e3bf

Browse files
committedDec 23, 2013
Responding to review comments for: Setting order numbers in the api
needs to be safe in a clustered environment - TRUNK-4183
1 parent 9e62a20 commit 683e3bf

File tree

6 files changed

+17
-12
lines changed

6 files changed

+17
-12
lines changed
 

‎api/src/main/java/org/openmrs/api/OrderService.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -180,5 +180,5 @@ public <Ord extends Order> List<Ord> getOrders(Class<Ord> orderClassType, List<P
180180
* @return the order number seed
181181
*/
182182
@Authorized(PrivilegeConstants.ADD_ORDERS)
183-
public Long getNextOrderNumberSeed();
183+
public Long getNextOrderNumberSeedSequenceValue();
184184
}

‎api/src/main/java/org/openmrs/api/db/OrderDAO.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -80,5 +80,5 @@ public <Ord extends Order> List<Ord> getOrders(Class<Ord> orderClassType, List<P
8080
*
8181
* @return the order number seed
8282
*/
83-
public Long getNextOrderNumberSeed();
83+
public Long getNextOrderNumberSeedSequenceValue();
8484
}

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

+4-6
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,6 @@ public class HibernateOrderDAO implements OrderDAO {
4848

4949
protected static final Log log = LogFactory.getLog(HibernateOrderDAO.class);
5050

51-
private static final String ORDER_NUMBER_START_VALUE = "1";
52-
5351
/**
5452
* Hibernate session factory
5553
*/
@@ -152,18 +150,18 @@ public Order getOrderByOrderNumber(String orderNumber) {
152150
}
153151

154152
/**
155-
* @see org.openmrs.api.db.OrderDAO#getNextOrderNumberSeed()
153+
* @see org.openmrs.api.db.OrderDAO#getNextOrderNumberSeedSequenceValue()
156154
*/
157155
@Override
158-
public Long getNextOrderNumberSeed() {
156+
public Long getNextOrderNumberSeedSequenceValue() {
159157
Criteria searchCriteria = sessionFactory.getCurrentSession().createCriteria(GlobalProperty.class);
160158
searchCriteria.add(Restrictions.eq("property", OpenmrsConstants.GLOBAL_PROPERTY_NEXT_ORDER_NUMBER_SEED));
161159
searchCriteria.setLockMode(LockMode.PESSIMISTIC_WRITE);
162160

163161
GlobalProperty globalProperty = (GlobalProperty) searchCriteria.uniqueResult();
164162
if (globalProperty == null) {
165-
globalProperty = new GlobalProperty(OpenmrsConstants.GLOBAL_PROPERTY_NEXT_ORDER_NUMBER_SEED,
166-
ORDER_NUMBER_START_VALUE, "The next order number available for assignment");
163+
throw new APIException("Missing global property named: "
164+
+ OpenmrsConstants.GLOBAL_PROPERTY_NEXT_ORDER_NUMBER_SEED);
167165
}
168166

169167
String gpTextValue = globalProperty.getPropertyValue();

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

+4-4
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ public Order getOrderByUuid(String uuid) throws APIException {
175175
*/
176176
@Override
177177
public synchronized String getNewOrderNumber() {
178-
return ORDER_NUMBER_PREFIX + Context.getOrderService().getNextOrderNumberSeed();
178+
return ORDER_NUMBER_PREFIX + Context.getOrderService().getNextOrderNumberSeedSequenceValue();
179179
}
180180

181181
/**
@@ -205,10 +205,10 @@ public List<Order> getOrderHistoryByConcept(Patient patient, Concept concept) {
205205
}
206206

207207
/**
208-
* @see org.openmrs.api.OrderService#getNextOrderNumberSeed()
208+
* @see org.openmrs.api.OrderService#getNextOrderNumberSeedSequenceValue()
209209
*/
210210
@Override
211-
public Long getNextOrderNumberSeed() {
212-
return dao.getNextOrderNumberSeed();
211+
public Long getNextOrderNumberSeedSequenceValue() {
212+
return dao.getNextOrderNumberSeedSequenceValue();
213213
}
214214
}

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

+3
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,9 @@ public void purgeOrder_shouldDeleteObsThatReference() throws Exception {
125125
@Verifies(value = "should always return unique orderNumbers when called multiple times without saving orders", method = "getNewOrderNumber()")
126126
public void getNewOrderNumber_shouldAlwaysReturnUniqueOrderNumbersWhenCalledMultipleTimesWithoutSavingOrders()
127127
throws Exception {
128+
129+
executeDataSet("org/openmrs/api/include/OrderServiceTest-globalProperties.xml");
130+
128131
int N = 50;
129132
final Set<String> uniqueOrderNumbers = new HashSet<String>(50);
130133
List<Thread> threads = new ArrayList<Thread>();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<?xml version='1.0' encoding='UTF-8'?>
2+
<dataset>
3+
<global_property property="order.nextOrderNumberSeed" property_value="1" uuid="1d55827e-26fe-102b-80cb-0017a47879y5"/>
4+
</dataset>

0 commit comments

Comments
 (0)
Please sign in to comment.