*** empty log message ***
[IRC.git] / Robust / Transactions / TransactionalIO / src / TransactionalIO / core / CustomLock.java
1 /*
2  * To change this template, choose Tools | Templates
3  * and open the template in the editor.
4  */
5
6 package TransactionalIO.core;
7
8
9 import TransactionalIO.benchmarks.benchmark;
10 import TransactionalIO.benchmarks.thread1;
11 import TransactionalIO.interfaces.TransactionalProgram;
12
13 /**
14  *
15  * @author navid
16  */
17 public class CustomLock implements Runnable{
18
19     private static ThreadLocal transactioncontainer = new ThreadLocal();
20     private TransactionalProgram ioprogram;
21     private static ThreadLocal/*<TransactionalProgram>*/ program = new ThreadLocal();
22     private ExtendedTransaction transaction;
23     public Thread runner;
24     
25    
26     public CustomLock(TransactionalProgram ioprogram) {
27         this.ioprogram = ioprogram;
28         transaction = new ExtendedTransaction();
29         runner = new Thread(this);
30         runner.start();
31     }
32     
33     public static void setTransaction(ExtendedTransaction transaction){
34         transactioncontainer.set(transaction);
35     }
36     
37     public static ExtendedTransaction getTransaction(){
38         return (ExtendedTransaction) transactioncontainer.get(); 
39     }
40     
41     public static void setProgram(TransactionalProgram transaction){
42         program.set(transaction);
43     }
44     
45     public static TransactionalProgram getProgram(){
46         return (TransactionalProgram) program.get(); 
47     }
48     
49     
50     public void run() {
51         setTransaction(transaction);
52         setProgram(ioprogram);
53         synchronized(benchmark.lock){
54             benchmark.transacctions.add(transaction);
55         }
56 //        System.out.println(Thread.currentThread().getName());
57         ioprogram.execute();
58         transaction.prepareCommit();
59         transaction.commitChanges();
60     }
61     
62 }