/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.jca.adapter; import java.io.PrintWriter; import java.net.URL; import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; import javax.resource.ResourceException; import javax.resource.spi.ConnectionManager; import javax.resource.spi.ConnectionRequestInfo; import javax.resource.spi.ManagedConnection; import javax.resource.spi.ManagedConnectionFactory; import javax.security.auth.Subject; import org.jboss.logging.Logger; /** * ManagedConnectionFactory.java * * @author <a href="mailto:d_jencks@users.sourceforge.net">David Jencks</a> * @author <a href="mailto:adrian@jboss.com">Adrian Brock</a> * @version <tt>$Revision: 81036 $</tt> */ public class TestManagedConnectionFactory implements ManagedConnectionFactory { /** The serialVersionUID */ private static final long serialVersionUID = 1L; private Logger log = Logger.getLogger(TestManagedConnectionFactory.class); //number the managed connections AtomicInteger id = new AtomicInteger(0); String failure; boolean failJoin; long sleepInStart; long sleepInEnd; Map xids = new WrapperMap(new HashMap()); public TestManagedConnectionFactory() { } public void setFailure(String failure) { this.failure = failure; } public boolean getFailJoin() { return failJoin; } public void setFailJoin(boolean failJoin) { this.failJoin = failJoin; } public long getSleepInStart() { return sleepInStart; } public void setSleepInStart(long sleep) { this.sleepInStart = sleep; } public long getSleepInEnd() { return sleepInEnd; } public void setSleepInEnd(long sleep) { this.sleepInEnd = sleep; } // implementation of javax.resource.spi.ManagedConnectionFactory interface public int hashCode() { return getClass().hashCode(); } public boolean equals(Object other) { return (other != null) && (other.getClass() == getClass()); } public void setLogWriter(PrintWriter param1) throws ResourceException { } public PrintWriter getLogWriter() throws ResourceException { return null; } public Object createConnectionFactory(ConnectionManager cm) throws ResourceException { return new TestConnectionFactory(cm, this); } public Object createConnectionFactory() throws ResourceException { throw new ResourceException("not yet implemented"); } public ManagedConnection createManagedConnection(Subject subject, ConnectionRequestInfo cri) throws ResourceException { if (failure != null && failure.equals("createManagedConnectionResource")) throw new ResourceException(""); if (failure != null && failure.equals("createManagedConnectionRuntime")) throw new RuntimeException(""); return new TestManagedConnection(this, subject, (TestConnectionRequestInfo)cri, id.incrementAndGet()); } public ManagedConnection matchManagedConnections(Set candidates, Subject subject, ConnectionRequestInfo cri) throws ResourceException { if (failure != null && failure.equals("matchManagedConnectionResource")) throw new ResourceException(""); if (failure != null && failure.equals("matchManagedConnectionRuntime")) throw new RuntimeException(""); if (candidates.isEmpty()) return null; return (ManagedConnection)candidates.iterator().next(); } Integer integerProperty; public Integer getIntegerProperty() { return integerProperty; } /** * Set the IntegerProperty value. * * @param newIntegerProperty The new IntegerProperty value. */ public void setIntegerProperty(Integer integerProperty) { this.integerProperty = integerProperty; } Integer defaultIntegerProperty; /** * Get the DefaultIntegerProperty value. * * @return the DefaultIntegerProperty value. */ public Integer getDefaultIntegerProperty() { return defaultIntegerProperty; } /** * Set the DefaultIntegerProperty value. * * @param newDefaultIntegerProperty The new DefaultIntegerProperty value. */ public void setDefaultIntegerProperty(Integer defaultIntegerProperty) { this.defaultIntegerProperty = defaultIntegerProperty; } Boolean booleanProperty; /** * Get the BooleanProperty value. * * @return the BooleanProperty value. */ public Boolean getBooleanProperty() { return booleanProperty; } /** * Set the BooleanProperty value. * * @param newBooleanProperty The new BooleanProperty value. */ public void setBooleanProperty(Boolean booleanProperty) { this.booleanProperty = booleanProperty; } Long longProperty; /** * Get the LongProperty value. * * @return the LongProperty value. */ public Long getLongProperty() { return longProperty; } /** * Set the LongProperty value. * * @param newLongProperty The new LongProperty value. */ public void setLongProperty(Long longProperty) { this.longProperty = longProperty; } Double doubleProperty; /** * Get the DoubleProperty value. * * @return the DoubleProperty value. */ public Double getDoubleProperty() { return doubleProperty; } /** * Set the DoubleProperty value. * * @param newDoubleProperty The new DoubleProperty value. */ public void setDoubleProperty(Double doubleProperty) { this.doubleProperty = doubleProperty; } URL urlProperty; /** * Get the UrlProperty value. (this is a jboss specific property editor) * * @return the UrlProperty value. */ public URL getUrlProperty() { return urlProperty; } /** * Set the UrlProperty value. * * @param newUrlProperty The new UrlProperty value. */ public void setUrlProperty(URL urlProperty) { this.urlProperty = urlProperty; } Map getXids() { return xids; } public class WrapperMap implements Map { Map delegate; public WrapperMap(Map delegate) { this.delegate = delegate; } public void clear() { delegate.clear(); } public boolean containsKey(Object key) { return delegate.containsKey(key); } public boolean containsValue(Object value) { return delegate.containsValue(value); } public Set entrySet() { return delegate.entrySet(); } public Object get(Object key) { return delegate.get(key); } public boolean isEmpty() { return delegate.isEmpty(); } public Set keySet() { return delegate.keySet(); } public Object put(Object key, Object value) { Object result = delegate.put(key, value); log.info("Change xid=" + key + " from " + result + " to " + value); return result; } public void putAll(Map t) { delegate.putAll(t); } public Object remove(Object key) { return delegate.remove(key); } public int size() { return delegate.size(); } public Collection values() { return delegate.values(); } } }