Documentation Home
This version of the framework is no longer supported. View the latest documentation.

Broadleaf 4.0.21-GA

Released on July 5, 2017

This is the 21st patch release for the Broadleaf Commerce 4.0 framework.

Noteworthy Changes

StringClobType is causing the Oracle JDBC driver to generate large buffer arrays

Research has shown that Hibernate is generating a lot of garbage data for GC with using Clob data types that doesn't need to be there. Hibernate has deprecated StringClobType in favor of MaterializedClobType. While transitioning to this new type is the right answer for Oracle, it may not be the right answer for other RDBMS platform. For example, if a field type of Text is used in Postgres for the field, using MaterializedClobType will lead to errors at runtime, since the TextType should be used instead.

The main reason to switch to MaterializedClobType is because it avoids the use of rs.getCharacterStream on the clob column. Opening the character stream causes the Oracle jdbc driver to allocate a very large buffer array, which contributes to wasteful short-term memory allocation.

To enable the use of the new MaterializedClobType, the following configuration can be added to the core project applicationContext.xml:

<bean id="myMaterializedClobTypeClassTransfomer" class="org.broadleafcommerce.common.extensibility.jpa.convert.MaterializedClobTypeClassTransformer"/>
<bean id="myClassTransformers" class="org.springframework.beans.factory.config.ListFactoryBean">
   <property name="sourceList">
      <list>
         <ref bean="myMaterializedClobTypeClassTransfomer"/>
      </list>
   </property>
</bean>
<bean class="org.broadleafcommerce.common.extensibility.context.merge.LateStageMergeBeanPostProcessor">
   <property name="collectionRef" value="myClassTransformers" />
   <property name="targetRef" value="blMergedClassTransformers" />
</bean>

Large ResultSet and Large Query Volume Performance Improvements (Enterprise Module)

Several admin ListGrid changes have been made to improve performance when dealing with large data sets. This represents a UX change in the admin when dealing with ListGrids for entities that have this feature enabled. The ListGrid behavior is changed to use a Page Next, Page Previous, Page Size navigation approach in order to limit potentially expensive count(*) queries which in "Legacy" mode is needed for pagination status tracking. To enable this feature, the following steps can be taken:

Enable the feature in the properties file

In the appropriate properties file (e.g. production.properties), enable the following properties:

admin.fetch.enable.large.result.paging=true
use.to.one.lookup.sku.product.option.value=true

OPTIONAL: Exclude other entities from the Large ResultSet list by changing applicationContext-admin.xml

By default, all entities except StaticMedia, StructuredContent, and SkuImpl will use the new UX behavior (if enabled). Additional entities can be added to the exclusion list if desired. The following entry is an example of how to add the exclusion(s) to your admin context - applicationContext-admin.xml:

<bean id="myFetchLargeResultQualifiedEntityPatterns" class="org.springframework.beans.factory.config.ListFactoryBean">
    <property name="sourceList">
        <list>
            <bean class="com.broadleafcommerce.enterprise.workflow.admin.persistence.module.FetchLargeResultSetQualifiedEntityPattern">
                <property name="regex" value="com\.mycompany\.domain\.EntityToExcludeImpl"/>
            </bean>
        </list>
    </property>
</bean>

<bean class="org.broadleafcommerce.common.extensibility.context.merge.LateStageMergeBeanPostProcessor">
    <property name="collectionRef" value="myFetchLargeResultQualifiedEntityPatterns" />
    <property name="targetRef" value="blFetchLargeResultQualifiedEntityPatterns" />
</bean>

An at-a-glance view of the issues that were closed in this release:

Major Bugs(2)

  • Addressed an issue where outdated product options would display on the form when adding additional skus to a product
  • Fixed an issue that was preventing new categories without a parent category from being added

Minor Bugs(2)

  • NPE in AdminEntityServiceImpl#fetch if maxIndex is not null and startIndex is null
  • StringClobType is causing the Oracle JDBC driver to generate large buffer arrays

Enhancements(3)

  • Support listgrid record status message and css style
  • Large ResultSet and Large Query Volume Performance Improvements
  • Simplified redundant booleans in conditional for OrderImpl

Total Resolved Issues: 7