Broadleaf Enterprise 3.0.12-GA
Released on July 6, 2017
This is the 12h patch release of the Enterprise 3.0.x release. The 3.0.12-GA version of the Enterprise module has the following dependencies:
- Broadleaf Commerce Framework version 5.0.11-GA or higher.
- Jobs and Events version 2.1.6-GA or higher
- Common Enterprise version 3.0.7-GA or higher
New and Noteworthy
New feature! Large ResultSet and Large Query Volume Performance Improvements.
- Support simple next/previous paging for basic list grids
- Add i18n index
- Support arbitrary batch fetch API against foreign key list
- Support ToOne lookup for product option value lists for skus to cover async, paged lookup for large value lists
- Change Site and Theme file retrieval from using a transaction to using Entity-Manager-In-View. This serves to avoid borrowing a connection for static asset requests if the site or theme entity is already in Hibernate L2 cache. As a result, we relieve some pressure on the connection pool.
These behaviors are introduced as optional and are activated by these properties. Follow these steps to enable this feature:
admin.fetch.enable.large.result.paging=true
use.to.one.lookup.sku.product.option.value=true
For the admin.fetch.enable.large.result.paging
property, and additional app context configuration is required to control the extent to which the behavior is applied in the admin. For example, the following configuration in the admin application context xml will cause the new list grid behavior to be applied to all entities except for static assets and structured content, which is recommended:
<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="org\.broadleafcommerce\.cms\.structure\.domain\.StructuredContentImpl"/>
</bean>
<bean class="com.broadleafcommerce.enterprise.workflow.admin.persistence.module.FetchLargeResultSetQualifiedEntityPattern">
<property name="regex" value="org\.broadleafcommerce\.cms\.file\.domain\.StaticAsset"/>
</bean>
<bean class="com.broadleafcommerce.enterprise.workflow.admin.persistence.module.FetchLargeResultSetQualifiedEntityPattern">
<property name="regex" value=".*"/>
<property name="include" value="true"/>
</bean>
</list>
</property>
</bean>
<bean class="org.broadleafcommerce.common.extensibility.context.merge.LateStageMergeBeanPostProcessor">
<property name="collectionRef" value="myFetchLargeResultQualifiedEntityPatterns" />
<property name="targetRef" value="blFetchLargeResultQualifiedEntityPatterns" />
</bean>
Not only can the list grid be enhanced for default retrieval, it can also be enhanced to force a search when a default retrieval is still too slow. This might be useful in a case where a very large result set is still causing slowness (even with the fetch large result set functionality discussed above). In such a case, it is unlikely the desired record to update is located in the first page of results and the user is likely to need to utilize a list grid search to filter on the desired target, so there's no reason to accept the cost of the original default fetch. In this case, you can use the "promptSearch" property to only retrieve list grid records when an active user search filter is engaged. Here's example configuration:
<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="org\.broadleafcommerce\.cms\.structure\.domain\.StructuredContentImpl"/>
</bean>
<bean class="com.broadleafcommerce.enterprise.workflow.admin.persistence.module.FetchLargeResultSetQualifiedEntityPattern">
<property name="regex" value="org\.broadleafcommerce\.cms\.file\.domain\.StaticAsset"/>
</bean>
<bean class="com.broadleafcommerce.enterprise.workflow.admin.persistence.module.FetchLargeResultSetQualifiedEntityPattern">
<property name="regex" value="org\.broadleafcommerce\.core\.catalog\.domain\.Product"/>
<property name="include" value="true"/>
<property name="promptSearch" value="true"/>
</bean>
<bean class="com.broadleafcommerce.enterprise.workflow.admin.persistence.module.FetchLargeResultSetQualifiedEntityPattern">
<property name="regex" value=".*"/>
<property name="include" value="true"/>
</bean>
</list>
</property>
</bean>
<bean class="org.broadleafcommerce.common.extensibility.context.merge.LateStageMergeBeanPostProcessor">
<property name="collectionRef" value="myFetchLargeResultQualifiedEntityPatterns" />
<property name="targetRef" value="blFetchLargeResultQualifiedEntityPatterns" />
</bean>
Here, we've specified the Product list grid should prompt the user to search for records, rather than retrieve the first 50 records by default.
The prompt behavior can be further customized to only prompt for search under certain circumstances using promptSearchDecision. Here's an example of the Product config using a decision:
<bean class="com.broadleafcommerce.enterprise.workflow.admin.persistence.module.FetchLargeResultSetQualifiedEntityPattern">
<property name="regex" value="org\.broadleafcommerce\.core\.catalog\.domain\.Product"/>
<property name="include" value="true"/>
<property name="promptSearch" value="true"/>
<property name="promptSearchDecision">
<bean class="my.company.ProductPromptSearchDecision">
<property name="includedCatalogs">
<list>...</list>
</property>
</bean>
</property>
</bean>
Here, presumably a class exists called my.company.ProductPromptSearchDecision
that implements the PromptSearchDecision
interface and is specifying the prompt search behavior for a specific list of product catalogs.
An at-a-glance view of the issues that were closed in this release
Critical Bugs(1)
- Fixed issue where Order assignment buttons were disabled for all users, regardless of permissions
Major Bugs(3)
- Read-only access in Admin for CSR's is still rendering actionable buttons
- Addressed issue where sku forms where not updating after adding/removing product option
- Fixed issue where an inactive product's product page could still be reached if a user entered in the url in a browser
Minor Bugs(3)
- Remove auto-archival logic introduced in 4.0 for Sku's primary media
- Updating the sandbox ribbon throws an exception when deployed to servlet contexts that are not /admin
- Fixed an issue in role management where clicking on the lookup button on permissions caused an error
Enhancements(3)
- Allow user-driven retry of stuck promotions or deployments
- Support user-driven retry of stuck promotions and deployments
- Large ResultSet and Large Query Volume Performance Improvements
Total Resolved Issues: 10