Package de.hybris.platform.core
Class AbstractTenant
- java.lang.Object
-
- de.hybris.platform.core.AbstractTenant
-
- All Implemented Interfaces:
DataSourceProvider,Tenant,java.io.Serializable
- Direct Known Subclasses:
MasterTenant,SlaveTenant,TestTenantStub
public abstract class AbstractTenant extends java.lang.Object implements Tenant, java.io.Serializable
- See Also:
- Serialized Form
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static interfaceAbstractTenant.CodeWrapperprotected static classAbstractTenant.DataSourceHolderprotected static classAbstractTenant.DataSourceSelectionstatic classAbstractTenant.ShutDownModestatic classAbstractTenant.StateclassAbstractTenant.TenantNotYetStartedException
-
Field Summary
Fields Modifier and Type Field Description static java.lang.StringALT_DATASOURCEstatic java.lang.StringMASTER_DATASOURCE_IDstatic java.lang.StringSLAVE_DATASOURCE
-
Constructor Summary
Constructors Modifier Constructor Description protectedAbstractTenant(java.lang.String tenantID)
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Deprecated Methods Modifier and Type Method Description protected voidactivateAlternativeDataSource(java.lang.String id, boolean asMaster)voidactivateAlternativeMasterDataSource(java.lang.String id)Switches to a specified (by the id) master data source for the current thread.java.lang.StringactivateSlaveDataSource()Switches to a slave data source for the current thread.voidactivateSlaveDataSource(java.lang.String id)Switches to a specified (by the id) slave data source for the current thread.protected voidassertTenant(JaloSession session)protected voidassureTypeSystemStructureIsUpToDate()protected voidbackgroundThreadFinished(java.lang.Thread thread, java.lang.Runnable payload)protected voidbackgroundThreadStarted(java.lang.Thread thread, java.lang.Runnable payload)voidcancelForceMasterMode()Be careful! This method is intended for internal testing.protected booleancannotAccess()booleancannotConnect()protected booleancanSwitch(AbstractTenant.DataSourceSelection currentSelection, boolean toMaster)voidclearConnectionHasBeenBroken()booleanconnectionHasBeenBroken()protected HybrisDataSourcecreateAlternativeDataSource(DataSourceFactory factory, java.lang.String id, java.util.Map<java.lang.String,java.lang.String> params, boolean readOnly)protected java.util.List<AbstractTenant.DataSourceHolder>createAlternativeDataSources(DataSourceFactory defaultFactory, ConfigIntf cfg, java.util.Collection<HybrisDataSource> createdForRollback)java.lang.ThreadcreateAndRegisterBackgroundThread(java.lang.Runnable payload, java.util.concurrent.ThreadFactory factory)protected CachecreateCache()protected DataSourceFactorycreateDataSourceFactory(ConfigIntf cfg)protected DataSourceFactorycreateDataSourceFactory(java.lang.String className)static ThreadPoolcreateDefaultThreadPool(java.lang.String tenantID, int poolSize)protected HybrisDataSourcecreateMasterDataSource(DataSourceFactory factory)voiddeactivateAlternativeDataSource()After a alternative slave or master data source has been activated for the current thread it's necessary to de-activate it again! After this the base master data source is active (again).voiddeactivateSlaveDataSource()After slave data source has been activated for the current thread it's necessary to de-activate it again! After this the master data source is active (again).protected voiddoInitialize()voiddoShutDown()voiddoStartUp()booleanequals(java.lang.Object o)protected voidexecuteInitsIfNecessary()Performs calling Init.Init() for all registered init instances and also performsTenantListener.afterTenantStartUp(Tenant)notification.static java.util.Map<java.lang.String,java.lang.String>extractCustomDBParams(ConfigIntf cfg)static java.util.Map<java.lang.String,java.lang.String>extractCustomDBParams(ConfigIntf cfg, boolean stripPrefix)static java.util.Map<java.lang.String,java.lang.String>extractCustomDBParams(java.util.Map<java.lang.String,java.lang.String> map)static java.util.Map<java.lang.String,java.lang.String>extractCustomDBParams(java.util.Map<java.lang.String,java.lang.String> map, boolean stripPrefix)voidforceMasterDataSource()Enforces the usage of a master data source for all subsequent calls toDataSourceProvider.getDataSource()no matter if a slave data source has been activated or not.JaloSessiongetActiveSession()java.util.List<SessionContext>getActiveSessionContextList()protected java.util.Collection<HybrisDataSource>getAllAlternativeDataSources(boolean asMaster)java.util.Set<java.lang.String>getAllAlternativeMasterDataSourceIDs()Provides IDs of all available alternative master data sources.java.util.Collection<HybrisDataSource>getAllAlternativeMasterDataSources()Returns all known alternative master data sources as Collection.protected java.util.Set<java.lang.String>getAllAlterntiveDataSourceIDs(boolean asMaster)java.util.Set<java.lang.String>getAllDataSourceIDs()java.util.Set<java.lang.String>getAllSlaveDataSourceIDs()Provides IDs of all available slave data sources.java.util.Collection<HybrisDataSource>getAllSlaveDataSources()Returns all known slave data sources as Collection.CachegetCache()intgetClusterID()Deprecated.since ages - UseRegistry.getClusterID()instead.abstract ConfigIntfgetConfig()static TenantgetCurrentTenant()HybrisDataSourcegetDataSource()Returns currently active data source.HybrisDataSourcegetDataSource(java.lang.String className)Returns new data source.longgetDynamicClusterNodeID()InvalidationManagergetInvalidationManager()JaloConnectiongetJaloConnection()HybrisDataSourcegetMasterDataSource()Returns master data source no matter which one is currently active.protected AbstractTenant.DataSourceSelectiongetNextSlave()Returns the next availableAbstractTenant.DataSourceSelectionPersistenceManagergetPersistenceManager()PersistencePoolgetPersistencePool()SerialNumberGeneratorgetSerialNumberGenerator()SingletonCreatorgetSingletonCreator()AbstractTenant.StategetState()protected java.lang.StringgetStateInfo()SystemEJBgetSystemEJB()java.lang.StringgetTenantID()longgetTenantRestartMarker()abstract java.util.List<java.lang.String>getTenantSpecificExtensionNames()ThreadPoolgetThreadPool()ThreadPoolgetWorkersThreadPool()inthashCode()protected voidinitializeCache(HybrisDataSource masterDataSource)booleanisAlternativeMasterDataSource()Tells whether the current active data source is a alternative master data source.booleanisClusteringEnabled()checks if clustermode is enabledbooleanisForceMaster()If on the current data source (slave/master) the methodDataSourceProvider.forceMasterDataSource()was called then this method returns true.booleanisNotifiyingListeners()booleanisSlaveDataSource()Tells whether current data source is a slave data source.booleanisStarting()booleanisStopping()protected java.util.Map<java.lang.String,java.lang.String>mergeSlaveDataSourceParameter(java.lang.String dsID, java.util.Map<java.lang.String,java.lang.String> tenantSettings, java.lang.String... keys)protected java.lang.ObjectperformWithinOwnSystem(AbstractTenant.CodeWrapper wrapper)MSSQLServerTransactionParametersreadParameters(javax.sql.DataSource dataSource)Checks READ_COMMITTED_SNAPSHOT and ALLOW_SNAPSHOT_ISOLATION parameters for MS SQL Serverprotected voidrelaseAdministrationLockIfNeeded(HybrisDataSource masterDataSource)Tries to release administration lock if lock was acquired by thisgetClusterID()node.voidresetTenantRestartMarker()voidsetActiveSessionForCurrentThread(JaloSession session)protected voidsetState(AbstractTenant.State state)voidsetSystemInit(java.lang.Boolean state)voidsetTenantID(java.lang.String id)abstract voidshutDown()protected voidshutdownCache(AbstractTenant.ShutDownMode mode)abstract voidstartUp()java.lang.StringtoString()java.lang.ObjectwriteReplace()-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface de.hybris.platform.core.Tenant
getAllItemLifecycleListeners, getTenantSpecificLocale, getTenantSpecificTimeZone
-
-
-
-
Field Detail
-
SLAVE_DATASOURCE
public static final java.lang.String SLAVE_DATASOURCE
- See Also:
- Constant Field Values
-
ALT_DATASOURCE
public static final java.lang.String ALT_DATASOURCE
- See Also:
- Constant Field Values
-
MASTER_DATASOURCE_ID
public static final java.lang.String MASTER_DATASOURCE_ID
- See Also:
- Constant Field Values
-
-
Method Detail
-
getTenantSpecificExtensionNames
public abstract java.util.List<java.lang.String> getTenantSpecificExtensionNames()
- Specified by:
getTenantSpecificExtensionNamesin interfaceTenant
-
getConfig
public abstract ConfigIntf getConfig()
-
startUp
public abstract void startUp() throws ConsistencyCheckException- Throws:
ConsistencyCheckException
-
shutDown
public abstract void shutDown()
-
getCurrentTenant
public static Tenant getCurrentTenant()
-
setSystemInit
public void setSystemInit(java.lang.Boolean state)
-
getTenantRestartMarker
public long getTenantRestartMarker()
- Returns:
- a time stamp marker when current tenant was created/restarted for the last time. If no restart occurred points to creation time.
-
doInitialize
protected void doInitialize()
-
relaseAdministrationLockIfNeeded
protected void relaseAdministrationLockIfNeeded(HybrisDataSource masterDataSource)
Tries to release administration lock if lock was acquired by thisgetClusterID()node.
-
initializeCache
protected void initializeCache(HybrisDataSource masterDataSource)
-
readParameters
public MSSQLServerTransactionParameters readParameters(javax.sql.DataSource dataSource)
Checks READ_COMMITTED_SNAPSHOT and ALLOW_SNAPSHOT_ISOLATION parameters for MS SQL Server
-
doStartUp
public final void doStartUp() throws ConsistencyCheckException- Throws:
ConsistencyCheckException
-
assureTypeSystemStructureIsUpToDate
protected void assureTypeSystemStructureIsUpToDate()
-
doShutDown
public final void doShutDown()
-
shutdownCache
protected void shutdownCache(AbstractTenant.ShutDownMode mode)
-
executeInitsIfNecessary
protected final void executeInitsIfNecessary()
Performs calling Init.Init() for all registered init instances and also performsTenantListener.afterTenantStartUp(Tenant)notification. Both is working in a thread-safe non-blocking mode now.
-
cannotAccess
protected final boolean cannotAccess()
-
getStateInfo
protected java.lang.String getStateInfo()
-
getState
public final AbstractTenant.State getState()
-
setState
protected final void setState(AbstractTenant.State state)
-
getTenantID
public java.lang.String getTenantID()
- Specified by:
getTenantIDin interfaceTenant
-
setTenantID
public void setTenantID(java.lang.String id)
-
toString
public java.lang.String toString()
- Overrides:
toStringin classjava.lang.Object
-
getDataSource
public HybrisDataSource getDataSource(java.lang.String className)
Description copied from interface:DataSourceProviderReturns new data source. (experimental (related to PLA-7861))- Specified by:
getDataSourcein interfaceDataSourceProvider
-
getDataSource
public HybrisDataSource getDataSource()
Description copied from interface:DataSourceProviderReturns currently active data source.- Specified by:
getDataSourcein interfaceDataSourceProvider
-
cancelForceMasterMode
public void cancelForceMasterMode()
Be careful! This method is intended for internal testing. Generally it's not recommended to cancel forceMaster mode since this would bear the danger of seeing stale data due to switching to slave data source is possible again.
-
forceMasterDataSource
public void forceMasterDataSource()
Description copied from interface:DataSourceProviderEnforces the usage of a master data source for all subsequent calls toDataSourceProvider.getDataSource()no matter if a slave data source has been activated or not.Please note that this does not affect chosen alternative master data sources. If you want to switch back to the main master data source use
DataSourceProvider.deactivateAlternativeDataSource().- Specified by:
forceMasterDataSourcein interfaceDataSourceProvider
-
createDataSourceFactory
protected DataSourceFactory createDataSourceFactory(java.lang.String className)
-
createDataSourceFactory
protected DataSourceFactory createDataSourceFactory(ConfigIntf cfg)
-
getMasterDataSource
public HybrisDataSource getMasterDataSource()
Description copied from interface:DataSourceProviderReturns master data source no matter which one is currently active.- Specified by:
getMasterDataSourcein interfaceDataSourceProvider
-
deactivateSlaveDataSource
public void deactivateSlaveDataSource()
Description copied from interface:DataSourceProviderAfter slave data source has been activated for the current thread it's necessary to de-activate it again! After this the master data source is active (again).- Specified by:
deactivateSlaveDataSourcein interfaceDataSourceProvider- See Also:
DataSourceProvider.activateSlaveDataSource()
-
deactivateAlternativeDataSource
public void deactivateAlternativeDataSource()
Description copied from interface:DataSourceProviderAfter a alternative slave or master data source has been activated for the current thread it's necessary to de-activate it again! After this the base master data source is active (again).- Specified by:
deactivateAlternativeDataSourcein interfaceDataSourceProvider- See Also:
DataSourceProvider.activateSlaveDataSource(),DataSourceProvider.activateAlternativeMasterDataSource(String)
-
getAllSlaveDataSources
public java.util.Collection<HybrisDataSource> getAllSlaveDataSources()
Description copied from interface:DataSourceProviderReturns all known slave data sources as Collection.- Specified by:
getAllSlaveDataSourcesin interfaceDataSourceProvider- Returns:
- a
SetwithHybrisDataSourceobjects
-
getAllAlternativeDataSources
protected java.util.Collection<HybrisDataSource> getAllAlternativeDataSources(boolean asMaster)
-
getAllAlternativeMasterDataSources
public java.util.Collection<HybrisDataSource> getAllAlternativeMasterDataSources()
Description copied from interface:DataSourceProviderReturns all known alternative master data sources as Collection.- Specified by:
getAllAlternativeMasterDataSourcesin interfaceDataSourceProvider- Returns:
- a
SetwithHybrisDataSourceobjects
-
getAllDataSourceIDs
public java.util.Set<java.lang.String> getAllDataSourceIDs()
- Specified by:
getAllDataSourceIDsin interfaceDataSourceProvider
-
getAllAlterntiveDataSourceIDs
protected java.util.Set<java.lang.String> getAllAlterntiveDataSourceIDs(boolean asMaster)
-
getAllSlaveDataSourceIDs
public java.util.Set<java.lang.String> getAllSlaveDataSourceIDs()
Description copied from interface:DataSourceProviderProvides IDs of all available slave data sources.- Specified by:
getAllSlaveDataSourceIDsin interfaceDataSourceProvider
-
getAllAlternativeMasterDataSourceIDs
public java.util.Set<java.lang.String> getAllAlternativeMasterDataSourceIDs()
Description copied from interface:DataSourceProviderProvides IDs of all available alternative master data sources.- Specified by:
getAllAlternativeMasterDataSourceIDsin interfaceDataSourceProvider
-
activateSlaveDataSource
public java.lang.String activateSlaveDataSource()
Description copied from interface:DataSourceProviderSwitches to a slave data source for the current thread. If the current data source is already a slave one this has no effect. Use as follows:Tenant t = Registry.getCurrentTenant(); try { t.activateSlaveDataSource(); // ... business logic ... } finally { t.deactivateSlaveSource(); }- Specified by:
activateSlaveDataSourcein interfaceDataSourceProvider- See Also:
DataSourceProvider.deactivateAlternativeDataSource()
-
canSwitch
protected boolean canSwitch(AbstractTenant.DataSourceSelection currentSelection, boolean toMaster)
-
activateSlaveDataSource
public void activateSlaveDataSource(java.lang.String id)
Description copied from interface:DataSourceProviderSwitches to a specified (by the id) slave data source for the current thread. If the current data source is already a slave one this has no effect. Use as follows:Tenant t = Registry.getCurrentTenant(); try { t.activateSlaveDataSource("your_slave_id"); // ... business logic ... } finally { t.deactivateSlaveSource(); }- Specified by:
activateSlaveDataSourcein interfaceDataSourceProvider- Parameters:
id- the id string of the slave data source- See Also:
DataSourceProvider.deactivateAlternativeDataSource()
-
activateAlternativeDataSource
protected void activateAlternativeDataSource(java.lang.String id, boolean asMaster)
-
activateAlternativeMasterDataSource
public void activateAlternativeMasterDataSource(java.lang.String id)
Description copied from interface:DataSourceProviderSwitches to a specified (by the id) master data source for the current thread. Use as follows:Tenant t = Registry.getCurrentTenant(); try { t.activateMasterDataSource("your_slave_id"); // ... business logic ... } finally { t.deactivateSlaveSource(); }- Specified by:
activateAlternativeMasterDataSourcein interfaceDataSourceProvider- Parameters:
id- the id string of the slave data source- See Also:
DataSourceProvider.deactivateAlternativeDataSource()
-
isForceMaster
public boolean isForceMaster()
Description copied from interface:DataSourceProviderIf on the current data source (slave/master) the methodDataSourceProvider.forceMasterDataSource()was called then this method returns true. ADataSourceProvider.deactivateAlternativeDataSource()will reset this state.- Specified by:
isForceMasterin interfaceDataSourceProvider- Returns:
- true if the master data source is forced
-
isSlaveDataSource
public boolean isSlaveDataSource()
Description copied from interface:DataSourceProviderTells whether current data source is a slave data source.- Specified by:
isSlaveDataSourcein interfaceDataSourceProvider- Returns:
- true if the
DataSourceProvideris a slave data source
-
isAlternativeMasterDataSource
public boolean isAlternativeMasterDataSource()
Description copied from interface:DataSourceProviderTells whether the current active data source is a alternative master data source.- Specified by:
isAlternativeMasterDataSourcein interfaceDataSourceProvider
-
getNextSlave
protected AbstractTenant.DataSourceSelection getNextSlave()
Returns the next availableAbstractTenant.DataSourceSelection- Returns:
- null if no valid slave was found
-
getInvalidationManager
public InvalidationManager getInvalidationManager()
- Specified by:
getInvalidationManagerin interfaceTenant
-
getPersistencePool
public PersistencePool getPersistencePool()
- Specified by:
getPersistencePoolin interfaceTenant
-
getPersistenceManager
public PersistenceManager getPersistenceManager()
- Specified by:
getPersistenceManagerin interfaceTenant
-
getSystemEJB
public SystemEJB getSystemEJB()
- Specified by:
getSystemEJBin interfaceTenant
-
getThreadPool
public ThreadPool getThreadPool()
- Specified by:
getThreadPoolin interfaceTenant
-
getWorkersThreadPool
public ThreadPool getWorkersThreadPool()
- Specified by:
getWorkersThreadPoolin interfaceTenant
-
getSingletonCreator
public SingletonCreator getSingletonCreator()
- Specified by:
getSingletonCreatorin interfaceTenant
-
getSerialNumberGenerator
public SerialNumberGenerator getSerialNumberGenerator()
- Specified by:
getSerialNumberGeneratorin interfaceTenant
-
createDefaultThreadPool
public static ThreadPool createDefaultThreadPool(java.lang.String tenantID, int poolSize)
-
createMasterDataSource
protected HybrisDataSource createMasterDataSource(DataSourceFactory factory)
-
createAlternativeDataSources
protected java.util.List<AbstractTenant.DataSourceHolder> createAlternativeDataSources(DataSourceFactory defaultFactory, ConfigIntf cfg, java.util.Collection<HybrisDataSource> createdForRollback)
-
createAlternativeDataSource
protected HybrisDataSource createAlternativeDataSource(DataSourceFactory factory, java.lang.String id, java.util.Map<java.lang.String,java.lang.String> params, boolean readOnly)
-
mergeSlaveDataSourceParameter
protected java.util.Map<java.lang.String,java.lang.String> mergeSlaveDataSourceParameter(java.lang.String dsID, java.util.Map<java.lang.String,java.lang.String> tenantSettings, java.lang.String... keys)
-
extractCustomDBParams
public static java.util.Map<java.lang.String,java.lang.String> extractCustomDBParams(ConfigIntf cfg)
-
extractCustomDBParams
public static java.util.Map<java.lang.String,java.lang.String> extractCustomDBParams(ConfigIntf cfg, boolean stripPrefix)
-
extractCustomDBParams
public static java.util.Map<java.lang.String,java.lang.String> extractCustomDBParams(java.util.Map<java.lang.String,java.lang.String> map)
-
extractCustomDBParams
public static java.util.Map<java.lang.String,java.lang.String> extractCustomDBParams(java.util.Map<java.lang.String,java.lang.String> map, boolean stripPrefix)
-
createCache
protected Cache createCache()
-
isClusteringEnabled
public boolean isClusteringEnabled()
checks if clustermode is enabled- Returns:
- 'true' ONLY IF the correspondig property is set to 'true' AND the installed licence file supports this feature, too
- Since:
- 4.0.3
-
getClusterID
@Deprecated public int getClusterID()
Deprecated.since ages - UseRegistry.getClusterID()instead. The cluster ID is a global setting and therefore not strictly depending on the current tenant.
-
getDynamicClusterNodeID
public long getDynamicClusterNodeID()
-
performWithinOwnSystem
protected java.lang.Object performWithinOwnSystem(AbstractTenant.CodeWrapper wrapper)
-
getActiveSession
public JaloSession getActiveSession()
- Specified by:
getActiveSessionin interfaceTenant
-
setActiveSessionForCurrentThread
public void setActiveSessionForCurrentThread(JaloSession session)
-
assertTenant
protected void assertTenant(JaloSession session)
-
getActiveSessionContextList
public java.util.List<SessionContext> getActiveSessionContextList()
-
getJaloConnection
public JaloConnection getJaloConnection()
- Specified by:
getJaloConnectionin interfaceTenant
-
cannotConnect
public boolean cannotConnect()
-
connectionHasBeenBroken
public boolean connectionHasBeenBroken()
-
clearConnectionHasBeenBroken
public void clearConnectionHasBeenBroken()
-
writeReplace
public java.lang.Object writeReplace() throws java.io.ObjectStreamException- Throws:
java.io.ObjectStreamException
-
isStarting
public final boolean isStarting()
-
isStopping
public final boolean isStopping()
-
isNotifiyingListeners
public final boolean isNotifiyingListeners()
-
createAndRegisterBackgroundThread
public java.lang.Thread createAndRegisterBackgroundThread(java.lang.Runnable payload, java.util.concurrent.ThreadFactory factory)- Specified by:
createAndRegisterBackgroundThreadin interfaceTenant
-
backgroundThreadStarted
protected void backgroundThreadStarted(java.lang.Thread thread, java.lang.Runnable payload)
-
backgroundThreadFinished
protected void backgroundThreadFinished(java.lang.Thread thread, java.lang.Runnable payload)
-
resetTenantRestartMarker
public void resetTenantRestartMarker()
- Specified by:
resetTenantRestartMarkerin interfaceTenant
-
equals
public boolean equals(java.lang.Object o)
- Overrides:
equalsin classjava.lang.Object
-
hashCode
public int hashCode()
- Overrides:
hashCodein classjava.lang.Object
-
-