public abstract class AbstractTenant extends Object implements Tenant, 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 String |
ALT_DATASOURCE |
static String |
MASTER_DATASOURCE_ID |
static String |
SLAVE_DATASOURCE |
| Modifier | Constructor and Description |
|---|---|
protected |
AbstractTenant(String tenantID) |
| Modifier and Type | Method and Description |
|---|---|
protected void |
activateAlternativeDataSource(String id,
boolean asMaster) |
void |
activateAlternativeMasterDataSource(String id)
Switches to a specified (by the id) master data source for the current thread.
|
String |
activateSlaveDataSource()
Switches to a slave data source for the current thread.
|
void |
activateSlaveDataSource(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(Thread thread,
Runnable payload) |
protected void |
backgroundThreadStarted(Thread thread,
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,
String id,
Map<String,String> params,
boolean readOnly) |
protected List<AbstractTenant.DataSourceHolder> |
createAlternativeDataSources(DataSourceFactory defaultFactory,
ConfigIntf cfg,
Collection<HybrisDataSource> createdForRollback) |
Thread |
createAndRegisterBackgroundThread(Runnable payload,
ThreadFactory factory) |
protected Cache |
createCache() |
protected DataSourceFactory |
createDataSourceFactory(ConfigIntf cfg) |
protected DataSourceFactory |
createDataSourceFactory(String className) |
static ThreadPool |
createDefaultThreadPool(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() |
protected void |
executeInitsIfNecessary()
Performs calling Init.Init() for all registered init instances and also performs
TenantListener.afterTenantStartUp(Tenant) notification. |
static Map<String,String> |
extractCustomDBParams(ConfigIntf cfg) |
static Map<String,String> |
extractCustomDBParams(ConfigIntf cfg,
boolean stripPrefix) |
static Map<String,String> |
extractCustomDBParams(Map<String,String> map) |
static Map<String,String> |
extractCustomDBParams(Map<String,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() |
List<SessionContext> |
getActiveSessionContextList() |
protected Collection<HybrisDataSource> |
getAllAlternativeDataSources(boolean asMaster) |
Set<String> |
getAllAlternativeMasterDataSourceIDs()
Provides IDs of all available alternative master data sources.
|
Collection<HybrisDataSource> |
getAllAlternativeMasterDataSources()
Returns all known alternative master data sources as Collection.
|
protected Set<String> |
getAllAlterntiveDataSourceIDs(boolean asMaster) |
Set<String> |
getAllDataSourceIDs() |
Set<String> |
getAllSlaveDataSourceIDs()
Provides IDs of all available slave data sources.
|
Collection<HybrisDataSource> |
getAllSlaveDataSources()
Returns all known slave data sources as Collection.
|
Cache |
getCache() |
int |
getClusterID()
Deprecated.
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(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 String |
getStateInfo() |
SystemEJB |
getSystemEJB() |
String |
getTenantID() |
long |
getTenantRestartMarker() |
abstract List<String> |
getTenantSpecificExtensionNames() |
ThreadPool |
getThreadPool() |
ThreadPool |
getWorkersThreadPool() |
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 Map<String,String> |
mergeSlaveDataSourceParameter(String dsID,
Map<String,String> tenantSettings,
String... keys) |
protected Object |
performWithinOwnSystem(AbstractTenant.CodeWrapper wrapper) |
MSSQLServerTransactionParameters |
readParameters(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(Boolean state) |
void |
setTenantID(String id) |
abstract void |
shutDown() |
protected void |
shutdownCache(AbstractTenant.ShutDownMode mode) |
abstract void |
startUp() |
String |
toString() |
Object |
writeReplace() |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitgetTenantSpecificLocale, getTenantSpecificTimeZonepublic static final String SLAVE_DATASOURCE
public static final String ALT_DATASOURCE
public static final String MASTER_DATASOURCE_ID
protected AbstractTenant(String tenantID)
public abstract List<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(Boolean state)
public long getTenantRestartMarker()
protected void doInitialize()
protected void relaseAdministrationLockIfNeeded(HybrisDataSource masterDataSource)
getClusterID() node.protected void initializeCache(HybrisDataSource masterDataSource)
public MSSQLServerTransactionParameters readParameters(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 String getStateInfo()
public final AbstractTenant.State getState()
protected final void setState(AbstractTenant.State state)
public String getTenantID()
getTenantID in interface Tenantpublic void setTenantID(String id)
public HybrisDataSource getDataSource(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(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 Collection<HybrisDataSource> getAllSlaveDataSources()
DataSourceProvidergetAllSlaveDataSources in interface DataSourceProviderSet with HybrisDataSource objectsprotected Collection<HybrisDataSource> getAllAlternativeDataSources(boolean asMaster)
public Collection<HybrisDataSource> getAllAlternativeMasterDataSources()
DataSourceProvidergetAllAlternativeMasterDataSources in interface DataSourceProviderSet with HybrisDataSource objectspublic Set<String> getAllDataSourceIDs()
getAllDataSourceIDs in interface DataSourceProviderpublic Set<String> getAllSlaveDataSourceIDs()
DataSourceProvidergetAllSlaveDataSourceIDs in interface DataSourceProviderpublic Set<String> getAllAlternativeMasterDataSourceIDs()
DataSourceProvidergetAllAlternativeMasterDataSourceIDs in interface DataSourceProviderpublic 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(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(String id, boolean asMaster)
public void activateAlternativeMasterDataSource(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(String tenantID, int poolSize)
protected HybrisDataSource createMasterDataSource(DataSourceFactory factory)
protected List<AbstractTenant.DataSourceHolder> createAlternativeDataSources(DataSourceFactory defaultFactory, ConfigIntf cfg, Collection<HybrisDataSource> createdForRollback)
protected HybrisDataSource createAlternativeDataSource(DataSourceFactory factory, String id, Map<String,String> params, boolean readOnly)
protected Map<String,String> mergeSlaveDataSourceParameter(String dsID, Map<String,String> tenantSettings, String... keys)
public static Map<String,String> extractCustomDBParams(ConfigIntf cfg)
public static Map<String,String> extractCustomDBParams(ConfigIntf cfg, boolean stripPrefix)
public static Map<String,String> extractCustomDBParams(Map<String,String> map)
public static Map<String,String> extractCustomDBParams(Map<String,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 Object performWithinOwnSystem(AbstractTenant.CodeWrapper wrapper)
public JaloSession getActiveSession()
getActiveSession in interface Tenantpublic void setActiveSessionForCurrentThread(JaloSession session)
protected void assertTenant(JaloSession session)
public List<SessionContext> getActiveSessionContextList()
public JaloConnection getJaloConnection()
getJaloConnection in interface Tenantpublic boolean cannotConnect()
public boolean connectionHasBeenBroken()
public void clearConnectionHasBeenBroken()
public Object writeReplace() throws ObjectStreamException
ObjectStreamExceptionpublic final boolean isStarting()
public final boolean isStopping()
public final boolean isNotifiyingListeners()
public Thread createAndRegisterBackgroundThread(Runnable payload, ThreadFactory factory)
createAndRegisterBackgroundThread in interface Tenantpublic void resetTenantRestartMarker()
resetTenantRestartMarker in interface TenantCopyright © 2017 SAP SE. All Rights Reserved.