001    package org.otfeed.j2ee.ra;
002    
003    import java.io.Serializable;
004    
005    import javax.naming.NamingException;
006    import javax.naming.Reference;
007    import javax.resource.Referenceable;
008    import javax.resource.ResourceException;
009    import javax.resource.spi.ConnectionManager;
010    
011    import org.otfeed.OTConnectionSpec;
012    import org.otfeed.OTException;
013    import org.otfeed.support.alt.IOutboundConnection;
014    import org.otfeed.support.alt.IOutboundConnectionFactory;
015    
016    public class OtfeedConnectionFactory implements 
017                    Referenceable, Serializable, IOutboundConnectionFactory {
018            
019            private static final long serialVersionUID = -2261966417969117702L;
020            
021            // JNDI Reference to this ConnectionFactory
022            private Reference reference;
023            
024            private final OtfeedManagedConnectionFactory managedConnectionFactory;
025            private final ConnectionManager connectionManager;
026            
027            public OtfeedConnectionFactory(
028                            OtfeedManagedConnectionFactory mcf, 
029                            ConnectionManager cm) {
030                    managedConnectionFactory = mcf;
031                    connectionManager = cm;
032            }
033    
034            public void setReference(Reference val) {
035                    reference = val;
036            }
037    
038            public Reference getReference() throws NamingException {
039                    return reference;
040            }
041            
042            public IOutboundConnection getConnection(OTConnectionSpec spec) throws OTException {
043                    try {
044                            OtfeedConnectionRequestInfo info = new OtfeedConnectionRequestInfo();
045                            info.setHosts(spec.getHosts());
046                            info.setUsername(spec.getUsername());
047                            info.setPassword(spec.getPassword());
048                            info.setHeartbeatInterval(spec.getHeartbeatInterval());
049                            
050                            return (IOutboundConnection) connectionManager.allocateConnection(
051                                                    managedConnectionFactory, info);
052                    } catch(ResourceException ex) {
053                            throw new OTException(ex);
054                    }
055            }
056    
057            public String toString() {
058                    return getClass().getSimpleName();
059            }
060    }