Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 355093 | Differences between
and this patch

Collapse All | Expand All

(-)foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/annotations/Multitenant.java (-1 / +12 lines)
Lines 9-15 Link Here
9
 *
9
 *
10
 * Contributors:
10
 * Contributors:
11
 *     03/24/2011-2.3 Guy Pelletier 
11
 *     03/24/2011-2.3 Guy Pelletier 
12
 *       - 337323: Multi-tenant with shared schema support (part 1) 
12
 *       - 337323: Multi-tenant with shared schema support (part 1)
13
 *     08/18/2011-2.3.1 Guy Pelletier 
14
 *       - 355093: Add new 'includeCriteria' flag to Multitenant metadata 
13
 ******************************************************************************/  
15
 ******************************************************************************/  
14
package org.eclipse.persistence.annotations;
16
package org.eclipse.persistence.annotations;
15
17
Lines 40-43 Link Here
40
     * (Optional) Specify the multi-tenant strategy to use.
42
     * (Optional) Specify the multi-tenant strategy to use.
41
     */
43
     */
42
    MultitenantType value() default MultitenantType.SINGLE_TABLE;
44
    MultitenantType value() default MultitenantType.SINGLE_TABLE;
45
    
46
    /**
47
     * (Optional) Indicate if the database requires the tenant criteria to
48
     * be added to the SELECT, UPDATE, and DELETE queries. By default this is
49
     * done but when set to false the queries will not be modified and it will
50
     * be up to the application or database to ensure that the correct criteria 
51
     * is applied to all queries.
52
     */
53
    boolean includeCriteria() default true;
43
}
54
}
(-)foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/descriptors/DescriptorQueryManager.java (-1 / +24 lines)
Lines 15-20 Link Here
15
 *       - 337323: Multi-tenant with shared schema support (part 2)
15
 *       - 337323: Multi-tenant with shared schema support (part 2)
16
 *     05/24/2011-2.3 Guy Pelletier 
16
 *     05/24/2011-2.3 Guy Pelletier 
17
 *       - 345962: Join fetch query when using tenant discriminator column fails.
17
 *       - 345962: Join fetch query when using tenant discriminator column fails.
18
 *     08/18/2011-2.3.1 Guy Pelletier 
19
 *       - 355093: Add new 'includeCriteria' flag to Multitenant metadata
18
 ******************************************************************************/  
20
 ******************************************************************************/  
19
package org.eclipse.persistence.descriptors;
21
package org.eclipse.persistence.descriptors;
20
22
Lines 69-74 Link Here
69
    protected transient DeleteObjectQuery deleteQuery;
71
    protected transient DeleteObjectQuery deleteQuery;
70
    protected DoesExistQuery doesExistQuery;
72
    protected DoesExistQuery doesExistQuery;
71
    protected ClassDescriptor descriptor;
73
    protected ClassDescriptor descriptor;
74
    protected boolean includeTenantCriteria;
72
    protected boolean hasCustomMultipleTableJoinExpression;
75
    protected boolean hasCustomMultipleTableJoinExpression;
73
    protected transient String additionalCriteria;
76
    protected transient String additionalCriteria;
74
    protected transient Expression additionalJoinExpression;
77
    protected transient Expression additionalJoinExpression;
Lines 102-107 Link Here
102
     * Initialize the state of the descriptor query manager
105
     * Initialize the state of the descriptor query manager
103
     */
106
     */
