All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.gemstone.gemfire.cache.PartitionResolver Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (c) 2010-2015 Pivotal Software, Inc. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you
 * may not use this file except in compliance with the License. You
 * may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
 * implied. See the License for the specific language governing
 * permissions and limitations under the License. See accompanying
 * LICENSE file.
 */
package com.gemstone.gemfire.cache;

/**
 * Implementers of interface PartitionResolver enable custom
 * partitioning on the PartitionedRegion.
*

* 1. The Key class can implement PartitionResolver interface to * enable custom partitioning OR
* 2. Configure your own PartitionResolver class in partition attributes (For * instance when the Key is a primitive type or String) Implement the * appropriate equals - For all implementations, you need to be sure to code the * class equals method so it properly verifies equality for the * PartitionResolver implementation. This might mean verifying that class names * are the same or that the returned routing objects are the same etc.. When you * initiate the partitioned region on multiple nodes, GemFire uses the equals * method to ensure you are using the same PartitionResolver implementation for * all of the nodes for the region. *

*

* GemFire uses the routing object's hashCode to determine where the data is * being managed. Say, for example, you want to colocate all Trades by month and * year.The key is implemented by TradeKey class which also implements the * PartitionResolver interface. *

* public class TradeKey implements PartitionResolver {
*     private String tradeID;
*     private Month month ;
*     private Year year ;
* *     public TradingKey(){ }
*     public TradingKey(Month month, Year year){
*         this.month = month;
*         this.year = year;
*     }
*     public Object getRoutingObject(EntryOperation opDetails){
*         return this.month + this.year;
*     }
}
* * In the example above, all trade entries with the same month and year are * guaranteed to be colocated. *

* * @author Yogesh Mahajan * @author Mitch Thomas * * @since 6.0 */ public interface PartitionResolver extends CacheCallback { /** * @param opDetails * the detail of the entry operation e.g. * {@link Region#get(Object)} * @throws RuntimeException * any exception thrown will terminate the operation and the * exception will be passed to the calling thread. * @return object associated with entry operation which allows the Partitioned * Region to store associated data together */ public Object getRoutingObject(EntryOperation opDetails); /** * Returns the name of the PartitionResolver * * @return String name */ public String getName(); }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy