1
2
3
4
5
6
7
8
9
10
11 package psiprobe;
12
13 import java.util.ArrayList;
14 import java.util.Collections;
15 import java.util.HashMap;
16 import java.util.List;
17 import java.util.Locale;
18 import java.util.Map;
19 import java.util.Properties;
20
21 import org.slf4j.Logger;
22 import org.slf4j.LoggerFactory;
23 import org.springframework.beans.factory.FactoryBean;
24 import org.springframework.beans.factory.annotation.Autowired;
25 import org.springframework.beans.factory.config.PropertiesFactoryBean;
26 import org.springframework.context.MessageSource;
27 import org.springframework.context.annotation.Bean;
28 import org.springframework.context.annotation.ComponentScan;
29 import org.springframework.context.annotation.Configuration;
30 import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
31 import org.springframework.context.support.ReloadableResourceBundleMessageSource;
32 import org.springframework.core.io.ClassPathResource;
33 import org.springframework.web.servlet.HandlerMapping;
34 import org.springframework.web.servlet.LocaleResolver;
35 import org.springframework.web.servlet.ThemeResolver;
36 import org.springframework.web.servlet.ViewResolver;
37 import org.springframework.web.servlet.config.annotation.EnableWebMvc;
38 import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
39 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
40 import org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping;
41 import org.springframework.web.servlet.i18n.CookieLocaleResolver;
42 import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
43 import org.springframework.web.servlet.theme.FixedThemeResolver;
44 import org.springframework.web.servlet.view.InternalResourceViewResolver;
45 import org.springframework.web.servlet.view.JstlView;
46
47 import psiprobe.beans.ClusterWrapperBean;
48 import psiprobe.beans.ContainerListenerBean;
49 import psiprobe.beans.ContainerWrapperBean;
50 import psiprobe.beans.JBossResourceResolverBean;
51 import psiprobe.beans.JvmMemoryInfoAccessorBean;
52 import psiprobe.beans.LogResolverBean;
53 import psiprobe.beans.ResourceResolver;
54 import psiprobe.beans.ResourceResolverBean;
55 import psiprobe.beans.RuntimeInfoAccessorBean;
56 import psiprobe.tools.Mailer;
57
58
59
60
61 @EnableWebMvc
62 @Configuration
63 @ComponentScan(basePackages = {"psiprobe"})
64 public class ProbeConfig implements WebMvcConfigurer {
65
66
67 private static final Logger logger = LoggerFactory.getLogger(ProbeConfig.class);
68
69
70
71
72
73
74 @Bean(name = "containerListener")
75 public ContainerListenerBean getContainerListenerBean() {
76 logger.debug("Instantiated containerListener");
77 return new ContainerListenerBean();
78 }
79
80
81
82
83
84
85 @Bean(name = "containerWrapper")
86 public ContainerWrapperBean getContainerWrapperBean() {
87 logger.debug("Instantiated containerWrapper");
88 return new ContainerWrapperBean();
89 }
90
91
92
93
94
95
96 @Bean(name = "clusterWrapper")
97 public ClusterWrapperBean getClusterWrapperBean() {
98 logger.debug("Instantiated clusterWrapper");
99 return new ClusterWrapperBean();
100 }
101
102
103
104
105
106
107 @Bean(name = "mailer")
108 public Mailer getMailer() {
109 logger.debug("Instantiated mailer");
110 return new Mailer();
111 }
112
113
114
115
116
117
118 @Bean(name = "datasourceMappers")
119 public List<String> getDefaultRes() {
120 logger.debug("Instantiated datasourceMappers");
121 List<String> list = new ArrayList<>();
122 list.add("psiprobe.beans.accessors.C3P0DatasourceAccessor");
123 list.add("psiprobe.beans.accessors.Dbcp2DatasourceAccessor");
124 list.add("psiprobe.beans.accessors.HikariCpDatasourceAccessor");
125 list.add("psiprobe.beans.accessors.OracleDatasourceAccessor");
126 list.add("psiprobe.beans.accessors.OracleUcpDatasourceAccessor");
127 list.add("psiprobe.beans.accessors.OpenEjbBasicDatasourceAccessor");
128 list.add("psiprobe.beans.accessors.OpenEjbManagedDatasourceAccessor");
129 list.add("psiprobe.beans.accessors.Tomcat85DbcpDatasourceAccessor");
130 list.add("psiprobe.beans.accessors.Tomcat9DbcpDatasourceAccessor");
131
132
133
134
135 list.add("psiprobe.beans.accessors.TomcatJdbcPoolDatasourceAccessor");
136 list.add("psiprobe.beans.accessors.TomEeJdbcPoolDatasourceAccessor");
137 list.add("psiprobe.beans.accessors.ViburCpDatasourceAccessor");
138 return list;
139 }
140
141
142
143
144
145
146 @Bean(name = "default")
147 public ResourceResolverBean getResourceResolverBean() {
148 logger.debug("Instantiated default resourceResolverBean");
149 return new ResourceResolverBean();
150 }
151
152
153
154
155
156
157 @Bean(name = "jboss")
158 public JBossResourceResolverBean getJBossResourceResolverBean() {
159 logger.debug("Instantiated jbossResourceResolverBean");
160 return new JBossResourceResolverBean();
161 }
162
163
164
165
166
167
168
169
170
171 @Bean(name = "resourceResolvers")
172 public Map<String, ResourceResolver> getResourceResolvers(
173 @Autowired JBossResourceResolverBean jbossResourceResolverBean,
174 @Autowired ResourceResolverBean resourceResolverBean) {
175 logger.debug("Instantiated resourceResolvers");
176 Map<String, ResourceResolver> map = new HashMap<>();
177 map.put("jboss", jbossResourceResolverBean);
178 map.put("default", resourceResolverBean);
179 return map;
180 }
181
182
183
184
185
186
187 @Bean(name = "adapterClasses")
188 public List<String> getAdapterClasses() {
189 logger.debug("Instantiated adapterClasses");
190 List<String> list = new ArrayList<>();
191 try {
192 Properties properties = adapters().getObject();
193 if (properties == null) {
194 return Collections.emptyList();
195 }
196 for (Object adapter : properties.values()) {
197 list.add((String) adapter);
198 }
199 } catch (Exception e) {
200 logger.error("", e);
201 }
202 return list;
203 }
204
205
206
207
208
209
210 @Bean(name = "stdoutFiles")
211 public List<String> getStdoutFiles() {
212 logger.debug("Instantiated stdoutFiles");
213 List<String> list = new ArrayList<>();
214 try {
215 Properties properties = stdout().getObject();
216 if (properties == null) {
217 return Collections.emptyList();
218 }
219 for (Object stdout : properties.values()) {
220 list.add((String) stdout);
221 }
222 } catch (Exception e) {
223 logger.error("", e);
224 }
225 return list;
226 }
227
228
229
230
231
232
233 @Bean(name = "stdout")
234 public FactoryBean<Properties> stdout() {
235 logger.debug("Instantiated stdout");
236 PropertiesFactoryBean bean = new PropertiesFactoryBean();
237 bean.setLocation(new ClassPathResource("stdout.properties"));
238 return bean;
239 }
240
241
242
243
244
245
246 @Bean(name = "adapters")
247 public FactoryBean<Properties> adapters() {
248 logger.debug("Instantiated adapters");
249 PropertiesFactoryBean bean = new PropertiesFactoryBean();
250 bean.setLocation(new ClassPathResource("adapters.properties"));
251 return bean;
252 }
253
254
255
256
257
258
259 @Bean(name = "logResolver")
260 public LogResolverBean getLogResolverBean() {
261 logger.debug("Instantiated logResolver");
262 return new LogResolverBean();
263 }
264
265
266
267
268
269
270 @Bean(name = "jvmMemoryInfoAccessor")
271 public JvmMemoryInfoAccessorBean getJvmMemoryInfoAccessorBean() {
272 logger.debug("Instantiated jvmMemoryInfoAccessorBean");
273 return new JvmMemoryInfoAccessorBean();
274 }
275
276
277
278
279
280
281 @Bean(name = "runtimeInfoAccessor")
282 public RuntimeInfoAccessorBean getRuntimeInfoAccessorBean() {
283 logger.debug("Instantiated runtimeInfoAccessorBean");
284 return new RuntimeInfoAccessorBean();
285 }
286
287
288
289
290
291
292 @Bean(name = "jspViewResolver")
293 public ViewResolver getViewResolver() {
294 logger.debug("Instantiated internalResourceViewResolver");
295 InternalResourceViewResolver resolver = new InternalResourceViewResolver();
296 resolver.setViewClass(JstlView.class);
297 resolver.setPrefix("/WEB-INF/jsp/");
298 resolver.setSuffix(".jsp");
299 return resolver;
300 }
301
302
303
304
305
306
307 @Bean(name = "themeResolver")
308 public ThemeResolver getThemeResolver() {
309 logger.debug("Instantiated fixedThemeResolver");
310 FixedThemeResolver resolver = new FixedThemeResolver();
311 resolver.setDefaultThemeName("theme-classic");
312 return resolver;
313 }
314
315
316
317
318
319
320 @Bean(name = "messageSource")
321 public MessageSource getMessageSource() {
322 logger.debug("Instantiated reloadableResourceBundleMessageSource");
323 ReloadableResourceBundleMessageSource source = new ReloadableResourceBundleMessageSource();
324 source.setBasename("/WEB-INF/messages");
325 source.setCacheSeconds(1);
326 source.setFallbackToSystemLocale(false);
327 return source;
328 }
329
330
331
332
333
334
335 @Bean(name = "localeResolver")
336 public LocaleResolver getLocaleResolver() {
337 logger.debug("Instantiated cookieLocaleResolver");
338 CookieLocaleResolver resolver = new CookieLocaleResolver();
339 resolver.setDefaultLocale(Locale.ENGLISH);
340 resolver.setCookieSecure(true);
341 resolver.setCookieHttpOnly(true);
342 return resolver;
343 }
344
345
346
347
348
349
350
351
352 @Bean(name = "handlerMapping")
353 public HandlerMapping getHandlerMapping(@Autowired LocaleChangeInterceptor interceptor) {
354 logger.debug("Instantiated beanNameUrlHandlerMapping");
355 BeanNameUrlHandlerMapping mapping = new BeanNameUrlHandlerMapping();
356 mapping.setAlwaysUseFullPath(true);
357 mapping.setInterceptors(interceptor);
358 return mapping;
359 }
360
361 @Override
362 public void addInterceptors(InterceptorRegistry registry) {
363 logger.debug("Registering localeChangeInterceptor");
364 registry.addInterceptor(getLocaleChangeInterceptor());
365 }
366
367
368
369
370
371
372 @Bean(name = "localeChangeInterceptor")
373 public LocaleChangeInterceptor getLocaleChangeInterceptor() {
374 logger.debug("Instantiated localeChangeInterceptor");
375 LocaleChangeInterceptor interceptor = new LocaleChangeInterceptor();
376 interceptor.setParamName("lang");
377 return interceptor;
378 }
379
380
381
382
383
384
385 @Bean(name = "propertySourcesPlaceholderConfigurer")
386 public static PropertySourcesPlaceholderConfigurer getPropertySourcesPlaceholderConfigurer() {
387 logger.debug("Instantiated propertySourcesPlaceholderConfigurer");
388 PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
389 configurer.setLocation(new ClassPathResource("stats.properties"));
390 configurer.setNullValue("NULL");
391
392 Properties properties = new Properties();
393 properties.put("psiprobe.tools.mail.to", "NULL");
394 properties.put("psiprobe.tools.mail.subjectPrefix", "[PSI Probe]");
395 configurer.setProperties(properties);
396 return configurer;
397 }
398
399
400
401
402
403
404 @Bean(name = "version")
405 public PropertiesFactoryBean version() {
406 logger.debug("Instantiated version");
407 PropertiesFactoryBean bean = new PropertiesFactoryBean();
408 bean.setLocation(new ClassPathResource("version.properties"));
409 return bean;
410 }
411
412 }