Class TablePerMultitenantPolicy
- java.lang.Object
-
- org.eclipse.persistence.descriptors.TablePerMultitenantPolicy
-
- All Implemented Interfaces:
java.io.Serializable
,java.lang.Cloneable
,MultitenantPolicy
- Direct Known Subclasses:
SchemaPerMultitenantPolicy
public class TablePerMultitenantPolicy extends java.lang.Object implements MultitenantPolicy, java.lang.Cloneable
A table per tenant multitenant policy. Tables can either be per schema or augmented with a prefix or suffix per tenant.- See Also:
- Serialized Form
- Author:
- Guy Pelletier
- Since:
- EclipseLink 2.4
-
-
Field Summary
Fields Modifier and Type Field Description protected java.lang.String
contextProperty
protected java.lang.String
contextTenant
protected ClassDescriptor
descriptor
protected java.util.Map<org.eclipse.persistence.internal.helper.DatabaseTable,org.eclipse.persistence.internal.helper.DatabaseTable>
tablePerTenantTables
protected TenantTableDiscriminatorType
type
-
Constructor Summary
Constructors Constructor Description TablePerMultitenantPolicy(ClassDescriptor desc)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addFieldsToRow(org.eclipse.persistence.internal.sessions.AbstractRecord row, org.eclipse.persistence.internal.sessions.AbstractSession session)
INTERNAL:void
addToTableDefinition(TableDefinition tableDefinition)
INTERNAL:MultitenantPolicy
clone(ClassDescriptor descriptor)
INTERNAL: Multitenant policies are cloned per inheritance subclass.java.lang.String
getContextProperty()
INTERNAL: Return the context property for this table per tenant policy.org.eclipse.persistence.internal.helper.DatabaseTable
getTable(java.lang.String tableName)
INTERNAL: Return the new database table associated with this tenant.org.eclipse.persistence.internal.helper.DatabaseTable
getTable(org.eclipse.persistence.internal.helper.DatabaseTable table)
INTERNAL: Return the new database table associated with this tenant.protected java.lang.String
getTableName(org.eclipse.persistence.internal.helper.DatabaseTable table, java.lang.String tenant)
INTERNAL: Return the tenant table name.boolean
hasContextTenant()
INTERNAL: Return true if the tenant has been set for this policy.void
initialize(org.eclipse.persistence.internal.sessions.AbstractSession session)
INTERNAL:boolean
isPrefixPerTable()
PUBLIC: Return true if this descriptor requires a prefix to the table per tenant.boolean
isSchemaPerMultitenantPolicy()
INTERNAL:boolean
isSchemaPerTable()
PUBLIC: Return true if this descriptor requires a table schema per tenant.boolean
isSingleTableMultitenantPolicy()
INTERNAL:boolean
isSuffixPerTable()
PUBLIC: Return true if this descriptor requires a suffix to the table per tenant.boolean
isTablePerMultitenantPolicy()
INTERNAL:void
postInitialize(org.eclipse.persistence.internal.sessions.AbstractSession session)
INTERNAL:void
preInitialize(org.eclipse.persistence.internal.sessions.AbstractSession session)
INTERNAL:void
setContextProperty(java.lang.String contextProperty)
PUBLIC: Set the context property used to define the table per tenant.void
setContextTenant(java.lang.String contextTenant)
INTERNAL:protected void
setTablePerTenant()
INTERNAL: This method is used to update the table per tenant descriptor with a table per tenant prefix or suffix on its associated tables.protected void
setTableSchemaPerTenant()
INTERNAL: This method is used to update the table per tenant descriptor with a table per tenant schema.void
setTenantTableDiscriminatorType(TenantTableDiscriminatorType type)
PUBLIC: Set the tenant table discriminator type.boolean
shouldInitialize(org.eclipse.persistence.internal.sessions.AbstractSession session)
INTERNAL: This method is called during regular descriptor initialization.protected org.eclipse.persistence.internal.helper.DatabaseTable
updateTable(org.eclipse.persistence.internal.helper.DatabaseTable table)
INTERNAL: This method will update the table by cloning it and setting a new name on it.boolean
usesContextProperty(java.lang.String property)
INTERNAL: Return true if this policy accepts the given property.
-
-
-
Field Detail
-
descriptor
protected ClassDescriptor descriptor
-
tablePerTenantTables
protected java.util.Map<org.eclipse.persistence.internal.helper.DatabaseTable,org.eclipse.persistence.internal.helper.DatabaseTable> tablePerTenantTables
-
type
protected TenantTableDiscriminatorType type
-
contextProperty
protected java.lang.String contextProperty
-
contextTenant
protected java.lang.String contextTenant
-
-
Constructor Detail
-
TablePerMultitenantPolicy
public TablePerMultitenantPolicy(ClassDescriptor desc)
-
-
Method Detail
-
addFieldsToRow
public void addFieldsToRow(org.eclipse.persistence.internal.sessions.AbstractRecord row, org.eclipse.persistence.internal.sessions.AbstractSession session)
INTERNAL:- Specified by:
addFieldsToRow
in interfaceMultitenantPolicy
-
addToTableDefinition
public void addToTableDefinition(TableDefinition tableDefinition)
INTERNAL:- Specified by:
addToTableDefinition
in interfaceMultitenantPolicy
-
clone
public MultitenantPolicy clone(ClassDescriptor descriptor)
INTERNAL: Multitenant policies are cloned per inheritance subclass.- Specified by:
clone
in interfaceMultitenantPolicy
-
getContextProperty
public java.lang.String getContextProperty()
INTERNAL: Return the context property for this table per tenant policy.
-
getTable
public org.eclipse.persistence.internal.helper.DatabaseTable getTable(java.lang.String tableName)
INTERNAL: Return the new database table associated with this tenant.
-
getTable
public org.eclipse.persistence.internal.helper.DatabaseTable getTable(org.eclipse.persistence.internal.helper.DatabaseTable table)
INTERNAL: Return the new database table associated with this tenant.
-
getTableName
protected java.lang.String getTableName(org.eclipse.persistence.internal.helper.DatabaseTable table, java.lang.String tenant)
INTERNAL: Return the tenant table name.
-
hasContextTenant
public boolean hasContextTenant()
INTERNAL: Return true if the tenant has been set for this policy.
-
initialize
public void initialize(org.eclipse.persistence.internal.sessions.AbstractSession session) throws DescriptorException
INTERNAL:- Specified by:
initialize
in interfaceMultitenantPolicy
- Throws:
DescriptorException
-
isPrefixPerTable
public boolean isPrefixPerTable()
PUBLIC: Return true if this descriptor requires a prefix to the table per tenant.
-
isSchemaPerTable
public boolean isSchemaPerTable()
PUBLIC: Return true if this descriptor requires a table schema per tenant.
-
isSingleTableMultitenantPolicy
public boolean isSingleTableMultitenantPolicy()
INTERNAL:- Specified by:
isSingleTableMultitenantPolicy
in interfaceMultitenantPolicy
-
isSchemaPerMultitenantPolicy
public boolean isSchemaPerMultitenantPolicy()
INTERNAL:- Specified by:
isSchemaPerMultitenantPolicy
in interfaceMultitenantPolicy
-
isSuffixPerTable
public boolean isSuffixPerTable()
PUBLIC: Return true if this descriptor requires a suffix to the table per tenant.
-
isTablePerMultitenantPolicy
public boolean isTablePerMultitenantPolicy()
INTERNAL:- Specified by:
isTablePerMultitenantPolicy
in interfaceMultitenantPolicy
-
postInitialize
public void postInitialize(org.eclipse.persistence.internal.sessions.AbstractSession session)
INTERNAL:- Specified by:
postInitialize
in interfaceMultitenantPolicy
-
preInitialize
public void preInitialize(org.eclipse.persistence.internal.sessions.AbstractSession session) throws DescriptorException
INTERNAL:- Specified by:
preInitialize
in interfaceMultitenantPolicy
- Throws:
DescriptorException
-
setTenantTableDiscriminatorType
public void setTenantTableDiscriminatorType(TenantTableDiscriminatorType type)
PUBLIC: Set the tenant table discriminator type.
-
setContextProperty
public void setContextProperty(java.lang.String contextProperty)
PUBLIC: Set the context property used to define the table per tenant. If it is not set by the user, the policy defaults it to the multitenant property default of "eclipselink.tenant-id"
-
setTablePerTenant
protected void setTablePerTenant()
INTERNAL: This method is used to update the table per tenant descriptor with a table per tenant prefix or suffix on its associated tables. This includes any relation tables from mappings. If the given session is a client session than we must clone the tables. Outside of a client session, assume global usage and no cloning is needed. This method should only be called at the start of a client session lifecycle and should only be called once.
-
setTableSchemaPerTenant
protected void setTableSchemaPerTenant()
INTERNAL: This method is used to update the table per tenant descriptor with a table per tenant schema. This includes any relation tables from mappings. This will be done through the setting of a table qualifier on the tables. This method should only be called at the start of a client session lifecycle and should only be called once.
-
setContextTenant
public void setContextTenant(java.lang.String contextTenant)
INTERNAL:
-
shouldInitialize
public boolean shouldInitialize(org.eclipse.persistence.internal.sessions.AbstractSession session)
INTERNAL: This method is called during regular descriptor initialization. When initializing at that level no cloning should be done on when setting the context tenant.
-
updateTable
protected org.eclipse.persistence.internal.helper.DatabaseTable updateTable(org.eclipse.persistence.internal.helper.DatabaseTable table)
INTERNAL: This method will update the table by cloning it and setting a new name on it. The table association will be stored here as well for ease of future look up.
-
usesContextProperty
public boolean usesContextProperty(java.lang.String property)
INTERNAL: Return true if this policy accepts the given property.
-
-