com.ibm.commerce.marketing.promotion.runtime

Class DefaultPromotionEngine

  • java.lang.Object
    • com.ibm.commerce.marketing.promotion.runtime.DefaultPromotionEngine
  • All Implemented Interfaces:
    com.ibm.commerce.marketing.promotion.runtime.AdvancedPromotionEngine, PromotionEngine, XMLizable, java.io.Serializable


    public class DefaultPromotionEngine
    extends java.lang.Object
    implements com.ibm.commerce.marketing.promotion.runtime.AdvancedPromotionEngine
    It provides a default implementation of promotion engine. Promotion engine is a rule-based engine to evaluate how the promotions can be applied to an order by calling its invoke() method with a pass-in order id parameter.

    XML Snippet of DefaultPromotionEngine:

       <PromotionEngine impl="com.ibm.commerce.marketing.promotion.runtime.DefaultPromotionEngine">
        <Name>PromotionEngine</Name>
           <SingleJVMConfiguration>true</SingleJVMConfiguration>
           <PromotionCodeManager impl="com.ibm.commerce.marketing.promotion.code.WCSPromotionCodeManager">
              <PromotionCodeResolver impl="com.ibm.commerce.marketing.promotion.code.DefaultPromotionCodeResolver"/>
            </PromotionCodeManager>
            <CouponManager impl="com.ibm.commerce.marketing.promotion.coupon.DefaultCouponManager"/>
         
            <PromotionContextFactory impl="com.ibm.commerce.marketing.promotion.runtime.DefaultPromotionContextFactory"/>
            <DefaultBehavior>
               <StatelessInvocation>true</StatelessInvocation>
               <CheckTargetingAtRuntime>true</CheckTargetingAtRuntime>
               <SkipTargetingOnCodeEntered>true</SkipTargetingOnCodeEntered>
               <PriceAdjustmentBasedOnStandardOfferPrice>true</PriceAdjustmentBasedOnStandardOfferPrice>
               <Debug>false</Debug>
               <ReloadInterval>-1</ReloadInterval>
          </DefaultBehavior>
       
          <ExternalEntityFactoryRegistry impl="com.ibm.commerce.marketing.promotion.dependency.ExternalEntityFactoryRegistry">
             <OrderFactory impl="com.ibm.commerce.marketing.promotion.integration.dependency.WCSOrderFactory"/>
             <OrderItemFactory impl="com.ibm.commerce.marketing.promotion.integration.dependency.WCSOrderItemFactory"/>
             <CustomerFactory impl="com.ibm.commerce.marketing.promotion.integration.dependency.WCSCustomerFactory"/>
             <CustomerProfileFactory impl="com.ibm.commerce.marketing.promotion.integration.dependency.WCSCustomerProfileFactory"/>
             <CatalogEntryFactory impl="com.ibm.commerce.marketing.promotion.integration.dependency.WCSCatalogEntryFactory"/>
             <StoreFactory impl="com.ibm.commerce.marketing.promotion.integration.dependency.WCSStoreFactory"/>
             <CampaignFactory impl="com.ibm.commerce.marketing.promotion.integration.dependency.WCSCampaignFactory"
             <PriceConverterFactory impl="com.ibm.commerce.marketing.promotion.integration.dependency.WCSPriceConverterFactory"/>
          </ExternalEntityFactoryRegistry>
          
          <PersistenceManagerRegistry impl="com.ibm.commerce.marketing.promotion.persistence.PersistenceManagerRegistry">
             <PromotionPersistenceManager impl="com.ibm.commerce.marketing.promotion.PromotionSessionBeanPersistenceManager">
                <InitialCacheSize>1024</InitialCacheSize>
                <MaxCacheSize>8192</MaxCacheSize>
             </PromotionPersistenceManager>
           
             <PromotionPolicyPersistenceManager impl="com.ibm.commerce.marketing.promotion.policy.PromotionPolicySessionBeanPersistenceManager">
                <InitialCacheSize>32</InitialCacheSize>
                <MaxCacheSize>1024</MaxCacheSize>
             </PromotionPolicyPersistenceManager>
             
             <PromotionGroupPersistenceManager impl="com.ibm.commerce.marketing.promotion.group.PromotionGroupSessionBeanPersistenceManager">
                <InitialCacheSize>32</InitialCacheSize>
                <MaxCacheSize>1024</MaxCacheSize>
             </PromotionGroupPersistenceManager>
             
             <DynamicAttributePersistenceManager impl="com.ibm.commerce.marketing.promotion.dynattr.DynamicAttributeSessionBeanPersistenceManager">
                <InitialCacheSize>32</InitialCacheSize>
                <MaxCacheSize>1024</MaxCacheSize>
             </DynamicAttributePersistenceManager>
             
             <PromotionArgumentPersistenceManager impl="com.ibm.commerce.marketing.promotion.runtime.PromotionArgumentSessionBeanPersistenceManager"/>
             
             <CouponPersistenceManager impl="com.ibm.commerce.marketing.promotion.coupon.CouponSessionBeanPersistenceManager"/>
             
             <StatsPersistenceManager impl="com.ibm.commerce.marketing.promotion.stats.StatsSessionBeanPersistenceManager"/>
          </PersistenceManagerRegistry>
      
            <PromotionEventListenerRegistry impl="com.ibm.commerce.marketing.promotion.event.ListenerRegistry">
      
               <!-- DO NOT MODIFY THE SECTION BELOW -->
             
               <Listener impl="com.ibm.commerce.marketing.promotion.event.PrintPromotionDebugEventListener">
                  <Name>[SYSTEM]DEBUGDAEMON</Name>
                  <ListensFor>com.ibm.commerce.marketing.promotion.event.PromotionDebugEvent</ListensFor>
               </Listener>
               <Listener impl="com.ibm.commerce.marketing.promotion.coupon.CouponDaemon">
                  <Name>[SYSTEM]COUPONDAEMON</Name>
                  <ListensFor>com.ibm.commerce.marketing.promotion.event.PromotionAppliedEvent</ListensFor>
               </Listener>
               <Listener impl="com.ibm.commerce.marketing.promotion.event.WCSPromotionSuspendedEventListener">
                  <Name>[SYSTEM]PROMOTIONSUSPENDHELPER</Name>
                  <ListensFor>com.ibm.commerce.marketing.promotion.event.PromotionSuspendedEvent</ListensFor>
               </Listener>
               
               <!-- DO NOT MODIFY THE SECTION ABOVE -->
      
               <!--        
               <Listener impl="com.ibm.commerce.marketing.promotion.event.PrintPromotionLifeCycleEventListener">
                  <Name>PrintLifeCycleEventListener</Name>
                  <ListensFor>com.ibm.commerce.marketing.promotion.event.PromotionChangedEvent</ListensFor>
                  <ListensFor>com.ibm.commerce.marketing.promotion.event.PromotionCreatedEvent</ListensFor>
                  <ListensFor>com.ibm.commerce.marketing.promotion.event.PromotionDeployedEvent</ListensFor>
                  <ListensFor>com.ibm.commerce.marketing.promotion.event.PromotionRemovedEvent</ListensFor>
                  <ListensFor>com.ibm.commerce.marketing.promotion.event.PromotionResetEvent</ListensFor>
                  <ListensFor>com.ibm.commerce.marketing.promotion.event.PromotionResumedEvent</ListensFor>
                  <ListensFor>com.ibm.commerce.marketing.promotion.event.PromotionSuspendedEvent</ListensFor>
                  <ListensFor>com.ibm.commerce.marketing.promotion.event.PromotionWithdrawnEvent</ListensFor> 
               </Listener>
      
               <Listener impl="com.ibm.commerce.marketing.promotion.event.PrintPromotionExecutionEventListener">
                  <Name>PrintExecutionEventListener</Name>
                  <ListensFor>com.ibm.commerce.marketing.promotion.event.PromotionAssessedEvent</ListensFor>
                  <ListensFor>com.ibm.commerce.marketing.promotion.event.PromotionAppliedEvent</ListensFor>
                  <ListensFor>com.ibm.commerce.marketing.promotion.event.PromotionEliminatedEvent</ListensFor>
                  <ListensFor>com.ibm.commerce.marketing.promotion.event.PromotionQualifiedEvent</ListensFor>
                  <ListensFor>com.ibm.commerce.marketing.promotion.event.PromotionRejectedEvent</ListensFor>
               </Listener>
      
               <Listener impl="com.ibm.commerce.marketing.promotion.event.PrintPromotionRASEventListener">
                  <Name>PrintRASEventListener</Name>
                  <StoreKey>
                     <DN>ou=BlueMall B2C Organization,o=Seller Organization,o=Root Organization</DN>
                     <Identifier>BlueStore 201</Identifier>
                  </StoreKey>
                  <ListensFor>com.ibm.commerce.marketing.promotion.event.PromotionDebugEvent</ListensFor>
                  <ListensFor>com.ibm.commerce.marketing.promotion.event.PromotionErrorEvent</ListensFor>
                  <ListensFor>com.ibm.commerce.marketing.promotion.event.PromotionLogEvent</ListensFor>
                  <ListensFor>com.ibm.commerce.marketing.promotion.event.PromotionTraceEvent</ListensFor>
               </Listener>
               -->
         
            </PromotionEventListenerRegistry>
            <PromotionExecutionSequenceBuilder impl="com.ibm.commerce.marketing.promotion.runtime.DefaultSequenceBuilder"/>
            <PromotionExecutionAgendaBuilder impl="com.ibm.commerce.marketing.promotion.runtime.DefaultAgendaBuilder">
               <InvocationTemplates>
                  <Template>
                     <TemplateKey>
                        <StoreKey>
                           <DN>o=root organization</DN>
                           <Identifier>NullEntity</Identifier>
                        </StoreKey>
                        <Name>All Promotions</Name>
                     </TemplateKey>
                     <MonetaryValuePresence>
                        <Price>true</Price>
                        <ShippingCharge>false</ShippingCharge>
                        <Tax>false</Tax>
                        <ShippingTax>false</ShippingTax>
                     </MonetaryValuePresence>
                     <PromotionGroupKey>
                        <StoreKey>
                           <DN>o=root organization</DN>
                           <Identifier>NullEntity</Identifier>
                        </StoreKey>
                        <GroupName>ProductLevelPromotion</GroupName>
                     </PromotionGroupKey>                
                     <PromotionGroupKey>
                        <StoreKey>
                           <DN>o=root organization</DN> 
                           <Identifier>NullEntity</Identifier>
                        </StoreKey>
                        <GroupName>OrderLevelPromotion</GroupName>
                            </PromotionGroupKey>      
            <PromotionGroupKey>
                <StoreKey>
                    <DN>o=root organization</DN>
                     <Identifier>NullEntity</Identifier>
                   </StoreKey>
                    <GroupName>ShippingPromotion</GroupName>
                  </PromotionGroupKey>
                </Template>
                <Template>
                   <TemplateKey>
                       <StoreKey>
                          <DN>o=root organization</DN>
                          <Identifier>NullEntity</Identifier>
                      </StoreKey>
                       <Name>Order Level Promotion</Name>
                   </TemplateKey>
                   <MonetaryValuePresence>
                      <Price>true</Price>
                      <ShippingCharge>false</ShippingCharge>
                      <Tax>false</Tax>
                      <ShippingTax>false</ShippingTax>
                   </MonetaryValuePresence>
                   <PromotionGroupKey>
                      <StoreKey>
                         <DN>o=root organization</DN>
                         <Identifier>NullEntity</Identifier>
                      </StoreKey>
                      <GroupName>OrderLevelPromotion</GroupName>
                   </PromotionGroupKey>
                </Template>
                <Template>
                   <TemplateKey>
                      <StoreKey>
                         <DN>o=root organization</DN>
                         <Identifier>NullEntity</Identifier>
                      </StoreKey>
                      <Name>Product Level Promotion</Name>
                   </TemplateKey>
                   <MonetaryValuePresence>
                      <Price>true</Price>
                      <ShippingCharge>false</ShippingCharge>
                      <Tax>false</Tax>
                      <ShippingTax>false</ShippingTax>
                   </MonetaryValuePresence>
                   <PromotionGroupKey>
                      <StoreKey>
                         <DN>o=root organization</DN>
                         <Identifier>NullEntity</Identifier>
                      </StoreKey>
                      <GroupName>ProductLevelPromotion</GroupName>
                   </PromotionGroupKey>
                </Template>
                <Template>
                   <TemplateKey>
                      <StoreKey> 
                         <DN>o=root organization</DN>
                         <Identifier>NullEntity</Identifier>
                      </StoreKey>
                      <Name>Shipping Promotions</Name>
                   </TemplateKey>
                   <MonetaryValuePresence>
                      <Price>true</Price>
                      <ShippingCharge>false</ShippingCharge>
                      <Tax>false</Tax>
                      <ShippingTax>false</ShippingTax>
                   </MonetaryValuePresence>
                   <PromotionGroupKey>
                   <StoreKey>
                      <DN>o=root organization</DN> 
                      <Identifier>NullEntity</Identifier>
                   </StoreKey>
                   <GroupName>ShippingPromotion</GroupName>
                </PromotionGroupKey>
             </Template>
             <Template>
                <TemplateKey>
                   <Name>Order And Product Level Promotion</Name>
                   <StoreKey>
                      <DN>o=root organization</DN>
                      <Identifier>NullEntity</Identifier>
                   </StoreKey>
                </TemplateKey>
                <MonetaryValuePresence>
                   <Price>true</Price>
                   <ShippingCharge>false</ShippingCharge>
                   <Tax>false</Tax>
                   <ShippingTax>false</ShippingTax>
                </MonetaryValuePresence>
                <PromotionGroupKey>
                   <StoreKey>
                      <DN>o=root organization</DN>
                      <Identifier>NullEntity</Identifier>
                   </StoreKey>
                   <GroupName>OrderLevelPromotion</GroupName>
                </PromotionGroupKey>
                <PromotionGroupKey>
                   <StoreKey>
                      <DN>o=root organization</DN>
                      <Identifier>NullEntity</Identifier>
                   </StoreKey>
                   <GroupName>ProductLevelPromotion</GroupName>
                </PromotionGroupKey>
             </Template>
            </InvocationTemplates>
         </PromotionExecutionAgendaBuilder>
         <promotionExceptionHandler impl="com.ibm.commerce.marketing.promotion.runtime.DefaultpromotionExceptionHandler"/>
      </PromotionEngine>
     
    See Also:
    Serialized Form
    • Field Detail

      • COPYRIGHT

        public static final java.lang.String COPYRIGHT
        IBM Copyright
        See Also:
        Constant Field Values
    • Constructor Detail

      • DefaultPromotionEngine

        public DefaultPromotionEngine()
        Constructor for DefaultPromotionEngine.
    • Method Detail

      • checkTargetingAtRuntime

        public boolean checkTargetingAtRuntime()
        Returns true if the targeting condition should be checked at runtime by default.
        Specified by:
        checkTargetingAtRuntime in interface PromotionEngine
        Returns:
        true if the targeting condition should be checked at runtime by default.
      • getEngineName

        public java.lang.String getEngineName()
        Returns the name of a named promotion engine.
        Specified by:
        getEngineName in interface PromotionEngine
        Returns:
        String the name of a named promotion engine.
      • isSingleJVMConfiguration

        public boolean isSingleJVMConfiguration()
        Returns true if the promotion engine is running in a single JVM.
        Specified by:
        isSingleJVMConfiguration in interface PromotionEngine
        Returns:
        true if the promotion engine is running in a single JVM.
      • skipTargetingOnCodeEntered

        public boolean skipTargetingOnCodeEntered()
        By default, if a correct promotion code is entered will the engine evaluate targeting condition or not.
        Specified by:
        skipTargetingOnCodeEntered in interface PromotionEngine
        Returns:
        true if targeting condition should not be evaluated on a correct promotion code entered, false otherwise.
      • getContextFactory

        public PromotionContextFactory getContextFactory()
        Returns the contextFactory.
        Returns:
        PromotionContextFactory
      • isStateless

        public boolean isStateless()
        Returns true if this promotion engine is stateless.
        Specified by:
        isStateless in interface PromotionEngine
        Returns:
        true for stateless and false for stateful.
      • invoke

        public PromotionArgument invoke(java.lang.String template,
                                        java.lang.Long orderId,
                                        boolean discardPreviousResult,
                                        boolean saveCurrentResult,
                                        java.util.Hashtable aNVP)
                                 throws PromotionRuntimeException
        Description copied from interface: PromotionEngine
        Invokes the engine. When the promotion engine is called, it processes any promotions for the current order, and returns a PromotionArgument.
        Specified by:
        invoke in interface PromotionEngine
        Parameters:
        template - This defines the name of the template used to invoke the engine. Templates are prescribed ways of calling the promotion engine.
        orderId - primary key of the order to which promotions will be applied
        discardPreviousResult - It instructs the promotion engine to eliminate any previous record about how promotions are applied to the current order, that is, the order whose primary key is specified in the call.
        saveCurrentResult - It tells the promotion engine whether the current results should be persisted in the database.
        aNVP - name value pair style parameters, if any, null is acceptable.
        Returns:
        PromotionArgument which details the result of this invocation
        Throws:
        PromotionRuntimeException - when an error occurs in the invocation.
        See Also:
        PromotionEngine.invoke(java.lang.String, java.lang.Long, boolean, boolean, java.util.Hashtable)
      • cleanup

        public void cleanup()
        Cleans up the promotion engine when the engine is about to shut down. Currently does nothing
        Specified by:
        cleanup in interface PromotionEngine
      • isAdjustmentBasedOnStandardOfferPrice

        public boolean isAdjustmentBasedOnStandardOfferPrice()
        Returns true if all the adjustments will be based on standard offer price by default.
        Specified by:
        isAdjustmentBasedOnStandardOfferPrice in interface PromotionEngine
        Returns:
        true if all the adjustments will be based on standard offer price by default.
      • getPromotionExceptionHandler

        public com.ibm.commerce.marketing.promotion.runtime.PromotionExceptionHandler getPromotionExceptionHandler()
        See Also:
        com.ibm.commerce.marketing.promotion.runtime.PromotionEngine#getPromotionExceptionHandler()
      • isInDebugMode

        public boolean isInDebugMode()
        Returns true if the engine is running in debug mode.
        Specified by:
        isInDebugMode in interface PromotionEngine
        Returns:
        true if the engine is running in debug mode, false otherwise
      • setInDebugMode

        public void setInDebugMode(boolean b)
        This method is used to set the promotion engine running in debug mode.
        Specified by:
        setInDebugMode in interface PromotionEngine
        Parameters:
        b - true indicates that the engine is set to run in debug mode.
      • getConfigReloadInterval

        public long getConfigReloadInterval()
        This method returns the time interval in which to reload the WCSPromotionEngineConfig.xml file
        Returns:
        time interval in milliseconds
      • setEngineName

        public void setEngineName(java.lang.String aEngineName)
        Sets the name for engine
        Parameters:
        aEngineName - The engine name to set
      • setAdjustmentBasedOnStandardOfferPrice

        public void setAdjustmentBasedOnStandardOfferPrice(boolean aAdjustmentBasedOnStandardOfferPrice)
        Sets if all the adjustments will be based on standard offer price or not by default.
        Parameters:
        aAdjustmentBasedOnStandardOfferPrice - true indicates that the adjustments will be based on standard offer price by default.
      • setCheckTargeting

        public void setCheckTargeting(boolean aCheckTargeting)
        Sets boolean value to indicate if the targeting condition should be checked by default.
        Parameters:
        aCheckTargeting - true indicates that the targeting condition should be checked by default.
      • setSingleJVMConfiguration

        public void setSingleJVMConfiguration(boolean aSingleJVMConfiguration)
        Sets boolean value to indicate if the engine is running in a Single JVM environment or not.
        Parameters:
        aSingleJVMConfiguration - true indicates that the engine is running in a single JVM environment.
      • setSkipTargeting

        public void setSkipTargeting(boolean aSkipTargeting)
        Sets boolean value to indicate if the targeting condition should be skipped checking by default.
        Parameters:
        aSkipTargeting - true indicates that the targeting condition should not be checked by default.
      • setStateless

        public void setStateless(boolean aStateless)
        Sets if by default all invocations to the engine is stateless from a pass-in boolean value.
        Parameters:
        aStateless - the boolean value to set.
      • setAgendaBuilder

        public void setAgendaBuilder(PromotionExecutionAgendaBuilder aAgendaBuilder)
        Sets the agendaBuilder
        Parameters:
        aAgendaBuilder - the agendaBuilder to set
      • setCouponManager

        public void setCouponManager(CouponManager aCouponManager)
        Sets the couponManager
        Parameters:
        aCouponManager - the couponManager to set
      • setPromotionCodeManager

        public void setPromotionCodeManager(GenericPromotionCodeManager aPpromotionCodeManager)
        Sets the promotionCodeManager
        Parameters:
        aPpromotionCodeManager - the promotionCodeManager to set
      • setContextFactory

        public void setContextFactory(PromotionContextFactory aContextFactory)
        Sets the contextFactory
        Parameters:
        aContextFactory - the contextFactory to set
      • setSequenceBuilder

        public void setSequenceBuilder(PromotionExecutionSequenceBuilder aSequenceBuilder)
        Sets the SequenceBuilder
        Parameters:
        aSequenceBuilder - the sequenceBuilder to set
      • setExternalEntityRegistry

        public void setExternalEntityRegistry(com.ibm.commerce.marketing.promotion.dependency.ExternalEntityFactoryRegistry aExternalEntityRegistry)
        Sets the ExternalRegistry
        Parameters:
        aExternalEntityRegistry - the externalEntityRegistry to set
      • setPersistenceManagerRegistry

        public void setPersistenceManagerRegistry(PersistenceManagerRegistry aPersistenceManagerRegistry)
        Sets the persistenceManagerRegistry
        Parameters:
        aPersistenceManagerRegistry - the persistenceManagerRegistry to set
      • setPromotionEventListenerRegistry

        public void setPromotionEventListenerRegistry(com.ibm.commerce.marketing.promotion.event.ListenerRegistry aPromotionEventListenerRegistry)
        Sets the promotionEventListenerRegistry
        Parameters:
        aPromotionEventListenerRegistry - the promotionEventListenerRegistry to set
      • createPromotionContext

        public PromotionContext createPromotionContext(Order aOrder,
                                                       CommandContext aCommandContext,
                                                       java.lang.String aTemplateName,
                                                       java.util.List promotionKeys,
                                                       boolean bSimulationMode)
        Specified by:
        createPromotionContext in interface com.ibm.commerce.marketing.promotion.runtime.AdvancedPromotionEngine
        See Also:
        AdvancedPromotionEngine.createPromotionContext(com.ibm.commerce.marketing.promotion.dependency.Order, com.ibm.commerce.command.CommandContext, java.lang.String, java.util.List, boolean)
      • createPromotionContext

        public PromotionContext createPromotionContext(Order aOrder,
                                                       CommandContext aCommandContext,
                                                       java.lang.String aTemplateName,
                                                       java.util.List promotionKeys,
                                                       boolean bSimulationMode,
                                                       java.util.Map additionalParameters)
                                                throws PromotionRuntimeException
        Specified by:
        createPromotionContext in interface com.ibm.commerce.marketing.promotion.runtime.AdvancedPromotionEngine
        Throws:
        PromotionRuntimeException
        See Also:
        AdvancedPromotionEngine.createPromotionContext(com.ibm.commerce.marketing.promotion.dependency.Order, com.ibm.commerce.command.CommandContext, java.lang.String, java.util.List, boolean, java.util.Map)
      • getFlowControl

        public int getFlowControl()

        This method will return the flow control configuration value configured for this promotion engine.

        Returns:
        int The flow control configuration value configured for this promotion engine.
      • getSequenceCombinationThreshold

        public int getSequenceCombinationThreshold()

        This method will return the sequence combination configuration value configured for this promotion engine.

        Returns:
        int The sequence combination configuration value configured for this promotion engine.
      • getMaxPromotionsPerGroupForBestDealEvaluation

        public java.lang.Integer getMaxPromotionsPerGroupForBestDealEvaluation()

        This method will return the maximum promotions for the best deal evaluation configuration value configured for this promotion engine.

        Returns:
        Integer The maximum promotions for the best deal evaluation configuration value configured for this promotion engine.
      • getPromotionGroupsForBestDealEvaluation

        public java.util.HashSet<java.lang.String> getPromotionGroupsForBestDealEvaluation()

        This method will return the promotion group listing for the best deal evaluation configuration value configured for this promotion engine.

        Returns:
        HashSet The promotion group listing for the best deal evaluation configuration value configured for this promotion engine.