3.1.0 to 3.1.1 Migration
Remove blAdminSandboxFilter Bean
This bean is no longer necessary in 3.1.1-GA. You might see this bean in your applicationContext-admin-filter.xml within the blPostSecurityFilterChain. This can safely be removed.
Change the location of the blAdminRequestFilter
In applicationContext-filter.xml, this bean is currently in the blPreSecurityFilterChain. It should be moved to the first filter in the blPostSecurityFilterChain.
Add the blBLCJSResourceHandler to the blJsResources bean
In applicationContext-admin.xml the new blJsResources bean should be something like:
<bean id="blJsResources" class="org.broadleafcommerce.common.web.resource.BroadleafResourceHttpRequestHandler">
    <property name="handlers">
        <list>
            <ref bean="blRuleBuilderEnumOptionsResourceHandler" />
            <ref bean="blBLCJSResourceHandler" />
        </list>
    </property>
    <property name="locations" ref="blJsLocations" />
</bean>
This will resolve issues if you attempt to use
BLC.servletContext()in a Javascript file and it instead returns the string//BL_SERVLET_CONTEXTrather than the actual servlet context (likeadmin)
Inventory Management
Basic inventory functionality has been rolled into 3.1.1-GA. The basic inventory functionality includes:
- A new field on 
BLC_SKUcalledQUANTITY_AVAILABLEdesigned to manage the inventory on the Sku - New inventory types of Always Available, Unavailable and Check Availability
 - New activities within the add to cart and update cart item workflows to check availability for a Sku, if enabled
 - A new activity in the checkout workflow to decrement inventory
 
Enabling the inventory management and workflow activities is not automatic but can be added with a few simple steps:
1. Ensure that the getAvailableQuantity() and setAvailableQuantity() methods return an actual value
Out of the box these methods will always return null (indicating unset). There are a couple of ways to have them return actual values:
a. If you have already extended SkuImpl with your own implementation, add a new field to your SkuImpl subclass:
@Column(name = "QUANTITY_AVAILABLE")
@AdminPresentation(friendlyName = "SkuImpl_Sku_QuantityAvailable",
        order = 1010,
        tab = ProductImpl.Presentation.Tab.Name.Inventory,
        tabOrder = ProductImpl.Presentation.Tab.Order.Inventory,
        group = ProductImpl.Presentation.Group.Name.Inventory,
        groupOrder = ProductImpl.Presentation.Group.Order.Inventory)
protected Integer quantityAvailable = 0;
public Integer getQuantityAvailable() {
    return quantityAvailable;
}
public void setQuantityAvailable(Integer quantityAvailable) {
    this.quantityAvailable = quantityAvailable;
}
b. Configure a byte code weaver to dynamically weave in the new Sku property
Add the following XML configuration to core/src/main/resources/applicationContext.xml:
<!-- Inventory class transformer to enable simple inventory management. This transformer should be removed in Broadleaf 3.2.0+ -->
<bean id="blInventoryClassTransformer" class="org.broadleafcommerce.common.extensibility.jpa.copy.DirectCopyClassTransformer">
    <constructor-arg name="moduleName" value="Basic Inventory Management" />
    <property name="xformTemplates">
        <map>
            <entry key="org.broadleafcommerce.core.catalog.domain.SkuImpl"
                   value="org.broadleafcommerce.core.catalog.domain.QuantityAvailableSkuTemplate">
            </entry>
        </map>
    </property>
</bean>
<bean id="customClassTransformers" class="org.springframework.beans.factory.config.ListFactoryBean">
    <property name="sourceList">
        <list>
            <ref bean="blInventoryClassTransformer" />
        </list>
    </property>
</bean>
<bean class="org.broadleafcommerce.common.extensibility.context.merge.LateStageMergeBeanPostProcessor">
    <property name="collectionRef" value="customClassTransformers" />
    <property name="targetRef" value="blMergedClassTransformers" />
</bean>
Note - this method will require you to hook up the Spring instrument jar to your application server
2. Add the CheckAvailabilityActivity to the blAddItemWorkflow and blUpdateItemWorkflow
<!-- This workflow modification is only necessary if you are managing inventory. This activity has been enabled in the core
           Broadleaf framework in version 3.2.0+ and should be removed if on that version -->
<bean id="blAddItemWorkflow" class="org.broadleafcommerce.core.workflow.SequenceProcessor">
    <property name="activities">
        <list>
            <bean p:order="2010" id="blCheckAddAvailabilityActivity" class="org.broadleafcommerce.core.order.service.workflow.CheckAvailabilityActivity"/>
        </list>
    </property>
</bean>
<!-- This workflow modification is only necessary if you are managing inventory. This activity has been enabled in the core
           Broadleaf framework in version 3.2.0+ and should be removed if on that version -->
<bean id="blUpdateItemWorkflow" class="org.broadleafcommerce.core.workflow.SequenceProcessor">
    <property name="activities">
        <list>
            <bean p:order="2010" id="blCheckUpdateAvailabilityActivity" class="org.broadleafcommerce.core.order.service.workflow.CheckAvailabilityActivity"/>
        </list>
    </property>
</bean>
3. Add the DecrementInventoryActivity to the blCheckoutWorkflow
<bean id="blCheckoutWorkflow" class="org.broadleafcommerce.core.workflow.SequenceProcessor">
    <property name="activities">
        <list>
            <!-- This activity is only necessary if you are managing inventory. This activity has been enabled in the core
                Broadleaf framework in version 3.2.0+ and should be removed if on that version -->
            <bean p:order="5010" id="blDecrementInventoryActivity" class="org.broadleafcommerce.core.checkout.service.workflow.DecrementInventoryActivity">
                <property name="rollbackHandler" ref="blDecrementInventoryRollbackHandler" />
            </bean>
            <!-- This activity should occur at the very end of the checkout workflow, after everything has been executed -->
            <bean p:order="9999999" class="com.mycompany.worklow.checkout.SendOrderConfirmationEmailActivity" />
        </list>
    </property>
</bean>
Now you should be able to see the 'Quantity Available' field in the admin. Once this is set to a value and the inventory type is set to 'Check Quantity', Broadleaf will now verify and update inventory when undergoing cart and checkout operations.
For a complete diff of the modifications that were made on the stock Heat Clinic demo site, see https://github.com/BroadleafCommerce/DemoSite/commit/9859c3d2b8e7d5a916d05d30e111242e23cbb3cf