1 | package gov.va.med.edp.vistalink.locator;
|
---|
2 |
|
---|
3 | import gov.va.med.edp.vistalink.ConnectionFactoryLocator;
|
---|
4 | import gov.va.med.edp.vistalink.adapter.spi.VistaLinkManagedConnectionFactory;
|
---|
5 | import org.springframework.beans.factory.BeanFactory;
|
---|
6 | import org.springframework.beans.factory.config.BeanDefinition;
|
---|
7 | import org.springframework.beans.factory.support.BeanDefinitionBuilder;
|
---|
8 | import org.springframework.beans.factory.support.DefaultListableBeanFactory;
|
---|
9 | import org.springframework.dao.DataAccessResourceFailureException;
|
---|
10 | import org.springframework.jca.support.LocalConnectionFactoryBean;
|
---|
11 |
|
---|
12 | import javax.resource.cci.ConnectionFactory;
|
---|
13 | import java.util.HashMap;
|
---|
14 | import java.util.Map;
|
---|
15 | import java.util.Set;
|
---|
16 | import java.util.Iterator;
|
---|
17 |
|
---|
18 | public class VistaLinkConnectorConfigConnectionFactoryLocator implements ConnectionFactoryLocator {
|
---|
19 |
|
---|
20 | private static final String VLJ_CONNECTOR_PREFIX = "vljConnector";
|
---|
21 |
|
---|
22 | private Map/*<String, VistaLinkConnectorConfig>*/ connectors = new HashMap/*<String, VistaLinkConnectorConfig>*/();
|
---|
23 | private BeanFactoryConnectionFactoryLocator locator = new BeanFactoryConnectionFactoryLocator();
|
---|
24 |
|
---|
25 | public VistaLinkConnectorConfigConnectionFactoryLocator() {
|
---|
26 | locator.setPrefix(VLJ_CONNECTOR_PREFIX);
|
---|
27 | locator.setBeanFactory(createBeanFactory());
|
---|
28 | }
|
---|
29 |
|
---|
30 | private BeanFactory createBeanFactory() {
|
---|
31 | DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
|
---|
32 | for (Iterator i = connectors.values().iterator(); i.hasNext(); ) {
|
---|
33 | VistaLinkConnectorConfig connector = (VistaLinkConnectorConfig) i.next();
|
---|
34 | beanFactory.registerBeanDefinition(getManagedConnectionFactoryBeanName(connector), createManagedConnectionFactoryBeanDefinition(connector));
|
---|
35 | beanFactory.registerBeanDefinition(getConnectionFactoryBeanName(connector), createConnectionFactoryBeanDefinition(connector));
|
---|
36 | }
|
---|
37 | return beanFactory;
|
---|
38 | }
|
---|
39 |
|
---|
40 | private String getConnectionFactoryBeanName(VistaLinkConnectorConfig connector) {
|
---|
41 | return VLJ_CONNECTOR_PREFIX + connector.getPrimaryStation();
|
---|
42 | }
|
---|
43 |
|
---|
44 | private BeanDefinition createManagedConnectionFactoryBeanDefinition(VistaLinkConnectorConfig connector) {
|
---|
45 | BeanDefinitionBuilder managedConnectionFactoryBeanDefBuilder = BeanDefinitionBuilder.genericBeanDefinition(VistaLinkManagedConnectionFactory.class);
|
---|
46 | managedConnectionFactoryBeanDefBuilder.addPropertyValue("stationNumber", connector.getPrimaryStation());
|
---|
47 | managedConnectionFactoryBeanDefBuilder.addPropertyValue("nonManagedHostIPAddress", connector.getHost());
|
---|
48 | managedConnectionFactoryBeanDefBuilder.addPropertyValue("nonManagedHostPort", new Integer(connector.getPort()));
|
---|
49 | managedConnectionFactoryBeanDefBuilder.addPropertyValue("nonManagedAccessCode", connector.getAccessCode());
|
---|
50 | managedConnectionFactoryBeanDefBuilder.addPropertyValue("nonManagedVerifyCode", connector.getVerifyCode());
|
---|
51 | return managedConnectionFactoryBeanDefBuilder.getBeanDefinition();
|
---|
52 | }
|
---|
53 |
|
---|
54 | private BeanDefinition createConnectionFactoryBeanDefinition(VistaLinkConnectorConfig connector) {
|
---|
55 | BeanDefinitionBuilder localConnectionFactoryBeanDefBuilder = BeanDefinitionBuilder.genericBeanDefinition(LocalConnectionFactoryBean.class);
|
---|
56 | localConnectionFactoryBeanDefBuilder.addPropertyReference("managedConnectionFactory", getManagedConnectionFactoryBeanName(connector));
|
---|
57 | return localConnectionFactoryBeanDefBuilder.getBeanDefinition();
|
---|
58 | }
|
---|
59 |
|
---|
60 | private String getManagedConnectionFactoryBeanName(VistaLinkConnectorConfig connector) {
|
---|
61 | return "vljManagedConnectionFactory" + connector.getPrimaryStation();
|
---|
62 | }
|
---|
63 |
|
---|
64 | public ConnectionFactory getConnectionFactory(String stationNumber) throws DataAccessResourceFailureException {
|
---|
65 | return locator.getConnectionFactory(stationNumber);
|
---|
66 | }
|
---|
67 |
|
---|
68 | public void setConnectors(Set/*<VistaLinkConnectorConfig>*/ connectors) {
|
---|
69 | for (Iterator i = connectors.iterator(); i.hasNext(); ) {
|
---|
70 | VistaLinkConnectorConfig connector = (VistaLinkConnectorConfig) i.next();
|
---|
71 | this.connectors.put(connector.getPrimaryStation(), connector);
|
---|
72 | }
|
---|
73 | locator.setBeanFactory(createBeanFactory());
|
---|
74 | }
|
---|
75 | }
|
---|