[1227] | 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.rootBeanDefinition(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.rootBeanDefinition(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 | }
|
---|