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