public abstract class AbstractTenant extends java.lang.Object implements Tenant, java.io.Serializable
| Modifier and Type | Class and Description |
|---|---|
protected static interface |
AbstractTenant.CodeWrapper |
protected static class |
AbstractTenant.DataSourceHolder |
protected static class |
AbstractTenant.DataSourceSelection |
static class |
AbstractTenant.ShutDownMode |
static class |
AbstractTenant.State |
class |
AbstractTenant.TenantNotYetStartedException |
| Modifier and Type | Field and Description |
|---|---|
static java.lang.String |
ALT_DATASOURCE |
static java.lang.String |
MASTER_DATASOURCE_ID |
static java.lang.String |
SLAVE_DATASOURCE |
| Modifier | Constructor and Description |
|---|---|
protected |
AbstractTenant(java.lang.String tenantID) |
| Modifier and Type | Method and Description |
|---|---|
protected void |
activateAlternativeDataSource(java.lang.String id,
boolean asMaster) |
void |
activateAlternativeMasterDataSource(java.lang.String id)
Switches to a specified (by the id) master data source for the current thread.
|
java.lang.String |
activateSlaveDataSource()
Switches to a slave data source for the current thread.
|
void |
activateSlaveDataSource(java.lang.String id)
Switches to a specified (by the id) slave data source for the current thread.
|
protected void |
assertTenant(JaloSession session) |
protected void |
assureTypeSystemStructureIsUpToDate() |
protected void |
backgroundThreadFinished(java.lang.Thread thread,
java.lang.Runnable payload) |
protected void |
backgroundThreadStarted(java.lang.Thread thread,
java.lang.Runnable payload) |
void |
cancelForceMasterMode()
Be careful! This method is intended for internal testing.
|
protected boolean |
cannotAccess() |
boolean |
cannotConnect() |
protected boolean |
canSwitch(AbstractTenant.DataSourceSelection currentSelection,
boolean toMaster) |
void |
clearConnectionHasBeenBroken() |
boolean |
connectionHasBeenBroken() |
protected HybrisDataSource |
createAlternativeDataSource(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.Thread |
createAndRegisterBackgroundThread(java.lang.Runnable payload,
java.util.concurrent.ThreadFactory factory) |
protected Cache |
createCache() |
protected DataSourceFactory |
createDataSourceFactory(ConfigIntf cfg) |
protected DataSourceFactory |
createDataSourceFactory(java.lang.String className) |
static ThreadPool |
createDefaultThreadPool(java.lang.String tenantID,
int poolSize) |
protected HybrisDataSource |
createMasterDataSource(DataSourceFactory factory) |
void |
deactivateAlternativeDataSource()
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).
|
void |
deactivateSlaveDataSource()
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 void |
doInitialize() |
void |
doShutDown() |
void |
doStartUp() |
boolean |
equals(java.lang.Object o) |
protected void |
executeInitsIfNecessary()
Performs calling Init.Init() for all registered init instances and also performs
TenantListener.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) |
void |
forceMasterDataSource()
Enforces the usage of a master data source for all subsequent calls to
DataSourceProvider.getDataSource() no matter if a
slave data source has been activated or not. |
JaloSession |
getActiveSession() |
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.
|
Cache |
getCache() |
int |
getClusterID()
Deprecated.
since ages - Use
Registry.getClusterID() instead. The cluster ID is a global setting and therefore not
strictly depending on the current tenant. |
abstract ConfigIntf |
getConfig() |
static Tenant |
getCurrentTenant() |
HybrisDataSource |
getDataSource()
Returns currently active data source.
|
HybrisDataSource |
getDataSource(java.lang.String className)
Returns new data source.
|
long |
getDynamicClusterNodeID() |
InvalidationManager |
getInvalidationManager() |
JaloConnection |
getJaloConnection() |
HybrisDataSource |
getMasterDataSource()
Returns master data source no matter which one is currently active.
|
protected AbstractTenant.DataSourceSelection |
getNextSlave()
Returns the next available
AbstractTenant.DataSourceSelection |
PersistenceManager |
getPersistenceManager() |
PersistencePool |
getPersistencePool() |
SerialNumberGenerator |
getSerialNumberGenerator() |
SingletonCreator |
getSingletonCreator() |
AbstractTenant.State |
getState() |
protected java.lang.String |
getStateInfo() |
SystemEJB |
getSystemEJB() |
java.lang.String |
getTenantID() |
long |
getTenantRestartMarker() |
abstract java.util.List<java.lang.String> |
getTenantSpecificExtensionNames() |
ThreadPool |
getThreadPool() |
ThreadPool |
getWorkersThreadPool() |
int |
hashCode() |
protected void |
initializeCache(HybrisDataSource masterDataSource) |
boolean |
isAlternativeMasterDataSource()
Tells whether the current active data source is a alternative master data source.
|
boolean |
isClusteringEnabled()
checks if clustermode is enabled
|
boolean |
isForceMaster()
If on the current data source (slave/master) the method
DataSourceProvider.forceMasterDataSource() was called then this
method returns true. |
boolean |
isNotifiyingListeners() |
boolean |
isSlaveDataSource()
Tells whether current data source is a slave data source.
|
boolean |
isStarting() |
boolean |
isStopping() |
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.Object |
performWithinOwnSystem(AbstractTenant.CodeWrapper wrapper) |
MSSQLServerTransactionParameters |
readParameters(javax.sql.DataSource dataSource)
Checks READ_COMMITTED_SNAPSHOT and ALLOW_SNAPSHOT_ISOLATION parameters for MS SQL Server
|
protected void |
relaseAdministrationLockIfNeeded(HybrisDataSource masterDataSource)
Tries to release administration lock if lock was acquired by this
getClusterID() node. |
void |
resetTenantRestartMarker() |
void |
setActiveSessionForCurrentThread(JaloSession session) |
protected void |
setState(AbstractTenant.State state) |
void |
setSystemInit(java.lang.Boolean state) |
void |
setTenantID(java.lang.String id) |
abstract void |
shutDown() |
protected void |
shutdownCache(AbstractTenant.ShutDownMode mode) |
abstract void |
startUp() |
java.lang.String |
toString() |
java.lang.Object |
writeReplace() |
clone, finalize, getClass, notify, notifyAll, wait, wait, waitgetAllItemLifecycleListeners, getTenantSpecificLocale, getTenantSpecificTimeZonepublic static final java.lang.String SLAVE_DATASOURCE
public static final java.lang.String ALT_DATASOURCE
public static final java.lang.String MASTER_DATASOURCE_ID
public abstract java.util.List<java.lang.String> getTenantSpecificExtensionNames()
getTenantSpecificExtensionNames in interface Tenantpublic abstract ConfigIntf getConfig()
public abstract void startUp()
throws ConsistencyCheckException
ConsistencyCheckExceptionpublic abstract void shutDown()
public static Tenant getCurrentTenant()
public void setSystemInit(java.lang.Boolean state)
public long getTenantRestartMarker()
protected void doInitialize()
protected void relaseAdministrationLockIfNeeded(HybrisDataSource masterDataSource)
getClusterID() node.protected void initializeCache(HybrisDataSource masterDataSource)
public MSSQLServerTransactionParameters readParameters(javax.sql.DataSource dataSource)
public final void doStartUp()
throws ConsistencyCheckException
ConsistencyCheckExceptionprotected void assureTypeSystemStructureIsUpToDate()
public final void doShutDown()
protected void shutdownCache(AbstractTenant.ShutDownMode mode)
protected final void executeInitsIfNecessary()
TenantListener.afterTenantStartUp(Tenant) notification.
Both is working in a thread-safe non-blocking mode now.protected final boolean cannotAccess()
protected java.lang.String getStateInfo()
public final AbstractTenant.State getState()
protected final void setState(AbstractTenant.State state)
public java.lang.String getTenantID()
getTenantID in interface Tenantpublic void setTenantID(java.lang.String id)
public java.lang.String toString()
toString in class java.lang.Objectpublic HybrisDataSource getDataSource(java.lang.String className)
DataSourceProvidergetDataSource in interface DataSourceProviderpublic HybrisDataSource getDataSource()
DataSourceProvidergetDataSource in interface DataSourceProviderpublic void cancelForceMasterMode()
public void forceMasterDataSource()
DataSourceProviderDataSourceProvider.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().forceMasterDataSource in interface DataSourceProviderprotected DataSourceFactory createDataSourceFactory(java.lang.String className)
protected DataSourceFactory createDataSourceFactory(ConfigIntf cfg)
public HybrisDataSource getMasterDataSource()
DataSourceProvidergetMasterDataSource in interface DataSourceProviderpublic void deactivateSlaveDataSource()
DataSourceProviderdeactivateSlaveDataSource in interface DataSourceProviderDataSourceProvider.activateSlaveDataSource()public void deactivateAlternativeDataSource()
DataSourceProviderdeactivateAlternativeDataSource in interface DataSourceProviderDataSourceProvider.activateSlaveDataSource(),
DataSourceProvider.activateAlternativeMasterDataSource(String)public java.util.Collection<HybrisDataSource> getAllSlaveDataSources()
DataSourceProvidergetAllSlaveDataSources in interface DataSourceProviderSet with HybrisDataSource objectsprotected java.util.Collection<HybrisDataSource> getAllAlternativeDataSources(boolean asMaster)
public java.util.Collection<HybrisDataSource> getAllAlternativeMasterDataSources()
DataSourceProvidergetAllAlternativeMasterDataSources in interface DataSourceProviderSet with HybrisDataSource objectspublic java.util.Set<java.lang.String> getAllDataSourceIDs()
getAllDataSourceIDs in interface DataSourceProviderprotected java.util.Set<java.lang.String> getAllAlterntiveDataSourceIDs(boolean asMaster)
public java.util.Set<java.lang.String> getAllSlaveDataSourceIDs()
DataSourceProvidergetAllSlaveDataSourceIDs in interface DataSourceProviderpublic java.util.Set<java.lang.String> getAllAlternativeMasterDataSourceIDs()
DataSourceProvidergetAllAlternativeMasterDataSourceIDs in interface DataSourceProviderpublic java.lang.String activateSlaveDataSource()
DataSourceProvider
Tenant t = Registry.getCurrentTenant();
try
{
t.activateSlaveDataSource();
// ... business logic ...
}
finally
{
t.deactivateSlaveSource();
}
activateSlaveDataSource in interface DataSourceProviderDataSourceProvider.deactivateAlternativeDataSource()protected boolean canSwitch(AbstractTenant.DataSourceSelection currentSelection, boolean toMaster)
public void activateSlaveDataSource(java.lang.String id)
DataSourceProvider
Tenant t = Registry.getCurrentTenant();
try
{
t.activateSlaveDataSource("your_slave_id");
// ... business logic ...
}
finally
{
t.deactivateSlaveSource();
}
activateSlaveDataSource in interface DataSourceProviderid - the id string of the slave data sourceDataSourceProvider.deactivateAlternativeDataSource()protected void activateAlternativeDataSource(java.lang.String id,
boolean asMaster)
public void activateAlternativeMasterDataSource(java.lang.String id)
DataSourceProvider
Tenant t = Registry.getCurrentTenant();
try
{
t.activateMasterDataSource("your_slave_id");
// ... business logic ...
}
finally
{
t.deactivateSlaveSource();
}
activateAlternativeMasterDataSource in interface DataSourceProviderid - the id string of the slave data sourceDataSourceProvider.deactivateAlternativeDataSource()public boolean isForceMaster()
DataSourceProviderDataSourceProvider.forceMasterDataSource() was called then this
method returns true. A DataSourceProvider.deactivateAlternativeDataSource() will reset this state.isForceMaster in interface DataSourceProviderpublic boolean isSlaveDataSource()
DataSourceProviderisSlaveDataSource in interface DataSourceProviderDataSourceProvider is a slave data sourcepublic boolean isAlternativeMasterDataSource()
DataSourceProviderisAlternativeMasterDataSource in interface DataSourceProviderprotected AbstractTenant.DataSourceSelection getNextSlave()
AbstractTenant.DataSourceSelectionpublic InvalidationManager getInvalidationManager()
getInvalidationManager in interface Tenantpublic PersistencePool getPersistencePool()
getPersistencePool in interface Tenantpublic PersistenceManager getPersistenceManager()
getPersistenceManager in interface Tenantpublic SystemEJB getSystemEJB()
getSystemEJB in interface Tenantpublic ThreadPool getThreadPool()
getThreadPool in interface Tenantpublic ThreadPool getWorkersThreadPool()
getWorkersThreadPool in interface Tenantpublic SingletonCreator getSingletonCreator()
getSingletonCreator in interface Tenantpublic SerialNumberGenerator getSerialNumberGenerator()
getSerialNumberGenerator in interface Tenantpublic static ThreadPool createDefaultThreadPool(java.lang.String tenantID, int poolSize)
protected HybrisDataSource createMasterDataSource(DataSourceFactory factory)
protected java.util.List<AbstractTenant.DataSourceHolder> createAlternativeDataSources(DataSourceFactory defaultFactory, ConfigIntf cfg, java.util.Collection<HybrisDataSource> createdForRollback)
protected HybrisDataSource createAlternativeDataSource(DataSourceFactory factory, java.lang.String id, java.util.Map<java.lang.String,java.lang.String> params, boolean readOnly)
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)
public static java.util.Map<java.lang.String,java.lang.String> extractCustomDBParams(ConfigIntf cfg)
public static java.util.Map<java.lang.String,java.lang.String> extractCustomDBParams(ConfigIntf cfg, boolean stripPrefix)
public static java.util.Map<java.lang.String,java.lang.String> extractCustomDBParams(java.util.Map<java.lang.String,java.lang.String> map)
public static java.util.Map<java.lang.String,java.lang.String> extractCustomDBParams(java.util.Map<java.lang.String,java.lang.String> map,
boolean stripPrefix)
protected Cache createCache()
public boolean isClusteringEnabled()
@Deprecated public int getClusterID()
Registry.getClusterID() instead. The cluster ID is a global setting and therefore not
strictly depending on the current tenant.public long getDynamicClusterNodeID()
protected java.lang.Object performWithinOwnSystem(AbstractTenant.CodeWrapper wrapper)
public JaloSession getActiveSession()
getActiveSession in interface Tenantpublic void setActiveSessionForCurrentThread(JaloSession session)
protected void assertTenant(JaloSession session)
public java.util.List<SessionContext> getActiveSessionContextList()
public JaloConnection getJaloConnection()
getJaloConnection in interface Tenantpublic boolean cannotConnect()
public boolean connectionHasBeenBroken()
public void clearConnectionHasBeenBroken()
public java.lang.Object writeReplace()
throws java.io.ObjectStreamException
java.io.ObjectStreamExceptionpublic final boolean isStarting()
public final boolean isStopping()
public final boolean isNotifiyingListeners()
public java.lang.Thread createAndRegisterBackgroundThread(java.lang.Runnable payload,
java.util.concurrent.ThreadFactory factory)
createAndRegisterBackgroundThread in interface Tenantprotected void backgroundThreadStarted(java.lang.Thread thread,
java.lang.Runnable payload)
protected void backgroundThreadFinished(java.lang.Thread thread,
java.lang.Runnable payload)
public void resetTenantRestartMarker()
resetTenantRestartMarker in interface Tenantpublic boolean equals(java.lang.Object o)
equals in class java.lang.Objectpublic int hashCode()
hashCode in class java.lang.ObjectCopyright © 2018 SAP SE. All Rights Reserved.