@Beta public interface TenantControl extends DataSerializable
 For example, an instance of tenant control can be created on an application
 thread and this tenant control can then be used to establish the same context
 on a different thread, e.g.
 OperationThread. Operation
 invocations requiring such context can then be handled correctly.
 
This is used by application servers to establish thread context for class loading, CDI, EJB and JPA invocations
Caveats
| Modifier and Type | Interface and Description | 
|---|---|
| static interface  | TenantControl.CloseableSimilar to the  Closeableinterface, except theTenantControl.Closeable.close()method does not throw aIOException. | 
| Modifier and Type | Field and Description | 
|---|---|
| static TenantControl | NOOP_TENANT_CONTROLDefault no-op tenant control | 
| Modifier and Type | Method and Description | 
|---|---|
| void | clearThreadContext()Cleans up all of the thread context to avoid potential class loader leaks
 This method should clear all potential context items,
 not just the ones set up in  setTenant()This acts as a catch-all for any potential class loader and thread-local leaks. | 
| boolean | isAvailable(Tenantable tenantable)Checks if the tenant app is loaded and classes are available for the given
  Tenantableobject. | 
| void | registerObject(DestroyEventContext destroyEventContext)Registers a hook to decouple any Hazelcast object when the tenant is destroyed,
 This is used, for example, to delete all associated caches from the application
 when it gets undeployed, so there are no  ClassCastExceptionafterwards. | 
| TenantControl.Closeable | setTenant()Establish this tenant's thread-local context. | 
| void | unregisterObject()Invoked when the distributed object belonging to this tenant control has
 been destroyed. | 
readData, writeDatastatic final TenantControl NOOP_TENANT_CONTROL
TenantControl.Closeable setTenant()
void registerObject(@Nonnull DestroyEventContext destroyEventContext)
ClassCastException afterwards.destroyEventContext - the hook to be used by the tenant control implementation
                            Cannot be null. This is a functional interface, so no-op lambda
                            can be used instead.void unregisterObject()
registerObject(DestroyEventContext). This is so the TenantControl
 itself can be garbage collected.boolean isAvailable(@Nonnull Tenantable tenantable)
Tenantable object.tenantable - passed so the tenant can filter on which object is callingtrue if tenant is loaded and classes are availablevoid clearThreadContext()
setTenant()
 This acts as a catch-all for any potential class loader and thread-local leaks.Copyright © 2022 Hazelcast, Inc.. All rights reserved.