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_CONTEXT
rather 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_SKU
calledQUANTITY_AVAILABLE
designed 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