LoadBalancer.java
biz/hammurapi/util/LoadBalancer.java
Violations
Inspector |
Message |
Severity |
Location |
Java Inspector 048 |
Copyrights information should be present in each file. |
1 |
|
Java Inspector 089 |
Undocumented method |
2 |
68:17
|
Java Inspector 089 |
Undocumented method |
2 |
90:9
|
Java Inspector 089 |
Undocumented method |
2 |
105:9
|
Java Inspector 026 |
Avoid hardwired string literals. Allowed literals: [] |
3 |
62:68
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23package biz.hammurapi.util;
24
25import java.util.ArrayList;
26import java.util.Collections;
27import java.util.Iterator;
28import java.util.List;
29
30
31
32
33
34
35
36
37public class LoadBalancer implements Worker {
38
39 private List workers=new ArrayList();
40
41 private void descore() {
42 synchronized (workers) {
43 Iterator it=workers.iterator();
44 while (it.hasNext()) {
45 ((WorkerEntry) it.next()).score-=Integer.MAX_VALUE;
46 }
47 }
48 }
49
50 private class WorkerEntry implements Comparable {
51 Worker worker;
52 int weight;
53 int score;
54
55
56
57
58
59 WorkerEntry(Worker worker, int weight) {
60 super();
61 if (weight<1) {
62 throw new IllegalArgumentException("Worker weight must be >0");
63 }
64 this.worker = worker;
65 this.weight = weight;
66 }
67
68 public int compareTo(Object o) {
69 if (o instanceof WorkerEntry) {
70 return score-((WorkerEntry) o).score;
71 }
72
73 return hashCode()-o.hashCode();
74 }
75
76 boolean post(Runnable job) {
77 if (worker.post(job)) {
78
79 if (score>Integer.MAX_VALUE-weight) {
80 descore();
81 }
82
83 score+=weight;
84 return true;
85 }
86 return false;
87 }
88 }
89
90 public boolean post(Runnable job) {
91 synchronized (workers) {
92 Collections.sort(workers);
93 Iterator it=workers.iterator();
94 while (it.hasNext()) {
95 WorkerEntry we=(WorkerEntry) it.next();
96 if (we.post(job)) {
97 return true;
98 }
99 }
100 }
101
102 return false;
103 }
104
105 public void addWorker(Worker worker, int weight) {
106 synchronized (workers) {
107 workers.add(new WorkerEntry(worker, weight));
108 }
109 }
110}
111