source: branches/supervisor/src/main/java/omq/supervisor/SupervisorImpl.java @ 103

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

Supervisor done

TODO: revise supervisor

File size: 2.4 KB
Line 
1package omq.supervisor;
2
3import java.util.ArrayList;
4import java.util.HashMap;
5import java.util.List;
6import java.util.Map;
7
8import omq.common.broker.RemoteBroker;
9import omq.server.RemoteObject;
10
11import org.apache.log4j.Logger;
12
13public class SupervisorImpl extends RemoteObject implements Supervisor {
14
15        /**
16         *
17         */
18        private static final long serialVersionUID = 1L;
19        private static final Logger logger = Logger.getLogger(SupervisorImpl.class.getName());
20        private SupervisorThread thread;
21        private Map<String, OmqSettings> objectSettings;
22        // TODO: Set<?>
23        private List<RemoteBroker> brokers;
24
25        public SupervisorImpl(long sleep) {
26                brokers = new ArrayList<RemoteBroker>();
27                objectSettings = new HashMap<String, OmqSettings>();
28                thread = new SupervisorThread(this, sleep);
29                thread.start();
30        }
31
32        @Override
33        public void subscribe(String brokerName) throws Exception {
34                logger.info("Broker " + brokerName + " subscrived");
35                RemoteBroker broker = getBroker().lookup(brokerName, RemoteBroker.class);
36                brokers.add(broker);
37        }
38
39        @Override
40        public void spawnObject(OmqSettings settings, int numObjects) throws Exception {
41
42                String reference = settings.getReference();
43
44                if (!objectSettings.containsKey(reference)) {
45                        objectSettings.put(reference, settings);
46                }
47
48                int minObjects = settings.getMinNumberObjects();
49
50                for (RemoteBroker broker : brokers) {
51                        if (!broker.hasObject(reference) && minObjects >= numObjects) {
52                                broker.spawnObject(reference, settings.getClassName(), settings.getProps());
53                                numObjects++;
54                                if (minObjects >= numObjects) {
55                                        break;
56                                }
57                        }
58                }
59
60        }
61
62        @Override
63        public void unbindObject(OmqSettings settings, int numObjects) throws Exception {
64                String reference = settings.getReference();
65
66                int minObjects = settings.getMinNumberObjects();
67
68                for (RemoteBroker broker : brokers) {
69                        if (broker.hasObject(reference) && (numObjects - 1) >= minObjects) {
70                                broker.deleteObject(reference);
71                                break;
72                        }
73                }
74
75        }
76
77        public SupervisorThread getThread() {
78                return thread;
79        }
80
81        public void setThread(SupervisorThread thread) {
82                this.thread = thread;
83        }
84
85        public Map<String, OmqSettings> getObjectSettings() {
86                return objectSettings;
87        }
88
89        public void setObjectSettings(Map<String, OmqSettings> objectSettings) {
90                this.objectSettings = objectSettings;
91        }
92
93        public List<RemoteBroker> getBrokers() {
94                return brokers;
95        }
96
97        public void setBrokers(List<RemoteBroker> brokers) {
98                this.brokers = brokers;
99        }
100
101}
Note: See TracBrowser for help on using the repository browser.