public class ScheduledOrderService extends SingletonSchedulableService
pollSchedule
. The
interval specified begins counting after Dynamo server starts. Therefore, if
Dynamo server is rebooted every 11 hours, and pollSchedule is set to "every 12 hours",
then no orders will ever be placed. A shorter interval might reduce performance,
but it will never cause the situation that some schedule orders will miss being placed
on time.
The method doScheduledTask
is a call-back method which is called
whenever the schedule order is scheduled to be placed. It calls
processDueScheduledOrders
to process any due schedule orders. Other objects
can also call this method to trigger a poll on demand. The method peformScheduledTask
will poll the order repository defined by property orderReposiotry
with the repository view of itemDescriptorName
. The poll query is defined by the
property pollQuery
. All the scheduled orders returned are processed individually which
is sent to the fullfiller for processing, and the nextScheduledRun
property
is updated to reflect the next time the order should be placed. If something wrong happens when
proocessing an individual schedule order, an CommerceException will be thrown and the other schedule
orders are processed without any impact.
In an error condition, the state of the scheduled order is changed to
PENDING_CUSTOMER_ACTION
.Modifier and Type | Field and Description |
---|---|
static java.lang.String |
CLASS_VERSION
Class version string
|
protected static java.util.ResourceBundle |
sResourceBundle
Resource Bundle
|
mJobId
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 |
---|
ScheduledOrderService()
Constructs an empty ScheduledOrderService
|
Modifier and Type | Method and Description |
---|---|
protected java.sql.Timestamp |
calculateNextScheduledRun(MutableRepositoryItem pScheduledOrderItem)
Calculates the next scheduled run time for a scheduled order item
|
void |
doScheduledTask(Scheduler pScheduler,
ScheduledJob pScheudledJob)
This method is a call-back method.
|
atg.commerce.order.scheduled.ScheduledOrderThreadDispatcher |
getDispatcher()
Returns a dispatcher for multi-threaded processing.
|
java.lang.String |
getItemDescriptorName()
Returns property ItemDescriptorName
|
int |
getMaxThreads()
Returns the maximum number of threads to use for processing orders.
|
protected long |
getNextScheduledRun(MutableRepositoryItem pItem,
long pLastRun)
This method calculates the next schedule run time for the Scheduled Order.
|
OrderManager |
getOrderManager()
Returns property OrderManager
|
MutableRepository |
getOrderRepository()
Returns property OrderRepository
|
RqlStatement |
getPollQuery()
Returns property PollQuery.
|
ScheduledOrderTools |
getScheduledOrderTools()
Returns property ScheduledOrderTools
|
javax.transaction.TransactionManager |
getTransactionManager()
Returns property TransactionManager
|
protected void |
placeScheduledOrder(MutableRepositoryItem pScheduledOrder)
This method places the Scheduled Order by first retrieving the template order
for this Scheduled Order, then cloning it and repricing the cloned order.
|
protected RepositoryItem[] |
pollForNewOrders()
This method polls the Schedule Order Repository based on the defined query
and returns an array of found scheduled orders which should be run.
|
protected void |
processDueScheduledOrder(RepositoryItem pItem)
This method processes each individual Scheduled Order and
if sucessfully processing it, set the next Schedule time for
the Scheduled Order.
|
protected void |
processDueScheduledOrders()
This method finds the due Scheduled Orders and processes each one individually.
|
protected void |
repriceScheduledOrder(Order pScheduledOrder,
Order pTemplateOrder,
RepositoryItem pProfile,
java.util.Locale pLocale)
This method reprices the Schedule Order
|
protected void |
repriceScheduledOrder(Order pScheduledOrder,
RepositoryItem pProfile,
java.util.Locale pLocale)
Deprecated.
|
void |
setItemDescriptorName(java.lang.String pItemDescriptorName)
Sets property ItemDescriptorName
|
void |
setMaxThreads(int pMaxThreads)
Sets the maximum number of threads to use for processing orders.
|
void |
setOrderManager(OrderManager pOrderManager)
Sets property OrderManager
|
void |
setOrderRepository(MutableRepository pOrderRepository)
Sets property OrderRepository
|
void |
setPollQuery(RqlStatement pPollQuery)
Sets property PollQuery
|
void |
setScheduledOrderTools(ScheduledOrderTools pScheduledOrderTools)
Sets property ScheduledOrderTools
|
acquireLock, getClientLockManager, getLockName, getLockTimeOut, performScheduledTask, releaseLock, setClientLockManager, setLockName, setLockTimeOut
doStartService, doStopService, getJobDescription, getJobId, getJobName, getSchedule, getScheduler, getThreadMethod, getThreadMethodString, isTransactional, setJobDescription, setJobName, setSchedule, setScheduler, setThreadMethod, setThreadMethodString, setTransactional, startScheduledJob, stopScheduledJob
addLogListener, createAdminServlet, 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 static java.lang.String CLASS_VERSION
protected static java.util.ResourceBundle sResourceBundle
public ScheduledOrderService()
public java.lang.String getItemDescriptorName()
public void setItemDescriptorName(java.lang.String pItemDescriptorName)
pItemDescriptorName
- the value to set for property ItemDescriptorNamepublic MutableRepository getOrderRepository()
public void setOrderRepository(MutableRepository pOrderRepository)
pOrderRepository
- the value to set for property OrderRepositorypublic void setOrderManager(OrderManager pOrderManager)
pOrderManager
- the value to set for property OrderManagerpublic OrderManager getOrderManager()
public void setScheduledOrderTools(ScheduledOrderTools pScheduledOrderTools)
pScheduledOrderTools
- the value to set for property ScheduledOrderToolspublic ScheduledOrderTools getScheduledOrderTools()
public RqlStatement getPollQuery()
public void setPollQuery(RqlStatement pPollQuery)
pPollQuery
- the value to set for property PollQuerypublic int getMaxThreads()
public void setMaxThreads(int pMaxThreads)
pMaxThreads
- the maximum number of threads to use for processing
orders. A value of 2 or more enables multi-threading.public atg.commerce.order.scheduled.ScheduledOrderThreadDispatcher getDispatcher()
public javax.transaction.TransactionManager getTransactionManager()
public void doScheduledTask(Scheduler pScheduler, ScheduledJob pScheudledJob)
doScheduledTask
in class SingletonSchedulableService
pScheduler
- the Scheduler which manages all the Scheduled jobspScheduledJob
- the job which will be runprotected RepositoryItem[] pollForNewOrders() throws RepositoryException
RepositoryException
- if an error occurs accessing the repositoryprotected void processDueScheduledOrders()
protected void repriceScheduledOrder(Order pScheduledOrder, RepositoryItem pProfile, java.util.Locale pLocale) throws CommerceException
pScheduledOrder
- the Scheduled Order to be repricedpProfile
- the Profile of the current userpLocale
- the locale of the current userCommerceException
- thrown if any of the Commerce related error occursRepositoryException
- if an error is found when accessing the repositoryprotected void repriceScheduledOrder(Order pScheduledOrder, Order pTemplateOrder, RepositoryItem pProfile, java.util.Locale pLocale) throws CommerceException
pScheduledOrder
- the Scheduled Order to be repricedpTemplateOrder
- the Template Order from which the scheduled order was created.pProfile
- the Profile of the current userpLocale
- the locale of the current userCommerceException
- thrown if any of the Commerce related error occursRepositoryException
- if an error is found when accessing the repositoryprotected void processDueScheduledOrder(RepositoryItem pItem)
pItem
- the RepositoryItem that identifies the Schedule Orderprotected java.sql.Timestamp calculateNextScheduledRun(MutableRepositoryItem pScheduledOrderItem) throws CommerceException
For CalendarSchedules the current time is given to the schedule object as the basis for determining the next run time.
For PeriodicSchedules, the current value of the scheduled order item's nextRunTime, which is effectively the last run time, is provided as the basis for determining the next run time.
pScheduledOrderItem
- CommerceException
CalendarSchedule.getNextJobTime(long)
,
PeriodicSchedule.getNextJobTime(long)
protected void placeScheduledOrder(MutableRepositoryItem pScheduledOrder) throws CommerceException, RepositoryException, SiteContextException
pScheduledOrder
- the Scheduled Order to be placedCommerceException
- thrown if any of the Commerce related error occursRepositoryException
- if an error is found when accessing the repositorySiteContextException
ScheduledOrderTools
protected long getNextScheduledRun(MutableRepositoryItem pItem, long pLastRun) throws CommerceException
pItem
- the Scheduled OrderpLastRun
- the last running timeCommerceException
- thrown if any of the Commerce related error occurs