@Component(value="blMultiTenantTemplateOnlyQueryExtensionHandler")
public class MultiTenantTemplateOnlyQueryExtensionHandler
extends org.broadleafcommerce.common.extension.AbstractExtensionHandler
implements org.broadleafcommerce.common.extension.TemplateOnlyQueryExtensionHandler
SparseTranslationOverrideStrategy for
an example.
In non-complex catalog scenarios, it is possible to emit the template catalog query for an item
using a single catalog based on the catalog of a test object. The presumption is that if a template hit exists, it will
be in the same catalog as the test object. Take a translation example. If the template translation is created for a template sku
name and the translation will always be in the same catalog as the template sku, then this is a safe assumption. This allows
for multiple site that share items from the same catalog to emit the same query for that item (i.e. to catalog mix differences),
which can create query cache savings and cause fewer trips to the database. The testObject param should only be included
when confident that the target object will always be in the same catalog.
A similar optimization exists for site discriminated associations. If the target item is guaranteed to be in the same
site as the association, the query can be optimized against that single site. This can lead to reusable queries across
standard sites that share a profile, for example.
Review refineParameterRetrieve(Class, Object, CriteriaBuilder, CriteriaQuery, Root, List) and
refineQuery(Class, Object, TypedQuery). These methods provide the testObject that allows the behavior to be activated.TemplateOnlyQueryExtensionHandler| Modifier and Type | Field and Description |
|---|---|
protected org.broadleafcommerce.common.util.dao.DynamicDaoHelper |
daoHelper |
protected javax.persistence.EntityManager |
em |
protected List<org.broadleafcommerce.common.extension.ExtensionManager<org.broadleafcommerce.common.extension.TemplateOnlyQueryExtensionHandler>> |
extensionManagers |
protected MultiTenantDao |
multiTenantDao |
| Constructor and Description |
|---|
MultiTenantTemplateOnlyQueryExtensionHandler() |
| Modifier and Type | Method and Description |
|---|---|
org.broadleafcommerce.common.extension.ExtensionResultStatusType |
breakdown(Class<?> type) |
protected void |
buildCatalogRestrictions(Object testObject,
javax.persistence.criteria.CriteriaBuilder builder,
javax.persistence.criteria.Root root,
javax.persistence.criteria.CriteriaQuery criteria,
List<javax.persistence.criteria.Predicate> restrictions,
MultiTenantSite currentSite) |
protected void |
buildCatalogRestrictions(Object testObject,
MultiTenantSite currentSite,
javax.persistence.TypedQuery query) |
protected void |
buildProfileRestrictions(javax.persistence.criteria.CriteriaBuilder builder,
javax.persistence.criteria.Root root,
List<javax.persistence.criteria.Predicate> restrictions,
MultiTenantSite currentSite) |
protected void |
buildProfileRestrictions(MultiTenantSite currentSite,
javax.persistence.TypedQuery query) |
protected void |
buildSiteRestrictions(Object testObject,
javax.persistence.criteria.CriteriaBuilder builder,
javax.persistence.criteria.Root root,
List<javax.persistence.criteria.Predicate> restrictions,
org.broadleafcommerce.common.site.domain.Site currentSite) |
protected void |
buildSiteRestrictions(Object testObject,
org.broadleafcommerce.common.site.domain.Site currentSite,
javax.persistence.TypedQuery query) |
org.broadleafcommerce.common.extension.ExtensionResultStatusType |
buildStatus(Object entity,
org.broadleafcommerce.common.extension.ExtensionResultHolder<org.broadleafcommerce.common.extension.ItemStatus> response) |
protected void |
buildStatusRestrictions(javax.persistence.criteria.CriteriaBuilder builder,
javax.persistence.criteria.Root root,
List<javax.persistence.criteria.Predicate> restrictions) |
org.broadleafcommerce.common.extension.ExtensionResultStatusType |
filterResults(Class<?> type,
Object testObject,
List results) |
protected Long |
getEntityId(Object entity) |
protected org.broadleafcommerce.common.util.Tuple<Long,Long> |
getNormalizedIdPair(Object testObject) |
int |
getPriority() |
void |
init() |
protected boolean |
isQualified(Class<?> type) |
org.broadleafcommerce.common.extension.ExtensionResultStatusType |
isValidState(org.broadleafcommerce.common.extension.ExtensionResultHolder<Boolean> response) |
org.broadleafcommerce.common.extension.ExtensionResultStatusType |
refineOrder(Class<?> type,
javax.persistence.criteria.CriteriaBuilder builder,
javax.persistence.criteria.CriteriaQuery criteria,
javax.persistence.criteria.Root root,
List<javax.persistence.criteria.Order> sorts) |
org.broadleafcommerce.common.extension.ExtensionResultStatusType |
refineParameterRetrieve(Class<?> type,
Object testObject,
javax.persistence.criteria.CriteriaBuilder builder,
javax.persistence.criteria.CriteriaQuery criteria,
javax.persistence.criteria.Root root,
List<javax.persistence.criteria.Predicate> restrictions) |
org.broadleafcommerce.common.extension.ExtensionResultStatusType |
refineQuery(Class<?> type,
Object testObject,
javax.persistence.TypedQuery query) |
org.broadleafcommerce.common.extension.ExtensionResultStatusType |
setup(Class<?> type) |
isEnabled, setEnabled, setPriorityprotected javax.persistence.EntityManager em
protected MultiTenantDao multiTenantDao
protected org.broadleafcommerce.common.util.dao.DynamicDaoHelper daoHelper
protected List<org.broadleafcommerce.common.extension.ExtensionManager<org.broadleafcommerce.common.extension.TemplateOnlyQueryExtensionHandler>> extensionManagers
public MultiTenantTemplateOnlyQueryExtensionHandler()
@PostConstruct public void init()
public org.broadleafcommerce.common.extension.ExtensionResultStatusType refineQuery(Class<?> type, Object testObject, javax.persistence.TypedQuery query)
refineQuery in interface org.broadleafcommerce.common.extension.TemplateOnlyQueryExtensionHandlerpublic org.broadleafcommerce.common.extension.ExtensionResultStatusType refineParameterRetrieve(Class<?> type, Object testObject, javax.persistence.criteria.CriteriaBuilder builder, javax.persistence.criteria.CriteriaQuery criteria, javax.persistence.criteria.Root root, List<javax.persistence.criteria.Predicate> restrictions)
refineParameterRetrieve in interface org.broadleafcommerce.common.extension.TemplateOnlyQueryExtensionHandlerpublic org.broadleafcommerce.common.extension.ExtensionResultStatusType refineOrder(Class<?> type, javax.persistence.criteria.CriteriaBuilder builder, javax.persistence.criteria.CriteriaQuery criteria, javax.persistence.criteria.Root root, List<javax.persistence.criteria.Order> sorts)
refineOrder in interface org.broadleafcommerce.common.extension.TemplateOnlyQueryExtensionHandlerpublic org.broadleafcommerce.common.extension.ExtensionResultStatusType setup(Class<?> type)
setup in interface org.broadleafcommerce.common.extension.TemplateOnlyQueryExtensionHandlerpublic org.broadleafcommerce.common.extension.ExtensionResultStatusType breakdown(Class<?> type)
breakdown in interface org.broadleafcommerce.common.extension.TemplateOnlyQueryExtensionHandlerpublic org.broadleafcommerce.common.extension.ExtensionResultStatusType isValidState(org.broadleafcommerce.common.extension.ExtensionResultHolder<Boolean> response)
isValidState in interface org.broadleafcommerce.common.extension.TemplateOnlyQueryExtensionHandlerpublic int getPriority()
getPriority in interface org.broadleafcommerce.common.extension.ExtensionHandlergetPriority in class org.broadleafcommerce.common.extension.AbstractExtensionHandlerpublic org.broadleafcommerce.common.extension.ExtensionResultStatusType buildStatus(Object entity, org.broadleafcommerce.common.extension.ExtensionResultHolder<org.broadleafcommerce.common.extension.ItemStatus> response)
buildStatus in interface org.broadleafcommerce.common.extension.TemplateOnlyQueryExtensionHandlerpublic org.broadleafcommerce.common.extension.ExtensionResultStatusType filterResults(Class<?> type, Object testObject, List results)
filterResults in interface org.broadleafcommerce.common.extension.TemplateOnlyQueryExtensionHandlerprotected boolean isQualified(Class<?> type)
protected void buildStatusRestrictions(javax.persistence.criteria.CriteriaBuilder builder,
javax.persistence.criteria.Root root,
List<javax.persistence.criteria.Predicate> restrictions)
protected void buildCatalogRestrictions(Object testObject, MultiTenantSite currentSite, javax.persistence.TypedQuery query)
protected org.broadleafcommerce.common.util.Tuple<Long,Long> getNormalizedIdPair(Object testObject)
protected void buildCatalogRestrictions(Object testObject, javax.persistence.criteria.CriteriaBuilder builder, javax.persistence.criteria.Root root, javax.persistence.criteria.CriteriaQuery criteria, List<javax.persistence.criteria.Predicate> restrictions, MultiTenantSite currentSite)
protected void buildProfileRestrictions(MultiTenantSite currentSite, javax.persistence.TypedQuery query)
protected void buildProfileRestrictions(javax.persistence.criteria.CriteriaBuilder builder,
javax.persistence.criteria.Root root,
List<javax.persistence.criteria.Predicate> restrictions,
MultiTenantSite currentSite)
protected void buildSiteRestrictions(Object testObject, org.broadleafcommerce.common.site.domain.Site currentSite, javax.persistence.TypedQuery query)
Copyright © 2020. All rights reserved.