104
    public DescriptorQueryManager() {
107
    public DescriptorQueryManager() {
108
        this.includeTenantCriteria = true;
105
        this.queries = new LinkedHashMap(5);
109
        this.queries = new LinkedHashMap(5);
106
        this.cachedUpdateCalls = new ConcurrentFixedCache(10);
110
        this.cachedUpdateCalls = new ConcurrentFixedCache(10);
107
        this.cachedExpressionQueries = new ConcurrentFixedCache(20);
111
        this.cachedExpressionQueries = new ConcurrentFixedCache(20);
Lines 816-821 Link Here
816
820
817
    /**
821
    /**
818
     * INTERNAL:
822
     * INTERNAL:
823
     */
824
    public boolean includeTenantCriteria() {
825
        return includeTenantCriteria;
826
    }
827
    
828
    /**
829
     * INTERNAL:
819
     * Post initialize the mappings
830
     * Post initialize the mappings
820
     */
831
     */
821
    public void initialize(AbstractSession session) {
832
    public void initialize(AbstractSession session) {
Lines 942-948 Link Here
942
                additionalJoinExpression = databaseQuery.getSelectionCriteria().and(additionalJoinExpression);
953
                additionalJoinExpression = databaseQuery.getSelectionCriteria().and(additionalJoinExpression);
943
            } 
954
            } 
944
            
955
            
945
            if (descriptor.hasTenantDiscriminatorFields()) {
956
            if (descriptor.hasTenantDiscriminatorFields() && includeTenantCriteria) {
946
                ExpressionBuilder builder = new ExpressionBuilder();
957
                ExpressionBuilder builder = new ExpressionBuilder();
947
                
958
                
948
                for (DatabaseField discriminatorField : descriptor.getTenantDiscriminatorFields().keySet()) {
959
                for (DatabaseField discriminatorField : descriptor.getTenantDiscriminatorFields().keySet()) {
Lines 1352-1357 Link Here
1352
1363
1353
    /**
1364
    /**
1354
     * ADVANCED:
1365
     * ADVANCED:
1366
     * Set this boolean to exlude tenant column criteria in the additional
1367
     * join expression. This is of particualar use when using Oracle VPD
1368
     * that handles tenant identifiers. Setting this flag to false will ensure
1369
     * EclipseLink does not futher filter tenant information (and only populate 
1370
     * it)
1371
     */
1372
    public void setIncludeTenantCriteria(boolean includeTenantCriteria) {
1373
        this.includeTenantCriteria = includeTenantCriteria;
1374
    }
1375
    
1376
    /**
1377
     * ADVANCED:
1355
     * Set the receiver's insert call.
1378
     * Set the receiver's insert call.
1356
     * This allows the user to override the insert operation.
1379
     * This allows the user to override the insert operation.
1357
     */
1380
     */
(-)foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/descriptors/InheritancePolicy.java (+5 lines)
Lines 11-16 Link Here
11
 *     Oracle - initial API and implementation from Oracle TopLink
11
 *     Oracle - initial API and implementation from Oracle TopLink
12
 *     04/01/2011-2.3 Guy Pelletier 
12
 *     04/01/2011-2.3 Guy Pelletier 
13
 *       - 337323: Multi-tenant with shared schema support (part 2)
13
 *       - 337323: Multi-tenant with shared schema support (part 2)
14
 *     08/18/2011-2.3.1 Guy Pelletier 
15
 *       - 355093: Add new 'includeCriteria' flag to Multitenant metadata
14
 ******************************************************************************/  
16
 ******************************************************************************/  
15
package org.eclipse.persistence.descriptors;
17
package org.eclipse.persistence.descriptors;
16
18
Lines 1151-1156 Link Here
1151
                getDescriptor().addTenantDiscriminatorField(property, discriminatorField);
1153
                getDescriptor().addTenantDiscriminatorField(property, discriminatorField);
1152
            }
1154
            }
1153
            
1155
            
1156
            // Copy down the include criteria flag.
1157
            getDescriptor().getQueryManager().setIncludeTenantCriteria(getParentDescriptor().getQueryManager().includeTenantCriteria());
1158
            
1154
            setClassIndicatorMapping(getParentDescriptor().getInheritancePolicy().getClassIndicatorMapping());
1159
            setClassIndicatorMapping(getParentDescriptor().getInheritancePolicy().getClassIndicatorMapping());
1155
            setShouldUseClassNameAsIndicator(getParentDescriptor().getInheritancePolicy().shouldUseClassNameAsIndicator());
1160
            setShouldUseClassNameAsIndicator(getParentDescriptor().getInheritancePolicy().shouldUseClassNameAsIndicator());
1156
1161
(-)jpa/org.eclipse.persistence.jpa/resource/org/eclipse/persistence/jpa/eclipselink_orm_2_4.xsd (+1 lines)
Lines 3321-3326 Link Here
3321
      <xsd:element name="tenant-discriminator-column" type="orm:tenant-discriminator-column" minOccurs="0" maxOccurs="unbounded"/>
3321
      <xsd:element name="tenant-discriminator-column" type="orm:tenant-discriminator-column" minOccurs="0" maxOccurs="unbounded"/>
3322
    </xsd:sequence>
3322
    </xsd:sequence>
3323
    <xsd:attribute name="type" type="orm:multitenant-type"/>
3323
    <xsd:attribute name="type" type="orm:multitenant-type"/>
3324
    <xsd:attribute name="include-criteria" type="xsd:boolean"/>
3324
  </xsd:complexType>
3325
  </xsd:complexType>
3325
3326
3326
  <!-- **************************************************** -->
3327
  <!-- **************************************************** -->
(-)jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/internal/jpa/metadata/multitenant/MultitenantMetadata.java (-1 / +35 lines)
Lines 15-21 Link Here
15
 *     04/05/2011-2.3 Guy Pelletier 
15
 *     04/05/2011-2.3 Guy Pelletier 
16
 *       - 337323: Multi-tenant with shared schema support (part 3)
16
 *       - 337323: Multi-tenant with shared schema support (part 3)
17
 *     06/30/2011-2.3.1 Guy Pelletier 
17
 *     06/30/2011-2.3.1 Guy Pelletier 
18
 *       - 341940: Add disable/enable allowing native queries 
18
 *       - 341940: Add disable/enable allowing native queries
19
 *     08/18/2011-2.3.1 Guy Pelletier 
20
 *       - 355093: Add new 'includeCriteria' flag to Multitenant metadata
19
 ******************************************************************************/
21
 ******************************************************************************/
20
package org.eclipse.persistence.internal.jpa.metadata.multitenant;
22
package org.eclipse.persistence.internal.jpa.metadata.multitenant;
21
23
Lines 51-56 Link Here
51
 * @since EclipseLink 2.3
53
 * @since EclipseLink 2.3
52
 */
54
 */
53
public class MultitenantMetadata extends ORMetadata {
55
public class MultitenantMetadata extends ORMetadata {
56
    private Boolean m_includeCriteria;
54
    private List<TenantDiscriminatorColumnMetadata> m_tenantDiscriminatorColumns = new ArrayList<TenantDiscriminatorColumnMetadata>();
57
    private List<TenantDiscriminatorColumnMetadata> m_tenantDiscriminatorColumns = new ArrayList<TenantDiscriminatorColumnMetadata>();
55
    private String m_type;
58
    private String m_type;
56
    
59
    
Lines 70-75 Link Here
70
        super(multitenant, accessor);
73
        super(multitenant, accessor);
71
        
74
        
72
        m_type = (String) multitenant.getAttribute("value");
75
        m_type = (String) multitenant.getAttribute("value");
76
        m_includeCriteria = (Boolean) multitenant.getAttributeBooleanDefaultTrue("includeCriteria");
73
77
74
        // Look for a @TenantDiscriminators
78
        // Look for a @TenantDiscriminators
75
        if (accessor.isAnnotationPresent(TenantDiscriminatorColumns.class)) {
79
        if (accessor.isAnnotationPresent(TenantDiscriminatorColumns.class)) {
Lines 95-100 Link Here
95
            if (! valuesMatch(m_type, multitenant.getType())) {
99
            if (! valuesMatch(m_type, multitenant.getType())) {
96
                return false;
100
                return false;
97
            }
101
            }
102
            
103
            if (! valuesMatch(m_includeCriteria, multitenant.getIncludeCriteria())) {
104
                return false;
105
            }
98
106
99
            return valuesMatch(m_tenantDiscriminatorColumns, multitenant.getTenantDiscriminatorColumns());
107
            return valuesMatch(m_tenantDiscriminatorColumns, multitenant.getTenantDiscriminatorColumns());
100
        }
108
        }
Lines 106-111 Link Here
106
     * INTERNAL:
114
     * INTERNAL:
107
     * Used for OX mapping.
115
     * Used for OX mapping.
108
     */
116
     */
117
    public Boolean getIncludeCriteria() {
118
        return m_includeCriteria;
119
    }
120
    
121
    /**
122
     * INTERNAL:
123
     * Used for OX mapping.
124
     */
109
    public List<TenantDiscriminatorColumnMetadata> getTenantDiscriminatorColumns() {
125
    public List<TenantDiscriminatorColumnMetadata> getTenantDiscriminatorColumns() {
110
        return m_tenantDiscriminatorColumns;
126
        return m_tenantDiscriminatorColumns;
111
    }
127
    }
Lines 121-126 Link Here
121
    /**
137
    /**
122
     * INTERNAL:
138
     * INTERNAL:
123
     */
139
     */
140
    public boolean includeCriteria() {
141
        return m_includeCriteria == null || m_includeCriteria.booleanValue();
142
    }
143
    
144
    /**
145
     * INTERNAL:
146
     */
124
    @Override
147
    @Override
125
    public void initXMLObject(MetadataAccessibleObject accessibleObject, XMLEntityMappings entityMappings) {
148
    public void initXMLObject(MetadataAccessibleObject accessibleObject, XMLEntityMappings entityMappings) {
126
        super.initXMLObject(accessibleObject, entityMappings);
149
        super.initXMLObject(accessibleObject, entityMappings);
Lines 199-210 Link Here
199
        for (TenantDiscriminatorColumnMetadata tenantDiscriminator : m_tenantDiscriminatorColumns) {
222
        for (TenantDiscriminatorColumnMetadata tenantDiscriminator : m_tenantDiscriminatorColumns) {
200
            tenantDiscriminator.process(descriptor);
223
            tenantDiscriminator.process(descriptor);
201
        }
224
        }
225
        
226
        // Set the include criteria flag on the query manager.
227
        descriptor.getClassDescriptor().getDescriptorQueryManager().setIncludeTenantCriteria(includeCriteria());
202
    }
228
    }
203
    
229
    
204
    /**
230
    /**
205
     * INTERNAL:
231
     * INTERNAL:
206
     * Used for OX mapping.
232
     * Used for OX mapping.
207
     */
233
     */
234
    public void setIncludeCriteria(Boolean includeCriteria) {
235
        m_includeCriteria = includeCriteria;
236
    }
237
    
238
    /**
239
     * INTERNAL:
240
     * Used for OX mapping.
241
     */
208
    public void setTenantDiscriminatorColumns(List<TenantDiscriminatorColumnMetadata> tenantDiscriminatorColumns) {
242
    public void setTenantDiscriminatorColumns(List<TenantDiscriminatorColumnMetadata> tenantDiscriminatorColumns) {
209
        m_tenantDiscriminatorColumns = tenantDiscriminatorColumns;
243
        m_tenantDiscriminatorColumns = tenantDiscriminatorColumns;
210
    }
244
    }
(-)jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/internal/jpa/metadata/xml/XMLEntityMappingsMappingProject.java (+15 lines)
Lines 63-68 Link Here
63
 *       - 337323: Multi-tenant with shared schema support (part 8)
63
 *       - 337323: Multi-tenant with shared schema support (part 8)
64
 *     07/03/2011-2.3.1 Guy Pelletier 
64
 *     07/03/2011-2.3.1 Guy Pelletier 
65
 *       - 348756: m_cascadeOnDelete boolean should be changed to Boolean
65
 *       - 348756: m_cascadeOnDelete boolean should be changed to Boolean
66
 *     08/18/2011-2.3.1 Guy Pelletier 
67
 *       - 355093: Add new 'includeCriteria' flag to Multitenant metadata
66
 *******************************************************************************/
68
 *******************************************************************************/
67
package org.eclipse.persistence.internal.jpa.metadata.xml;
69
package org.eclipse.persistence.internal.jpa.metadata.xml;
68
70
Lines 2099-2104 Link Here
2099
        
2101
        
2100
        // Attribute mappings.
2102
        // Attribute mappings.
2101
        descriptor.addMapping(getTypeAttributeMapping());
2103
        descriptor.addMapping(getTypeAttributeMapping());
2104
        descriptor.addMapping(getIncludeCriteriaAttributeMapping());
2102
        
2105
        
2103
        return descriptor;
2106
        return descriptor;
2104
    }
2107
    }
Lines 4188-4193 Link Here
4188
    /**
4191
    /**
4189
     * INTERNAL:
4192
     * INTERNAL:
4190
     */
4193
     */
4194
    protected XMLDirectMapping getIncludeCriteriaAttributeMapping() {
4195
        XMLDirectMapping includeCriteriaMapping = new XMLDirectMapping();
4196
        includeCriteriaMapping.setAttributeName("m_includeCriteria");
4197
        includeCriteriaMapping.setGetMethodName("getIncludeCriteria");
4198
        includeCriteriaMapping.setSetMethodName("setIncludeCriteria");
4199
        includeCriteriaMapping.setXPath("@include-criteria");
4200
        return includeCriteriaMapping;
4201
    }
4202
    
4203
    /**
4204
     * INTERNAL:
4205
     */
4191
    protected XMLCompositeCollectionMapping getIndexesMapping() {
4206
    protected XMLCompositeCollectionMapping getIndexesMapping() {
4192
        XMLCompositeCollectionMapping indexesMapping = new XMLCompositeCollectionMapping();
4207
        XMLCompositeCollectionMapping indexesMapping = new XMLCompositeCollectionMapping();
4193
        indexesMapping.setAttributeName("m_indexes");
4208
        indexesMapping.setAttributeName("m_indexes");

Return to bug 355093