View Javadoc

1   package org.xvsm.internal.tasks.dao.inmemory;
2   
3   import java.util.ArrayList;
4   import java.util.List;
5   import java.util.Map;
6   import java.util.TreeMap;
7   import java.util.WeakHashMap;
8   import java.util.concurrent.locks.Lock;
9   import java.util.concurrent.locks.ReadWriteLock;
10  import java.util.concurrent.locks.ReentrantReadWriteLock;
11  
12  import org.apache.log4j.Logger;
13  import org.xvsm.internal.tasks.OperationTask;
14  import org.xvsm.internal.tasks.dao.ITransactionDAO;
15  import org.xvsm.transactions.Transaction;
16  
17  /***
18   * 
19   * @author Christian Schreiber, Michael Proestler
20   * 
21   */
22  public class TransactionDAO implements ITransactionDAO {
23  
24  	/***
25  	 * The Logger for this Class.
26  	 */
27  	private static Logger logger = Logger.getLogger(TransactionDAO.class);
28  
29  	/***
30  	 * Contains all blocking tasks.
31  	 */
32  	private List<OperationTask> tasks = new ArrayList<OperationTask>();
33  
34  	/***
35  	 * The read write lock.
36  	 */
37  	private ReadWriteLock rwLock = new ReentrantReadWriteLock();
38  
39  	/***
40  	 * 
41  	 * {@inheritDoc}.
42  	 */
43  	// @Override
44  	public boolean add(OperationTask task, Transaction source) {
45  		if (logger.isDebugEnabled()) {
46  			logger.debug("add() task:" + task + " source: " + source);
47  		}
48  		synchronized (this.tasks) {
49  			tasks.add(task);
50  			if (logger.isDebugEnabled()) {
51  				logger.debug("add() added task:" + task);
52  				logger.debug("add() returns true");
53  			}
54  			return true;
55  		}
56  	}
57  
58  	/***
59  	 * 
60  	 * {@inheritDoc}.
61  	 */
62  	// @Override
63  	public List<OperationTask> take() {
64  		if (logger.isDebugEnabled()) {
65  			logger.debug("take()");
66  		}
67  		synchronized (this.tasks) {
68  
69  			List<OperationTask> retVal = new ArrayList<OperationTask>(
70  					this.tasks);
71  			this.tasks.clear();
72  			if (logger.isDebugEnabled()) {
73  				logger.debug("take() returns " + retVal);
74  			}
75  			return retVal;
76  
77  		}
78  	}
79  
80  	/***
81  	 * 
82  	 * {@inheritDoc}.
83  	 */
84  	public List<OperationTask> getAll() {
85  		if (logger.isDebugEnabled()) {
86  			logger.debug("getAll()");
87  		}
88  		synchronized (this.tasks) {
89  			List<OperationTask> retVal = new ArrayList<OperationTask>(
90  					this.tasks);
91  			if (logger.isDebugEnabled()) {
92  				logger.debug("getAll() returns " + retVal);
93  			}
94  			return retVal;
95  		}
96  	}
97  
98  	/***
99  	 * 
100 	 * {@inheritDoc}.
101 	 */
102 	public Lock readLock() {
103 		return this.rwLock.readLock();
104 	}
105 
106 	/***
107 	 * 
108 	 * {@inheritDoc}.
109 	 */
110 	public Lock writeLock() {
111 		return this.rwLock.writeLock();
112 	}
113 
114 	/***
115 	 * {@inheritDoc}
116 	 */
117 	// @Override
118 	public void commit(Transaction tx) {
119 		// System.err.println("DELETE MEEEEEEE ;)");
120 	}
121 
122 	/***
123 	 * {@inheritDoc}
124 	 */
125 	public void remove(OperationTask t) {
126 		synchronized (this.tasks) {
127 			this.tasks.remove(t);
128 		}
129 	}
130 }