1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package ch.elca.el4j.services.monitoring;
18
19 import org.springframework.beans.BeansException;
20 import org.springframework.beans.factory.config.BeanDefinition;
21 import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
22 import org.springframework.beans.factory.config.PropertyOverrideConfigurer;
23 import org.springframework.beans.factory.config.TypedStringValue;
24
25
26
27
28
29
30
31
32 public class JamonDatasourcePropertyOverrideConfigurer extends PropertyOverrideConfigurer {
33
34 private static final String DATA_SOURCE_BEAN_NAME = "dataSource";
35 private static final String DRIVER_CLASS = "driverClass";
36 private static final String JDBC_URL = "jdbcUrl";
37
38
39 @Override
40 public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
41 BeanDefinition bd = beanFactory.getBeanDefinition(DATA_SOURCE_BEAN_NAME);
42 while (bd.getOriginatingBeanDefinition() != null) {
43 bd = bd.getOriginatingBeanDefinition();
44 }
45
46 String oldDriver = getPropertyValue(bd, DRIVER_CLASS);
47 String oldJdbcUrl = getPropertyValue(bd, JDBC_URL);
48
49 String newJdbcUrl = oldJdbcUrl.replace("jdbc:", "jdbc:jamon:") + "jamonrealdriver=" + oldDriver;
50
51 bd.getPropertyValues().addPropertyValue(DRIVER_CLASS, new TypedStringValue("com.jamonapi.proxy.JAMonDriver"));
52 bd.getPropertyValues().addPropertyValue(JDBC_URL, new TypedStringValue(newJdbcUrl));
53 }
54
55
56
57
58
59
60 private String getPropertyValue(BeanDefinition bd, String property) {
61 Object valueObject = bd.getPropertyValues().getPropertyValue(property).getValue();
62 if (valueObject instanceof TypedStringValue) {
63 return ((TypedStringValue) valueObject).getValue();
64 } else {
65 return valueObject.toString();
66 }
67 }
68 }