Sample Business Object thresholds programming patterns
The following are a few examples on how to access the configuration files, perform the unbounded condition check, and how to throw an exception in an event of a violation.
Accessing threshold property
String compId = "com.ibm.commerce.storelocator";
ComponentConfiguration config = ComponentConfigurationRegistry.instance().getComponentConfiguration(compId);
String mapWidth = config.getValueByConfigGroupingNameAndPropertyName("map", "mapWidth");
The above example illustrates a simple comparison against the threshold.
Checking against threshold
/**
* Returns whether the threshold in the given context has been exceeded.
* The default behaviour passes if there is no threshold. Subclasses should
* override this to provide additional checking using additional
* information.
*
* @return True if the threshold was exceeded, false otherwise.
*/
public boolean isThresholdAcceptable() {
final String METHODNAME = "isThresholdAcceptable";
ECTrace.entry(ECTraceIdentifiers.COMPONENT_ORDER, CLASSNAME, METHODNAME);
boolean passed = threshold == null || threshold.compareTo(BigDecimal.ZERO) < 0;
if (ECTrace.traceEnabled(ECTraceIdentifiers.COMPONENT_ORDER)) {
ECTrace.exit(ECTraceIdentifiers.COMPONENT_ORDER, CLASSNAME, METHODNAME, Boolean.valueOf(passed));
}
return passed;
}
The following section is another example of how to
work with the default page size and maximum page size. The behavior
is shown in the following pseudo code:
// enter a point in the code where we need to paginate
maxItems = getObject.getMaxItems()
if (maxItems == null) {
maxItems = getDefaultPageSize()
}
maximumPageSize = getMaximumPageSize()
if (maximumPageSize != null && (maxItems == null || maxItems > maximumPageSize)) {
maxItems = maximumPageSize
}
if (maxItems == null || maxItems < 0) {
maxItems = 0
}
// use the startNumber and maxItems to choose the items in the page to return
In addition, considering the following cases where
values are not defined:
- defaultPageSize exists and maxPageSize exists
- if defaultPageSize == maxPageSize – the page size will be bounded to the maxPageSize whether pagination parameters are set or not.
- if defaultPageSize < maxPageSize – if no parameters are set, defaultPageSize will be used, otherwise the parameters will be bounded by maxPageSize.
- if defaultPageSize > maxPageSize – the page size will be bounded to the maxPageSize whether pagination parameters are set or not.
- defaultPageSize exists but maxPageSize does not exist – the page size will be bounded by defaultPageSize only if there are no pagination parameters set.
- defaultPageSize does not exist, but maxPageSize exists – the page size will be bounded to maxPageSize whether pagination parameters are set or not.
- defaultPageSize does not exist and maxPageSize does not exist – no bound on the page size will be enforced.
Handling exception
Object[] params = new Object[] {getThreshold(), getNumAdded(), getNumCurrent()};
throw new ECApplicationException(getUserErrorMessage(), CLASSNAME, "throwDefaultException", params);
Logging violation
/**
* Logs a message to the administrator about the threshold being exceeded.
* This method should be called when it is known that a threshold has been
* exceeded.
*
* @param logger
* The logger to use to notify the administrator. Cannot be null.
* @param methodName
* The name of the method which is calling this. Cannot be null
* or empty.
*/
public void log(Logger logger, String methodName) {
if (LoggingHelper.isTraceEnabled(logger)) {
Object[] params = new Object[] {getThreshold(), getNumAdded(),
getNumCurrent (), getUserID(), getStoreID(), getOrderID()};
logger.logp(Level.WARNING, logger.getName(), methodName,
getAdminErrorMessage().getMessageKey(), params);
}
}