[hibernate-issues] [Hibernate-JIRA] Resolved: (HSHARDS-9) Add ShardAware interface and related exit strategy logic

Max Ross (JIRA) noreply at atlassian.com
Mon Sep 3 21:58:14 EDT 2007


     [ http://opensource.atlassian.com/projects/hibernate/browse/HSHARDS-9?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Max Ross resolved HSHARDS-9.
----------------------------

       Resolution: Fixed
    Fix Version/s: 3.0.0

> Add ShardAware interface and related exit strategy logic
> --------------------------------------------------------
>
>                 Key: HSHARDS-9
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HSHARDS-9
>             Project: Hibernate Shards
>          Issue Type: New Feature
>          Components: strategy
>    Affects Versions: 3.0.0.Beta1
>         Environment: Hibernate 3.2, Database: DB2
>            Reporter: Nathan Silberman
>            Assignee: Max Ross
>             Fix For: 3.0.0
>
>   Original Estimate: 2 days
>  Remaining Estimate: 2 days
>
> Domain model awareness of its host Shard. Any domain model that implemented a 'ShardAware' interface would contain a Set<ShardId> that could be injected by the relevant ExitStrategy.
> This could be solved by adding the following interface:
> -------------------------------------------------------
> package org.hibernate.shards;
> import org.hibernate.shards.ShardId;
> import java.util.Set;
> /**
>  * Interface for persistent objects that are aware of the virtual shardIds
>  * that host them.
>  */
> public interface ShardAware {
> 	
> 	/**
> 	 * Sets the virtual ShardIds that host the implementing
> 	 * persistant object
> 	 * 
> 	 * @param shardid
> 	 * 			a non-null, non-empty Set of ShardIds
>          * @throws IllegalArgumentException
>          *                      if <tt>shardIds</tt> is null or empty
> 	 */
> 	void setShardIds( Set<ShardId> shardids );
> }
> ---------------------------------------------------
> An simple exit strategy that could be used, for example, would set the ShardIds for each resulting ShardAware domain model: 
> ------------------------------------------------------
> package org.hibernate.shards.strategy.exit;
> import java.util.List;
> import org.hibernate.shards.Shard;
> import org.hibernate.shards.ShardAware;
> /**
>  * ShardAwareConcatenateListsExistStrategy sets the ShardIds on each of the given 
>  * objects returned by each Shard. 
>  * 
>  * One should be aware that usage of this class adds O(n) overhead to each retrieval
>  * as the setting of each ShardIds Set is invoked by iterating over the entire resultSet.
>  */
> public class ShardAwareConcatenateListsExistStrategy extends ConcatenateListsExitStrategy {
> 	@Override
> 	public synchronized boolean addResult(List<Object> oneResult, Shard shard ) {
> 		
> 		if ( oneResult != null && ! oneResult.isEmpty()
> 				&& oneResult.get( 0 ) instanceof ShardAware ) {
> 			
> 			for( Object object : oneResult ) {
> 				((ShardAware)object).setShardIds( shard.getShardIds() );
> 			}
> 		}
> 		
> 		return super.addResult( oneResult, shard );
> 	}
> }
> ---------------------------------------
> This change might require changes wherever ShardAccessStrategy.apply() could be invoked.
> I have made the changes including a small alteration to the ShardedCriteriaImpl, to use ShardAwareConcatenateListsExistStrategy  instead of ConcatenateListsExitStrategy, with success. 

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the hibernate-issues mailing list