source: trunk/src/main/java/omq/server/RemoteWrapper.java @ 83

Last change on this file since 83 was 83, checked in by stoda, 11 years ago

J

File size: 2.5 KB
Line 
1package omq.server;
2
3import java.util.ArrayList;
4import java.util.concurrent.BlockingQueue;
5import java.util.concurrent.LinkedBlockingDeque;
6
7import omq.common.util.Serializer;
8
9import org.apache.log4j.Logger;
10
11import com.rabbitmq.client.QueueingConsumer;
12import com.rabbitmq.client.QueueingConsumer.Delivery;
13
14/**
15 * This class is used to encapsulate the invocationThreads under the
16 * RemoteObject.
17 *
18 * @author Sergi Toda <sergi.toda@estudiants.urv.cat>
19 *
20 */
21public class RemoteWrapper {
22        private static final Logger logger = Logger.getLogger(RemoteWrapper.class.getName());
23
24        private RemoteObject obj;
25        private int numThreads;
26        private ArrayList<InvocationThread> invocationList;
27        private BlockingQueue<Delivery> deliveryQueue;
28
29        public RemoteWrapper(RemoteObject obj, int numThreads, Serializer serializer) {
30                this.obj = obj;
31                this.numThreads = numThreads;
32                invocationList = new ArrayList<InvocationThread>();
33                deliveryQueue = new LinkedBlockingDeque<QueueingConsumer.Delivery>();
34
35                logger.info("Object reference: " + obj.getRef() + ", numthreads listening = " + numThreads);
36
37                for (int i = 0; i < numThreads; i++) {
38                        InvocationThread thread = new InvocationThread(obj, deliveryQueue, serializer);
39                        invocationList.add(thread);
40                        thread.start();
41                }
42        }
43
44        /**
45         * This method notifies a delivery to an invocationThread using a
46         * blockingQueue.
47         *
48         * @param delivery
49         *            - delivery which contains a Request to be invoked
50         * @throws Exception
51         */
52        public void notifyDelivery(Delivery delivery) throws Exception {
53                this.deliveryQueue.put(delivery);
54        }
55
56        /**
57         * This method interrups all the invocationThreads under this remoteWrapper
58         */
59        public void stopRemoteWrapper() {
60                logger.warn("Stopping Invocation threads vinculed to " + obj.getRef());
61                for (InvocationThread thread : invocationList) {
62                        thread.interrupt();
63                }
64        }
65
66        public RemoteObject getObj() {
67                return obj;
68        }
69
70        public void setObj(RemoteObject obj) {
71                this.obj = obj;
72        }
73
74        public int getNumThreads() {
75                return numThreads;
76        }
77
78        public void setNumThreads(int numThreads) {
79                this.numThreads = numThreads;
80        }
81
82        public ArrayList<InvocationThread> getInvocationList() {
83                return invocationList;
84        }
85
86        public void setInvocationList(ArrayList<InvocationThread> invocationList) {
87                this.invocationList = invocationList;
88        }
89
90        public BlockingQueue<Delivery> getDeliveryQueue() {
91                return deliveryQueue;
92        }
93
94        public void setDeliveryQueue(BlockingQueue<Delivery> deliveryQueue) {
95                this.deliveryQueue = deliveryQueue;
96        }
97}
Note: See TracBrowser for help on using the repository browser.