1
2
3
4
5
6
7
8
9
10
11 package psiprobe;
12
13 import java.util.ArrayList;
14 import java.util.HashMap;
15 import java.util.List;
16 import java.util.Locale;
17 import java.util.Map;
18 import java.util.Properties;
19
20 import org.slf4j.Logger;
21 import org.slf4j.LoggerFactory;
22 import org.springframework.beans.factory.FactoryBean;
23 import org.springframework.beans.factory.annotation.Autowired;
24 import org.springframework.beans.factory.config.PropertiesFactoryBean;
25 import org.springframework.context.MessageSource;
26 import org.springframework.context.annotation.Bean;
27 import org.springframework.context.annotation.ComponentScan;
28 import org.springframework.context.annotation.Configuration;
29 import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
30 import org.springframework.context.support.ReloadableResourceBundleMessageSource;
31 import org.springframework.core.io.ClassPathResource;
32 import org.springframework.web.multipart.support.StandardServletMultipartResolver;
33 import org.springframework.web.servlet.HandlerMapping;
34 import org.springframework.web.servlet.LocaleResolver;
35 import org.springframework.web.servlet.ViewResolver;
36 import org.springframework.web.servlet.config.annotation.EnableWebMvc;
37 import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
38 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
39 import org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping;
40 import org.springframework.web.servlet.i18n.CookieLocaleResolver;
41 import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
42 import org.springframework.web.servlet.view.InternalResourceViewResolver;
43 import org.springframework.web.servlet.view.JstlView;
44 import org.springframework.web.util.pattern.PathPatternParser;
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.FlexyPoolDatasourceAccessor");
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.Tomcat10DbcpDatasourceAccessor");
130 list.add("psiprobe.beans.accessors.Tomcat11DbcpDatasourceAccessor");
131 list.add("psiprobe.beans.accessors.TomcatJdbcPoolDatasourceAccessor");
132 list.add("psiprobe.beans.accessors.TomEeJdbcPoolDatasourceAccessor");
133 list.add("psiprobe.beans.accessors.ViburCpDatasourceAccessor");
134 return list;
135 }
136
137
138
139
140
141
142 @Bean(name = "default")
143 public ResourceResolverBean getResourceResolverBean() {
144 logger.debug("Instantiated default resourceResolverBean");
145 return new ResourceResolverBean();
146 }
147
148
149
150
151
152
153 @Bean(name = "jboss")
154 public JBossResourceResolverBean getJBossResourceResolverBean() {
155 logger.debug("Instantiated jbossResourceResolverBean");
156 return new JBossResourceResolverBean();
157 }
158
159
160
161
162
163
164
165
166
167 @Bean(name = "resourceResolvers")
168 public Map<String, ResourceResolver> getResourceResolvers(
169 @Autowired JBossResourceResolverBean jbossResourceResolverBean,
170 @Autowired ResourceResolverBean resourceResolverBean) {
171 logger.debug("Instantiated resourceResolvers");
172 Map<String, ResourceResolver> map = new HashMap<>();
173 map.put("jboss", jbossResourceResolverBean);
174 map.put("default", resourceResolverBean);
175 return map;
176 }
177
178
179
180
181
182
183 @Bean(name = "adapterClasses")
184 public List<String> getAdapterClasses() {
185 logger.debug("Instantiated adapterClasses");
186 List<String> list = new ArrayList<>();
187 try {
188 Properties properties = adapters().getObject();
189 if (properties == null) {
190 return List.of();
191 }
192 for (Object adapter : properties.values()) {
193 list.add((String) adapter);
194 }
195 } catch (Exception e) {
196 logger.error("", e);
197 }
198 return list;
199 }
200
201
202
203
204
205
206 @Bean(name = "stdoutFiles")
207 public List<String> getStdoutFiles() {
208 logger.debug("Instantiated stdoutFiles");
209 List<String> list = new ArrayList<>();
210 try {
211 Properties properties = stdout().getObject();
212 if (properties == null) {
213 return List.of();
214 }
215 for (Object stdout : properties.values()) {
216 list.add((String) stdout);
217 }
218 } catch (Exception e) {
219 logger.error("", e);
220 }
221 return list;
222 }
223
224
225
226
227
228
229 @Bean(name = "stdout")
230 public FactoryBean<Properties> stdout() {
231 logger.debug("Instantiated stdout");
232 PropertiesFactoryBean bean = new PropertiesFactoryBean();
233 bean.setLocation(new ClassPathResource("stdout.properties"));
234 return bean;
235 }
236
237
238
239
240
241
242 @Bean(name = "adapters")
243 public FactoryBean<Properties> adapters() {
244 logger.debug("Instantiated adapters");
245 PropertiesFactoryBean bean = new PropertiesFactoryBean();
246 bean.setLocation(new ClassPathResource("adapters.properties"));
247 return bean;
248 }
249
250
251
252
253
254
255 @Bean(name = "logResolver")
256 public LogResolverBean getLogResolverBean() {
257 logger.debug("Instantiated logResolver");
258 return new LogResolverBean();
259 }
260
261
262
263
264
265
266 @Bean(name = "jvmMemoryInfoAccessor")
267 public JvmMemoryInfoAccessorBean getJvmMemoryInfoAccessorBean() {
268 logger.debug("Instantiated jvmMemoryInfoAccessorBean");
269 return new JvmMemoryInfoAccessorBean();
270 }
271
272
273
274
275
276
277 @Bean(name = "runtimeInfoAccessor")
278 public RuntimeInfoAccessorBean getRuntimeInfoAccessorBean() {
279 logger.debug("Instantiated runtimeInfoAccessorBean");
280 return new RuntimeInfoAccessorBean();
281 }
282
283
284
285
286
287
288 @Bean(name = "jspViewResolver")
289 public ViewResolver getViewResolver() {
290 logger.debug("Instantiated internalResourceViewResolver");
291 InternalResourceViewResolver resolver = new InternalResourceViewResolver();
292 resolver.setViewClass(JstlView.class);
293 resolver.setPrefix("/WEB-INF/jsp/");
294 resolver.setSuffix(".jsp");
295 return resolver;
296 }
297
298
299
300
301
302
303 @Bean(name = "messageSource")
304 public MessageSource getMessageSource() {
305 logger.debug("Instantiated reloadableResourceBundleMessageSource");
306 ReloadableResourceBundleMessageSource source = new ReloadableResourceBundleMessageSource();
307 source.setBasename("/WEB-INF/messages");
308 source.setCacheSeconds(1);
309 source.setFallbackToSystemLocale(false);
310 return source;
311 }
312
313
314
315
316
317
318 @Bean(name = "localeResolver")
319 public LocaleResolver getLocaleResolver() {
320 logger.debug("Instantiated cookieLocaleResolver");
321 CookieLocaleResolver resolver = new CookieLocaleResolver();
322 resolver.setDefaultLocale(Locale.ENGLISH);
323 resolver.setCookieSecure(true);
324 resolver.setCookieHttpOnly(true);
325 return resolver;
326 }
327
328
329
330
331
332
333
334
335 @Bean(name = "handlerMapping")
336 public HandlerMapping getHandlerMapping(@Autowired LocaleChangeInterceptor interceptor) {
337 logger.debug("Instantiated beanNameUrlHandlerMapping");
338 BeanNameUrlHandlerMapping mapping = new BeanNameUrlHandlerMapping();
339 mapping.setPatternParser(PathPatternParser.defaultInstance);
340 mapping.setInterceptors(interceptor);
341 return mapping;
342 }
343
344 @Override
345 public void addInterceptors(InterceptorRegistry registry) {
346 logger.debug("Registering localeChangeInterceptor");
347 registry.addInterceptor(getLocaleChangeInterceptor());
348 }
349
350
351
352
353
354
355 @Bean(name = "localeChangeInterceptor")
356 public LocaleChangeInterceptor getLocaleChangeInterceptor() {
357 logger.debug("Instantiated localeChangeInterceptor");
358 LocaleChangeInterceptor interceptor = new LocaleChangeInterceptor();
359 interceptor.setParamName("lang");
360 return interceptor;
361 }
362
363
364
365
366
367
368 @Bean(name = "propertySourcesPlaceholderConfigurer")
369 public static PropertySourcesPlaceholderConfigurer getPropertySourcesPlaceholderConfigurer() {
370 logger.debug("Instantiated propertySourcesPlaceholderConfigurer");
371 PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
372 configurer.setLocation(new ClassPathResource("stats.properties"));
373 configurer.setNullValue("NULL");
374
375 Properties properties = new Properties();
376 properties.put("psiprobe.tools.mail.to", "NULL");
377 properties.put("psiprobe.tools.mail.subjectPrefix", "[PSI Probe]");
378 configurer.setProperties(properties);
379 return configurer;
380 }
381
382
383
384
385
386
387 @Bean(name = "version")
388 public PropertiesFactoryBean version() {
389 logger.debug("Instantiated version");
390 PropertiesFactoryBean bean = new PropertiesFactoryBean();
391 bean.setLocation(new ClassPathResource("version.properties"));
392 return bean;
393 }
394
395
396
397
398
399
400 @Bean(name = "multipartResolver")
401 public StandardServletMultipartResolver multipartResolver() {
402 return new StandardServletMultipartResolver();
403 }
404
405 }