Class TenantPersistenceHandler
- All Implemented Interfaces:
com.broadleafcommerce.common.messaging.PersistenceHandler
Specialized PersistenceHandler
that listens specifically for repository changes to tenant
domain. This allows other microservices to synchronize changes to tenant hierarchies and
assignments within their local persistent stores. Once the local tenant persistent store is
updated, an ApplicationEvent
is published representing what changed.
As a result of updating this tenant domain, there might also be tenant-discriminated entities
(entities that have TrackableBehavior.CATALOG
or TrackableBehavior.APPLICATION
modifiers on them) that care about this hierarchy. If this is the case, you can listen to the
ApplicationEvent
s that this class publishes:
An example is to synchronize repository domain when a catalog hierarchy is updated:
public class ItemCatalogChangeListener { private final CatalogChangeHelper catalogChangeHelper;Theprivate final ItemRepository<Trackable> itemRepository;
public TestTenantPersistenceHandler(ItemRepository<Trackable> itemRepository,
CatalogChangeHelper catalogChangeHelper) { this.catalogChangeHelper = catalogChangeHelper; this.itemRepository = itemRepository; }@EventListener
protected void updateItems(CatalogChangedEvent changed) { catalogChangeHelper.sync(changed.getCatalog(), itemRepository.getEntityInformation().getJavaType(), changed.getOperationType()); } }
CatalogChangeHelper.sync(Trackable, Class, boolean)
synchronizes the entity-specific
store for any TrackableBehavior.CATALOG
enabled entities.- Author:
- Jeff Fischer, Phillip Verheyden (phillipuniverse)
- See Also:
-
Field Summary
-
Constructor Summary
ConstructorDescriptionTenantPersistenceHandler
(CommonCatalogRepository<Trackable> catalogRepository, CommonApplicationRepository<Trackable> applicationRepository, DomainMapperManager trackingMapper, org.springframework.context.ApplicationEventPublisher eventPublisher, com.fasterxml.jackson.databind.ObjectMapper objectMapper, List<ApplicationDataRouteSupporting> applicationRoutes, List<CatalogDataRouteSupporting> catalogRoutes, org.springframework.core.env.Environment environment) -
Method Summary
Modifier and TypeMethodDescriptioncom.fasterxml.jackson.databind.ObjectMapper
String[]
String[]
The fully qualified class names of application catalog domain type from the tenant service that this tenant listener should look for.String[]
The fully qualified class names of application domain type from the tenant service that this tenant listener should look for.String[]
The fully qualified class names of catalog domain type from the tenant service that this tenant listener should look for.void
protected Trackable
hydrateFromJson
(com.fasterxml.jackson.databind.JsonNode entityJson, Class<?> domainType, com.fasterxml.jackson.databind.ObjectMapper mapper) Create a repository-specific entity instance given a JSON representation.void
init()
protected boolean
protected boolean
boolean
isValidType
(String reportedType, String projectionType) void
processStateChange
(com.fasterxml.jackson.databind.JsonNode entityJson) void
setApplicationCatalogRepository
(CommonMarketplaceApplicationCatalogRepository<Trackable> applicationCatalogRepository) void
setCacheManager
(org.springframework.cache.CacheManager cacheManager) void
setSupportedTenantApplicationCatalogTypes
(String[] supportedTenantApplicationCatalogTypes) The fully qualified class names of application catalog domain type from the tenant service that this tenant listener should look for.void
setSupportedTenantApplicationTypes
(String[] supportedTenantApplicationTypes) The fully qualified class names of application domain type from the tenant service that this tenant listener should look for.void
setSupportedTenantCatalogTypes
(String[] supportedTenantCatalogTypes) The fully qualified class names of catalog domain type from the tenant service that this tenant listener should look for.protected void
updateCache
(Trackable existingInstance) Update Spring CacheManager to groom caches related to this entity persistenceMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface com.broadleafcommerce.common.messaging.PersistenceHandler
handle, validate
-
Field Details
-
JPA_TENANT_APPLICATION_TYPE
- See Also:
-
JPA_TENANT_CATALOG_TYPE
- See Also:
-
JPA_TENANT_MARKETPLACE_APPLICATION_CATALOG_TYPE
- See Also:
-
-
Constructor Details
-
TenantPersistenceHandler
public TenantPersistenceHandler(CommonCatalogRepository<Trackable> catalogRepository, CommonApplicationRepository<Trackable> applicationRepository, DomainMapperManager trackingMapper, org.springframework.context.ApplicationEventPublisher eventPublisher, com.fasterxml.jackson.databind.ObjectMapper objectMapper, List<ApplicationDataRouteSupporting> applicationRoutes, List<CatalogDataRouteSupporting> catalogRoutes, org.springframework.core.env.Environment environment)
-
-
Method Details
-
init
@PostConstruct public void init() -
hook
- Specified by:
hook
in interfacecom.broadleafcommerce.common.messaging.PersistenceHandler
-
setCacheManager
@Autowired public void setCacheManager(@Nullable org.springframework.cache.CacheManager cacheManager) -
processStateChange
public void processStateChange(com.fasterxml.jackson.databind.JsonNode entityJson) - Specified by:
processStateChange
in interfacecom.broadleafcommerce.common.messaging.PersistenceHandler
-
isApplicationProcessingValid
protected boolean isApplicationProcessingValid() -
isCatalogProcessingValid
protected boolean isCatalogProcessingValid() -
ignoreRoutes
-
isValidType
- Specified by:
isValidType
in interfacecom.broadleafcommerce.common.messaging.PersistenceHandler
-
getObjectMapper
public com.fasterxml.jackson.databind.ObjectMapper getObjectMapper()- Specified by:
getObjectMapper
in interfacecom.broadleafcommerce.common.messaging.PersistenceHandler
-
getSupportedSimpleTypeNames
- Specified by:
getSupportedSimpleTypeNames
in interfacecom.broadleafcommerce.common.messaging.PersistenceHandler
-
getSupportedTenantApplicationTypes
The fully qualified class names of application domain type from the tenant service that this tenant listener should look for. By default, this will beJPA_TENANT_APPLICATION_TYPE
If an extension of the application domain has been created for the tenant service, then that fully qualified classname should be set on a bean override or this handler.- Returns:
- The one or more application domain types from the tenant service for which sync is supported. Normally, end implementations need only declare the single type they've overridden.
-
setSupportedTenantApplicationTypes
The fully qualified class names of application domain type from the tenant service that this tenant listener should look for. By default, this will beJPA_TENANT_APPLICATION_TYPE
. If an extension of the application domain has been created for the tenant service, then that fully qualified classname should be set on a bean override or this handler.- Parameters:
supportedTenantApplicationTypes
- The one or more application domain types from the tenant service for which sync is supported. Normally, end implementations need only declare the single type they've overridden.
-
getSupportedTenantApplicationCatalogTypes
The fully qualified class names of application catalog domain type from the tenant service that this tenant listener should look for. By default, this will beJPA_TENANT_MARKETPLACE_APPLICATION_CATALOG_TYPE
. If an extension of the application domain has been created for the tenant service, then that fully qualified classname should be set on a bean override or this handler.- Returns:
- The one or more application catalog domain types from the tenant service for which sync is supported. Normally, end implementations need only declare the single type they've overridden.
-
setSupportedTenantApplicationCatalogTypes
public void setSupportedTenantApplicationCatalogTypes(String[] supportedTenantApplicationCatalogTypes) The fully qualified class names of application catalog domain type from the tenant service that this tenant listener should look for. By default, this will beJPA_TENANT_MARKETPLACE_APPLICATION_CATALOG_TYPE
. If an extension of the application domain has been created for the tenant service, then that fully qualified classname should be set on a bean override or this handler.- Parameters:
supportedTenantApplicationCatalogTypes
- The one or more application catalog domain types from the tenant service for which sync is supported. Normally, end implementations need only declare the single type they've overridden.
-
getSupportedTenantCatalogTypes
The fully qualified class names of catalog domain type from the tenant service that this tenant listener should look for. By default, this will beJPA_TENANT_CATALOG_TYPE
. If an extension of the catalog domain has been created for the tenant service, then that fully qualified classname should be set on a bean override or this handler.- Returns:
- The one or more catalog domain types from the tenant service for which sync is supported. Normally, end implementations need only declare the single type they've overridden.
-
setSupportedTenantCatalogTypes
The fully qualified class names of catalog domain type from the tenant service that this tenant listener should look for. By default, this will beJPA_TENANT_CATALOG_TYPE
. If an extension of the catalog domain has been created for the tenant service, then that fully qualified classname should be set on a bean override or this handler.- Parameters:
supportedTenantCatalogTypes
- The one or more catalog domain types from the tenant service for which sync is supported. Normally, end implementations need only declare the single type they've overridden.
-
updateCache
Update Spring CacheManager to groom caches related to this entity persistence- Parameters:
existingInstance
- The tenant related entity being persisted
-
hydrateFromJson
protected Trackable hydrateFromJson(com.fasterxml.jackson.databind.JsonNode entityJson, Class<?> domainType, com.fasterxml.jackson.databind.ObjectMapper mapper) Create a repository-specific entity instance given a JSON representation.- Parameters:
entityJson
- The JSON representation of the entitydomainType
- The repository specific domain class typemapper
- The Jackson mapper instance that can facilitate conversion- Returns:
- The instantiated and fully-populated entity instance
-
setApplicationCatalogRepository
@Autowired public void setApplicationCatalogRepository(@Nullable CommonMarketplaceApplicationCatalogRepository<Trackable> applicationCatalogRepository)
-