public class OrderDiscountCalculator extends DiscountCalculatorService implements OrderPricingCalculator
Qualifier.findQualifyingOrder
for this purpose.
If it obtains an Order that qualified then it can determine the discount either via a DiscountStructure object being
passed into the calculator via the extra parameters map with key Constants.DISCOUNT_STRUCTURE or by getting the
discountType
and adjuster
properties of the input PricingModel (RepositoryItem).
Qualifier
Modifier and Type | Field and Description |
---|---|
static java.lang.String |
CLASS_VERSION
Class version string
|
AMOUNT_INCREASE_TYPE, AMOUNT_OFF_TYPE, FIXED_PRICE_TYPE, ILLEGAL_TYPE, mPromotionTools, PERCENT_OFF_TYPE
SERVICE_INFO_KEY
DEFAULT_LOG_TRACE_STATUS
DEFAULT_LOG_DEBUG_STATUS, DEFAULT_LOG_ERROR_STATUS, DEFAULT_LOG_INFO_STATUS, DEFAULT_LOG_WARNING_STATUS
Constructor and Description |
---|
OrderDiscountCalculator() |
Modifier and Type | Method and Description |
---|---|
protected double |
adjustOrderSubTotal(double pOrderSubTotal,
double pAdjuster,
java.lang.String pDiscountType,
java.lang.String pOrderId,
RepositoryItem pPricingModel,
java.util.Map pExtraParameters)
Applies the given adjuster to the given order subtotal.
|
protected void |
adjustShippingGroupSubtotalPriceInfos(java.lang.String pDetailSharePropertyName,
OrderPriceInfo pPriceQuote,
Order pOrder,
java.util.Locale pLocale,
RepositoryItem pProfile,
java.util.Map pExtraParameters,
java.util.Map pTaxableShareOffsets,
java.util.Map pNonTaxableShareOffsets)
Adjusts the shipping group taxable, nontaxable and subtotal
OrderPriceInfo s based on the share value stored on the item level DetailedItemPriceInfo
objects. |
protected double |
applyAdjustmentToNonTaxablePriceInfo(OrderPriceInfo pNonTaxablePriceIno,
double pShareAmount)
Adjusts the shipping non-taxable total price info based on the given order discount share value.
|
protected double |
applyAdjustmentToNonTaxablePriceInfo(OrderPriceInfo pNonTaxablePriceIno,
double pShareAmount,
java.lang.String pCurrencyCode)
Adjusts the shipping non-taxable total price info based on the given order discount share value.
|
protected double |
applyAdjustmentToSubtotalPriceInfo(OrderPriceInfo pShippingTotalPriceInfo,
double pShareAmount)
Adjusts the shipping group total price info based on the given order discount share value.
|
protected double |
applyAdjustmentToSubtotalPriceInfo(OrderPriceInfo pShippingTotalPriceInfo,
double pShareAmount,
java.lang.String pCurrencyCode)
Adjusts the shipping group total price info based on the given order discount share value.
|
protected double |
applyAdjustmentToTaxablePriceInfo(OrderPriceInfo pTaxablePriceInfo,
double pShareAmount)
Adjusts the shipping taxable total price info based on the given order discount share value.
|
protected double |
applyAdjustmentToTaxablePriceInfo(OrderPriceInfo pTaxablePriceInfo,
double pShareAmount,
java.lang.String pCurrencyCode)
Adjusts the shipping taxable total price info based on the given order discount share value.
|
protected double |
computeGroupSubtotal(long pTimesToDiscount,
int pNumberOfGroups,
double pGroupSubTotal,
double pAdjuster,
java.lang.String pDiscountType,
java.lang.String pOrderId,
double pOldOrderAmount)
Deprecated.
|
protected double |
computeGroupSubtotal(long pTimesToDiscount,
int pNumberOfGroups,
double pGroupSubTotal,
double pAdjuster,
java.lang.String pDiscountType,
java.lang.String pOrderId,
double pOldOrderAmount,
double pNewOrderAmount,
RepositoryItem pPricingModel,
java.util.Map pExtraParameters)
|
protected double |
computeGroupSubtotal(long pTimesToDiscount,
int pNumberOfGroups,
double pGroupSubTotal,
double pAdjuster,
java.lang.String pDiscountType,
java.lang.String pId,
java.util.Map pExtraParameters)
Deprecated.
|
protected java.util.Map |
createCurrentShareMap(java.lang.String pDetailSharePropertyName,
boolean pTaxable,
OrderPriceInfo pPriceQuote,
Order pOrder,
java.util.Locale pLocale,
RepositoryItem pProfile,
java.util.Map pExtraParameters)
Creates a Map containing the shipping group id to its current discount share amount.
|
void |
doStartService()
This is called after a Service has been created, placed into the
naming hierarchy, and initialized with its configured property
values.
|
protected MatchingObject |
findMatchingObject(OrderPriceInfo pPriceQuote,
java.util.List pPriceQuotes,
java.util.List pItems,
RepositoryItem pPricingModel,
RepositoryItem pProfile,
java.util.Locale pLocale,
Order pOrder,
java.util.Map pExtraParameters)
This method determines if the order qualifies for the given
order promotion.
|
protected double |
getAmountToDiscount(OrderPriceInfo pPriceQuote,
Order pOrder,
RepositoryItem pPricingModel,
java.util.Locale pLocale,
RepositoryItem pProfile,
java.util.Map pExtraParameters)
This will return the amount that will eventually be discounted.
|
protected double |
getAmountToDiscount(OrderPriceInfo pPriceQuote,
Order pOrder,
RepositoryItem pPricingModel,
java.util.Locale pLocale,
RepositoryItem pProfile,
java.util.Map pExtraParameters,
double pNonDiscountableTotal)
This will return the amount that will eventually be discounted.
|
protected java.util.List |
getDetailsToReceiveDiscountShare(ItemPriceInfo pItemPriceInfo)
This will return the price details in an item price info that will be marked as receiving a share of the
order discount.
|
protected java.util.List |
getItemsToReceiveDiscountShare(Order pOrder)
This will return the items in an order that will be marked as receiving a share of the
order discount.
|
double |
getNonDiscountableTotal(Order pOrder,
java.util.Map pExtraParametersMap)
This method will get the items from the Order, iterate over them checking if the item is discountable
or not.
|
protected double |
getNonTaxableShippingGroupTotal(OrderPriceInfo pOrderPriceInfo)
Returns the total of the NonTaxableShippingItemsSubtotalPriceInfos in the given OrderPriceInfo
|
PricingTools |
getPricingTools()
pricing tools to help with calculating prices
|
protected double |
getTaxableShippingGroupTotal(OrderPriceInfo pOrderPriceInfo)
Returns the total of the TaxableShippingItemsSubtotalPriceInfos in the given OrderPriceInfo
|
protected double |
getTotalForShippingGroups(java.util.Map pOrderPriceInfos)
Returns the total of the OrderPriceInfos in the map
|
protected double |
getTotalShareValueForShippingGroup(ShippingGroup pShippingGroup,
boolean pTaxable,
java.lang.String pDetailSharePropertyName,
OrderPriceInfo pOrderPriceInfo,
Order pOrder,
java.util.Locale pLocale,
RepositoryItem pProfile,
java.util.Map pExtraParameters)
Returns the total share value for all items in the shipping group by totaling the given share property on the
item level
DetailedItemPriceInfo objects. |
boolean |
isSaveDetailsOrderDiscountShare()
Deprecated.
this property configuration is not used. Discount share values are always calculated
|
boolean |
isSaveItemsOrderDiscountShare()
Deprecated.
this property configuration is not used. Discount share values are always calculated
|
void |
priceOrder(OrderPriceInfo pPriceQuote,
Order pOrder,
RepositoryItem pPricingModel,
java.util.Locale pLocale,
RepositoryItem pProfile,
java.util.Map pExtraParameters)
Price a single order within a context defined by the input parameters.
|
void |
setPricingTools(PricingTools pPricingTools)
pricing tools to help with calculating prices
|
void |
setSaveDetailsOrderDiscountShare(boolean pSaveDetailsOrderDiscountShare) |
void |
setSaveItemsOrderDiscountShare(boolean pSaveItemsOrderDiscountShare) |
protected void |
updateItemsDiscountShare(Order pOrder,
double pUnadjustedPrice,
double pTotalAdjustment,
double pAdjuster,
java.lang.String pDiscountType,
long pTimesToDiscount)
Deprecated.
|
protected void |
updateItemsDiscountShare(Order pOrder,
double pUnadjustedPrice,
double pTotalAdjustment,
double pAdjuster,
java.lang.String pDiscountType,
long pTimesToDiscount,
java.util.Map pExtraParameters)
This method will set the orderDiscountShare property of each
CommerceItem's priceInfo.
|
protected double |
updateShippingItemsSubtotalMaps(double pOrderSubTotal,
double pOldOrderAmount,
MatchingObject pQualifier,
double pAdjuster,
java.lang.String pDiscountType,
OrderPriceInfo pPriceQuote,
Order pOrder,
RepositoryItem pPricingModel,
java.util.Map pExtraParameters)
Deprecated.
in favor of {@link #adjustShippingGroupSubtotalPriceInfos(String, OrderPriceInfo, Order, Locale, RepositoryItem, Map, Map, Map)
|
adjust, adjustAmount, adjustAmount, getAdjuster, getDiscountType, getDiscountType, getPricingModelProperties, getPromotionTools, getQualifierService, getQualifierService, isNegativeAmountException, setNegativeAmountException, setPricingModelProperties, setPromotionTools, setQualifierService
addLogListener, createAdminServlet, doStopService, getAbsoluteName, getAdminServlet, getAdminServletOutputStreamEncoding, getLoggingForVlogging, getLogListenerCount, getLogListeners, getName, getNameContext, getNucleus, getRoot, getServiceConfiguration, getServiceInfo, isAdminServletUseServletOutputStream, isLoggingDebug, isLoggingError, isLoggingInfo, isLoggingTrace, isLoggingWarning, isRunning, logDebug, logDebug, logDebug, logError, logError, logError, logInfo, logInfo, logInfo, logTrace, logTrace, logTrace, logWarning, logWarning, logWarning, nameContextElementBound, nameContextElementUnbound, removeLogListener, reResolveThis, resolveName, resolveName, resolveName, resolveName, sendLogEvent, setAdminServletOutputStreamEncoding, setAdminServletUseServletOutputStream, setLoggingDebug, setLoggingError, setLoggingInfo, setLoggingTrace, setLoggingWarning, setNucleus, setServiceInfo, startService, stopService
vlogDebug, vlogDebug, vlogDebug, vlogDebug, vlogDebugTrace, vlogError, vlogError, vlogError, vlogError, vlogInfo, vlogInfo, vlogInfo, vlogInfo, vlogTrace, vlogTrace, vlogTrace, vlogTrace, vlogWarning, vlogWarning, vlogWarning, vlogWarning
public void setPricingTools(PricingTools pPricingTools)
pPricingTools
- new value to setpublic PricingTools getPricingTools()
public void setSaveItemsOrderDiscountShare(boolean pSaveItemsOrderDiscountShare)
public boolean isSaveItemsOrderDiscountShare()
public void setSaveDetailsOrderDiscountShare(boolean pSaveDetailsOrderDiscountShare)
public boolean isSaveDetailsOrderDiscountShare()
public void priceOrder(OrderPriceInfo pPriceQuote, Order pOrder, RepositoryItem pPricingModel, java.util.Locale pLocale, RepositoryItem pProfile, java.util.Map pExtraParameters) throws PricingException
The order can be passed in within a MatchingObject via the pExtraParameters map with key Constants.MATCHING_OBJECT. If this is not the case then it will call findMatchingObject to try and obtain the MatchingObject from the qualifier service.
priceOrder
in interface OrderPricingCalculator
pPriceQuote
- OrderPriceInfo representing the current price quote for the orderpOrder
- The order to pricepPricingModel
- A RepositoryItems representing a PricingModelpProfile
- The user's profilepExtraParameters
- A Map of extra parameters to be used in the pricing, may be nullPricingException
updateItemsDiscountShare(Order, double, double, double, String, long)
,
adjustShippingGroupSubtotalPriceInfos(String, OrderPriceInfo, Order, Locale, RepositoryItem, Map, Map, Map)
protected java.util.Map createCurrentShareMap(java.lang.String pDetailSharePropertyName, boolean pTaxable, OrderPriceInfo pPriceQuote, Order pOrder, java.util.Locale pLocale, RepositoryItem pProfile, java.util.Map pExtraParameters) throws PricingException
pDetailSharePropertyName
- the property name on the DetailedItemPriceInfo
containing the share valuepTaxable
- true for taxable share total or false for non-taxable share total.pPriceQuote
- the new OrderPriceInfo for the order being pricedpOrder
- the order being pricedpLocale
- the user's display localepProfile
- the order's owning profilepExtraParameters
- PricingException
protected void adjustShippingGroupSubtotalPriceInfos(java.lang.String pDetailSharePropertyName, OrderPriceInfo pPriceQuote, Order pOrder, java.util.Locale pLocale, RepositoryItem pProfile, java.util.Map pExtraParameters, java.util.Map pTaxableShareOffsets, java.util.Map pNonTaxableShareOffsets) throws PricingException
OrderPriceInfo
s based on the share value stored on the item level DetailedItemPriceInfo
objects. The item level share value must be previously calculated for proper adjustments to be made.
In addition to adjusting the taxable, nontaxable and subtotal OrderPriceInfo
, a PricingAdjustment
is added for the
adjusted value.
pDetailSharePropertyName
- the property name on the DetailedItemPriceInfo
where the share value is stored.pPriceQuote
- the price info from the order that is being discountedpOrder
- the order being discountedpLocale
- the user's display locale.pProfile
- the order's owning profile.pTaxableShareOffsets
- Optional. Map containing the taxable share value for each shipping group. This value is used to offset the current
taxable share to determine the share value added during this iteration.pNonTaxableShareOffsets
- Optional. Map containing the non-taxable share value for each shipping group. This value is used to offset the current
taxable share to determine the share value added during this iteration.pExtraParameters
- the extra parameter Map for the current pricing operation.PricingException
getTotalShareValueForShippingGroup(ShippingGroup, boolean, String, OrderPriceInfo, Order, Locale, RepositoryItem, Map)
,
applyAdjustmentToNonTaxablePriceInfo(OrderPriceInfo, double)
,
applyAdjustmentToTaxablePriceInfo(OrderPriceInfo, double)
,
applyAdjustmentToSubtotalPriceInfo(OrderPriceInfo, double)
protected double applyAdjustmentToTaxablePriceInfo(OrderPriceInfo pTaxablePriceInfo, double pShareAmount)
pTaxablePriceInfo
- pShareAmount
- total share amount for which to apply the adjustmentprotected double applyAdjustmentToTaxablePriceInfo(OrderPriceInfo pTaxablePriceInfo, double pShareAmount, java.lang.String pCurrencyCode)
pTaxablePriceInfo
- pShareAmount
- total share amount for which to apply the adjustmentpCurrencyCode
- the currency code whose number of decimal places to be used for rounding operationprotected double applyAdjustmentToNonTaxablePriceInfo(OrderPriceInfo pNonTaxablePriceIno, double pShareAmount)
pNonTaxablePriceIno
- pShareAmount
- total share amount for which to apply the adjustmentprotected double applyAdjustmentToNonTaxablePriceInfo(OrderPriceInfo pNonTaxablePriceIno, double pShareAmount, java.lang.String pCurrencyCode)
pNonTaxablePriceIno
- pShareAmount
- total share amount for which to apply the adjustmentpCurrencyCode
- the currency code whose number of decimal places to be used for rounding operationprotected double applyAdjustmentToSubtotalPriceInfo(OrderPriceInfo pShippingTotalPriceInfo, double pShareAmount)
pShippingTotalPriceInfo
- pShareAmount
- total share amount for which to apply the adjustmentprotected double applyAdjustmentToSubtotalPriceInfo(OrderPriceInfo pShippingTotalPriceInfo, double pShareAmount, java.lang.String pCurrencyCode)
pShippingTotalPriceInfo
- pShareAmount
- total share amount for which to apply the adjustmentpCurrencyCode
- the currency code whose number of decimal places to be used for rounding operationprotected double getTotalShareValueForShippingGroup(ShippingGroup pShippingGroup, boolean pTaxable, java.lang.String pDetailSharePropertyName, OrderPriceInfo pOrderPriceInfo, Order pOrder, java.util.Locale pLocale, RepositoryItem pProfile, java.util.Map pExtraParameters) throws PricingException
DetailedItemPriceInfo
objects.pShippingGroup
- the shipping group for which to get the total share value.pTaxable
- true to return the taxable share total, false for non-taxable share total.pDetailSharePropertyName
- the property name on the DetailedItemPriceInfo
that contains the share amount.pOrderPriceInfo
- OrderPriceInfo representing the current price quote for the orderpOrder
- The order being pricedpLocale
- the user's display localepProfile
- The user's profilepExtraParameters
- A Map of extra parameters to be used in the pricing, may be nullPricingException
PricingTools.isTaxable(CommerceItem, ItemPriceInfo, OrderPriceInfo, Order, ShippingPriceInfo, ShippingGroup, Locale, RepositoryItem, Map)
public double getNonDiscountableTotal(Order pOrder, java.util.Map pExtraParametersMap)
pOrder
- The order that contains the items to iterate overpExtraParametersMap
- A Map of extra parametersprotected double computeGroupSubtotal(long pTimesToDiscount, int pNumberOfGroups, double pGroupSubTotal, double pAdjuster, java.lang.String pDiscountType, java.lang.String pOrderId, double pOldOrderAmount, double pNewOrderAmount, RepositoryItem pPricingModel, java.util.Map pExtraParameters) throws PricingException
adjustShippingGroupSubtotalPriceInfos(String, OrderPriceInfo, Order, Locale, RepositoryItem, Map, Map, Map)
pTimesToDiscount
- the number of times we should apply the configured discountpNumberOfGroups
- the number of groups in the order, including the one for which
this method is computing a subtotalpGroupSubTotal
- is the subtotal that needs adjustingpAdjuster
- is the amount by which to adjust pGroupSubTotalpDiscountType
- the way in which pAdjuster is applied to pGroupSubTotal. May be one of:
"Fixed Price", "Amount Off", or "Percent Off".pOrderId
- an ID to associate with this adjustment for error reportingpOldOrderAmount
- the order subtotal before this discount was applied at the order levelpNewOrderAmount
- the order subtotal after this discount was applied at the order levelpPricingModel
- the order promotion that's being appliedpExtraParameters
- the extra parameter map originally passed into the pricing operation.PricingException
- if there was a problem computing the group subtotalprotected double adjustOrderSubTotal(double pOrderSubTotal, double pAdjuster, java.lang.String pDiscountType, java.lang.String pOrderId, RepositoryItem pPricingModel, java.util.Map pExtraParameters) throws PricingException
pOrderSubTotal
- the order's current subtotalpAdjuster
- the pricing model's adjusterpDiscountType
- the pricing models discount typepOrderId
- the id of the order to which the adjustment is beig madepPricingModel
- the order promotion repository itempExtraParameters
- the original extra parameter map passed to the pricing operation.PricingException
DiscountCalculatorService.adjust(double, double, String, String)
protected MatchingObject findMatchingObject(OrderPriceInfo pPriceQuote, java.util.List pPriceQuotes, java.util.List pItems, RepositoryItem pPricingModel, RepositoryItem pProfile, java.util.Locale pLocale, Order pOrder, java.util.Map pExtraParameters) throws PricingException
It determines this by calling the QualifierService
pPriceQuote
- pPriceQuotes
- pItems
- pPricingModel
- pProfile
- pLocale
- pOrder
- pExtraParameters
- PricingException
Qualifier.findQualifyingOrder(List, List, RepositoryItem, RepositoryItem, Locale, Order, OrderPriceInfo, ShippingGroup, ShippingPriceInfo, Map)
protected double updateShippingItemsSubtotalMaps(double pOrderSubTotal, double pOldOrderAmount, MatchingObject pQualifier, double pAdjuster, java.lang.String pDiscountType, OrderPriceInfo pPriceQuote, Order pOrder, RepositoryItem pPricingModel, java.util.Map pExtraParameters) throws PricingException
taxableShippingItemsSubtotalPriceInfos
nonTaxableShippingItemsSubtotalPriceInfos
shippingItemsSubtotalPriceInfos
computeGroupSubtotal
is called. The amount
of the price info in the entry is set to this value, the info is marked discounted, and
a new adjustement is added to the infopOrderSubTotal
- The new subtotal of the orderpOldOrderAmount
- The previous subtotal of the orderpQualifier
- The MatchingObject as returned by Qualifier.evaluateQualifierpAdjuster
- The adjuster of the promotionpDiscountType
- The type of discount being givenpPriceQuote
- The order's price infopOrder
- The order that was discountedpPricingModel
- The promotion that changed the price of the orderpExtraParameters
- Any extra parametersPricingException
protected double computeGroupSubtotal(long pTimesToDiscount, int pNumberOfGroups, double pGroupSubTotal, double pAdjuster, java.lang.String pDiscountType, java.lang.String pId, java.util.Map pExtraParameters) throws PricingException
pTimesToDiscount
- the number of times we should apply the configured discountpNumberOfGroups
- the number of groups in the order, including the one for which
this method is computing a subtotalpGroupSubTotal
- is the subtotal that needs adjustingpAdjuster
- is the amount by which to adjust pGroupSubTotalpDiscountType
- the way in which pAdjuster is applied to pGroupSubTotal. May be one of:
"Fixed Price", "Amount Off", or "Percent Off".pId
- an ID to associate with this adjustment for error reportingPricingException
- if there was a problem computing the group subtotaladjustShippingGroupSubtotalPriceInfos(String, OrderPriceInfo, Order, Locale, RepositoryItem, Map, Map, Map)
protected double getTaxableShippingGroupTotal(OrderPriceInfo pOrderPriceInfo)
pOrderPriceInfo
- protected double getNonTaxableShippingGroupTotal(OrderPriceInfo pOrderPriceInfo)
pOrderPriceInfo
- protected double getTotalForShippingGroups(java.util.Map pOrderPriceInfos)
pOrderPriceInfos
- protected double computeGroupSubtotal(long pTimesToDiscount, int pNumberOfGroups, double pGroupSubTotal, double pAdjuster, java.lang.String pDiscountType, java.lang.String pOrderId, double pOldOrderAmount) throws PricingException
protected void updateItemsDiscountShare(Order pOrder, double pUnadjustedPrice, double pTotalAdjustment, double pAdjuster, java.lang.String pDiscountType, long pTimesToDiscount) throws PricingException
protected void updateItemsDiscountShare(Order pOrder, double pUnadjustedPrice, double pTotalAdjustment, double pAdjuster, java.lang.String pDiscountType, long pTimesToDiscount, java.util.Map pExtraParameters) throws PricingException
pOrder
- the order that was discountedpUnadjustedPrice
- The original pre-discount price of the orderpTotalAdjustment
- This is the total change to the order total, for the current promotionpAdjuster
- The size of the discountpDiscountType
- the way in which pAdjuster is applied to pGroupSubTotal. May be one of:
"Fixed Price", "Amount Off", or "Percent Off".pTimesToDiscount
- The number of times to apply the given discountpExtraParameters
- Any extra parametersPricingException
protected double getAmountToDiscount(OrderPriceInfo pPriceQuote, Order pOrder, RepositoryItem pPricingModel, java.util.Locale pLocale, RepositoryItem pProfile, java.util.Map pExtraParameters) throws PricingException
pPriceQuote
- OrderPriceInfo representing the current price quote for the orderpOrder
- The order that will be discounted (ignored by default)pPricingModel
- A RepositoryItems representing a PricingModel (ignored by default)pProfile
- The user's profile (ignored by default)pExtraParameters
- A Map of extra parameters to be used in the pricing, may be null (ignored by default)PricingException
protected double getAmountToDiscount(OrderPriceInfo pPriceQuote, Order pOrder, RepositoryItem pPricingModel, java.util.Locale pLocale, RepositoryItem pProfile, java.util.Map pExtraParameters, double pNonDiscountableTotal) throws PricingException
pPriceQuote
- OrderPriceInfo representing the current price quote for the orderpOrder
- The order that will be discounted (ignored by default)pPricingModel
- A RepositoryItems representing a PricingModel (ignored by default)pProfile
- The user's profile (ignored by default)pExtraParameters
- A Map of extra parameters to be used in the pricing, may be null (ignored by default)pNonDiscountableTotal
- the non discountable total for the orderPricingException
protected java.util.List getDetailsToReceiveDiscountShare(ItemPriceInfo pItemPriceInfo)
pItemPriceInfo
- The item price infoDetailedItemPriceTools.getDetailsToReceiveDiscountShare(ItemPriceInfo, Range)
protected java.util.List getItemsToReceiveDiscountShare(Order pOrder)
pOrder
- The order that will be discountedpublic void doStartService() throws ServiceException
GenericService
doStartService
in class GenericService
ServiceException
- if the Service had a problem starting up