001    package biz.hammurapi.jms.adapter;
002    
003    import javax.jms.ConnectionFactory;
004    import javax.jms.Destination;
005    
006    import biz.hammurapi.config.Component;
007    import biz.hammurapi.config.ConfigurationException;
008    import biz.hammurapi.config.Wrapper;
009    
010    public class FactoryConnection extends JmsConnection implements DestinationResolver {
011    
012            private Object factory;
013    
014            public FactoryConnection(JmsAdapter jmsAdapter, biz.hammurapi.jms.adapter.definition.FactoryConnection definition) throws ConfigurationException {
015                    super(jmsAdapter, definition);
016                    factory = JmsAdapter.instantiate(definition.getFactory());
017                    if (factory instanceof Component) {
018                            ((Component) factory).setOwner(this);
019                    }
020            }
021    
022            public void start() throws ConfigurationException {
023                    if (factory instanceof Component) {
024                            ((Component) factory).start();
025                    }
026                    super.start();
027            }
028    
029            public void stop() throws ConfigurationException {
030                    super.stop();
031                    if (factory instanceof Component) {
032                            ((Component) factory).stop();
033                    }
034            }
035    
036            public Destination lookupDestination(String name) throws ConfigurationException {
037                    return ((DestinationResolver) (factory instanceof Wrapper ? ((Wrapper) factory).getMaster() : factory)).lookupDestination(name);
038            }
039    
040            protected ConnectionFactory getConnectionFactory() throws ConfigurationException {
041                    return (ConnectionFactory) (factory instanceof Wrapper ? ((Wrapper) factory).getMaster() : factory);
042            }
043    
044    }