1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package ch.elca.el4j.services.monitoring.jmx;
19
20 import javax.management.MBeanServer;
21 import javax.management.ObjectName;
22
23 import org.springframework.beans.factory.DisposableBean;
24 import org.springframework.beans.factory.FactoryBean;
25 import org.springframework.beans.factory.InitializingBean;
26 import org.springframework.util.StringUtils;
27
28 import com.sun.jdmk.comm.HtmlAdaptorServer;
29
30 import ch.elca.el4j.services.monitoring.notification.CoreNotificationHelper;
31
32
33
34
35
36
37
38
39 public class HtmlAdapterFactoryBean
40 implements FactoryBean, InitializingBean, DisposableBean {
41
42
43
44
45 private static int s_counter = 1;
46
47
48
49
50 private static final int DEFAULT_PORT = 9092;
51
52
53
54
55 private int m_instanceCounter = 1;
56
57
58
59
60 private HtmlAdaptorServer m_htmlAdaptorServer;
61
62
63
64
65 private MBeanServer m_server;
66
67
68
69
70 private boolean m_ignoreInstanceAlreadyExistsException = false;
71
72
73
74
75
76 private String m_stylesheetPath = "etc/jmx/stylesheet.css";
77
78
79
80
81 private int m_port = DEFAULT_PORT;
82
83
84
85
86 private String m_name = null;
87
88
89
90
91 private String m_htmlParserName = null;
92
93
94
95
96 public Object getObject() throws Exception {
97 return m_htmlAdaptorServer;
98 }
99
100
101
102
103 public Class getObjectType() {
104 return HtmlAdaptorServer.class;
105 }
106
107
108
109
110 public boolean isSingleton() {
111 return true;
112 }
113
114
115
116
117
118
119
120
121 public void afterPropertiesSet() throws Exception {
122 CoreNotificationHelper.notifyIfEssentialPropertyIsEmpty(
123 getServer(), "server", this);
124 CoreNotificationHelper.notifyIfEssentialPropertyIsEmpty(
125 getStylesheetPath(), "stylesheetPath", this);
126
127
128
129
130 setInstanceCounter();
131
132 if (!StringUtils.hasText(m_htmlParserName)) {
133 m_htmlParserName = "HtmlAdapter:name=HtmlParser" + getInstanceCounter();
134 }
135 ObjectName htmlParserObjectName = new ObjectName(m_htmlParserName);
136 if (!getServer().isRegistered(htmlParserObjectName) || !m_ignoreInstanceAlreadyExistsException) {
137
138
139
140
141 CssHtmlParser htmlParser = new CssHtmlParser(getStylesheetPath());
142
143 getServer().registerMBean(htmlParser, htmlParserObjectName);
144 }
145
146 if (!StringUtils.hasText(m_name)) {
147 m_name = "HtmlAdapter:name=HtmlAdapter" + getInstanceCounter();
148 }
149 ObjectName htmlAdapterServerObjectName = new ObjectName(getName());
150 if (!getServer().isRegistered(htmlAdapterServerObjectName) || !m_ignoreInstanceAlreadyExistsException) {
151
152
153
154
155 m_htmlAdaptorServer = new HtmlAdaptorServer();
156 m_htmlAdaptorServer.setPort(m_port);
157
158 getServer().registerMBean(m_htmlAdaptorServer, htmlAdapterServerObjectName);
159
160
161
162
163 m_htmlAdaptorServer.setParser(htmlParserObjectName);
164 m_htmlAdaptorServer.start();
165 }
166 }
167
168
169
170
171
172
173 public int getInstanceCounter() {
174 return m_instanceCounter;
175 }
176
177
178
179
180
181 public void setInstanceCounter() {
182 synchronized (HtmlAdapterFactoryBean.class) {
183 m_instanceCounter = s_counter;
184 s_counter++;
185 }
186 }
187
188
189
190
191
192
193 public int getPort() {
194 return m_port;
195 }
196
197
198
199
200
201
202
203 public void setPort(int port) {
204 this.m_port = port;
205 }
206
207
208
209
210
211
212 public MBeanServer getServer() {
213 return m_server;
214 }
215
216
217
218
219
220
221
222 public void setServer(MBeanServer mBeanServer) {
223 this.m_server = mBeanServer;
224 }
225
226
227
228
229 public boolean isIgnoreInstanceAlreadyExistsException() {
230 return m_ignoreInstanceAlreadyExistsException;
231 }
232
233
234
235
236 public void setIgnoreInstanceAlreadyExistsException(boolean ignoreInstanceAlreadyExistsException) {
237 m_ignoreInstanceAlreadyExistsException = ignoreInstanceAlreadyExistsException;
238 }
239
240
241
242
243
244
245 public String getName() {
246 return m_name;
247 }
248
249
250
251
252
253
254
255 public void setName(String name) {
256 m_name = name;
257 }
258
259
260
261
262 public String getHtmlParserName() {
263 return m_htmlParserName;
264 }
265
266
267
268
269 public void setHtmlParserName(String htmlParserName) {
270 m_htmlParserName = htmlParserName;
271 }
272
273
274
275
276 public String getStylesheetPath() {
277 return m_stylesheetPath;
278 }
279
280
281
282
283 public void setStylesheetPath(String stylesheetPath) {
284 m_stylesheetPath = stylesheetPath;
285 }
286
287
288
289
290
291
292 public HtmlAdaptorServer getHtmlAdaptorServer() {
293 return m_htmlAdaptorServer;
294 }
295
296
297
298
299 public void destroy() throws Exception {
300
301 if (m_htmlAdaptorServer != null) {
302 m_htmlAdaptorServer.stop();
303 getServer().unregisterMBean(new ObjectName(m_htmlParserName));
304 getServer().unregisterMBean(new ObjectName(getName()));
305 }
306 }
307 }