View Javadoc

1   /***
2    * 
3    * Copyright 2004 Protique Ltd
4    * 
5    * Licensed under the Apache License, Version 2.0 (the "License"); 
6    * you may not use this file except in compliance with the License. 
7    * You may obtain a copy of the License at 
8    * 
9    * http://www.apache.org/licenses/LICENSE-2.0
10   * 
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS, 
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
14   * See the License for the specific language governing permissions and 
15   * limitations under the License. 
16   * 
17   **/
18  package org.codehaus.activespace.cache;
19  
20  import org.codehaus.activespace.Space;
21  import org.codehaus.activespace.cache.impl.CacheCommand;
22  
23  import javax.cache.Cache;
24  
25  /***
26   * A clustered cache which replicates its state across other members of a cluster
27   *
28   * @version $Revision: 1.3 $
29   */
30  public class ClusteredCache extends TransactionalCache {
31      private Space space;
32  
33      public ClusteredCache(Space space, Cache behindCache) {
34          super(behindCache);
35          this.space = space;
36  
37      }
38  
39      public void commit() {
40          // we need to send the command to the space
41          // and wait for a response
42          CacheCommand command = createTransactionCommand();
43          space.put(command);
44          waitUntilTransactionApplied();
45      }
46  
47      /***
48       * Wait around up to some timeout period until the local transaction
49       * has been distributed around the cluster and applied locally to the backing
50       * cache
51       */
52      protected void waitUntilTransactionApplied() {
53          // One strategy could be to not wait at all
54          // and just use the local transaction view.
55          // To do this we'd need to be able to snapshot the local changes
56          // to a savepoint
57          // so that a rollback after a commit() would only rollback the new changes
58          // since the last savepoint. The savepoints can be discarded when the transaction
59          // is eventually applied to the backing cache
60          //
61          // however we'd never be able to fail a transaction with
62          // an optimistic transaction failure - but it would be super fast :)
63      }
64  }