org.makersoft.shards.strategy.ShardStrategyImpl.java Source code

Java tutorial

Introduction

Here is the source code for org.makersoft.shards.strategy.ShardStrategyImpl.java

Source

/*
 * @(#)ShardStrategyImpl.java 2012-8-1 ?10:00:00
 *
 * Copyright (c) 2011-2012 Makersoft.org all rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 *
 */
package org.makersoft.shards.strategy;

import org.makersoft.shards.strategy.access.ShardAccessStrategy;
import org.makersoft.shards.strategy.access.impl.SequentialShardAccessStrategy;
import org.makersoft.shards.strategy.reduce.ShardReduceStrategy;
import org.makersoft.shards.strategy.resolution.ShardResolutionStrategy;
import org.makersoft.shards.strategy.selection.ShardSelectionStrategy;
import org.makersoft.shards.utils.Assert;
import org.springframework.transaction.support.TransactionSynchronizationManager;

/**
 * @author Feng Kuok 
 */
public class ShardStrategyImpl implements ShardStrategy {

    private ShardSelectionStrategy shardSelectionStrategy;

    private ShardResolutionStrategy shardResolutionStrategy;

    private ShardAccessStrategy shardAccessStrategy;

    private ShardReduceStrategy shardReduceStrategy;

    private final ShardAccessStrategy transactionShardReduceStrategy = new SequentialShardAccessStrategy();

    public ShardStrategyImpl(ShardSelectionStrategy shardSelectionStrategy,
            ShardResolutionStrategy shardResolutionStrategy, ShardAccessStrategy shardAccessStrategy,
            ShardReduceStrategy shardReduceStrategy) {

        Assert.notNull(shardSelectionStrategy);
        Assert.notNull(shardResolutionStrategy);
        Assert.notNull(shardAccessStrategy);
        Assert.notNull(shardReduceStrategy);

        this.shardSelectionStrategy = shardSelectionStrategy;
        this.shardResolutionStrategy = shardResolutionStrategy;
        this.shardAccessStrategy = shardAccessStrategy;
        this.shardReduceStrategy = shardReduceStrategy;
    }

    @Override
    public ShardSelectionStrategy getShardSelectionStrategy() {
        return shardSelectionStrategy;
    }

    @Override
    public ShardResolutionStrategy getShardResolutionStrategy() {
        return shardResolutionStrategy;
    }

    @Override
    public ShardAccessStrategy getShardAccessStrategy() {

        return TransactionSynchronizationManager.isCurrentTransactionReadOnly() ? shardAccessStrategy
                : transactionShardReduceStrategy;
    }

    @Override
    public ShardReduceStrategy getShardReduceStrategy() {
        return shardReduceStrategy;
    }

}