www.ironjacamar.orgCommunity Documentation

Appendix B. Samples

Table of Contents

B.1. HelloWorld example
B.1.1. Introduction
B.1.2. HelloWorld Resource Adapter
B.1.3. HelloWorld Managed Connection Factory
B.1.4. HelloWorld Managed Connection
B.1.5. HelloWorld Connection Factory
B.1.6. HelloWorld Connection Factory Implementation
B.1.7. HelloWorld Connection
B.1.8. HelloWorld Connection Implementation
B.1.9. HelloWorld Managed Connection MetaData
B.1.10. HelloWorld ironjacamar.xml
B.1.11. HelloWorld Connection Test Case
B.1.12. HelloWorld Ant build.xml
B.2. HelloWorld/Native example
B.2.1. Introduction
B.2.2. HelloWorld/Native Resource Adapter
B.2.3. HelloWorld/Native Managed Connection Factory
B.2.4. HelloWorld/Native Managed Connection
B.2.5. HelloWorld/Native Connection Factory
B.2.6. HelloWorld/Native Connection Factory Implementation
B.2.7. HelloWorld/Native Connection
B.2.8. HelloWorld/Native Connection Implementation
B.2.9. HelloWorld/Native Managed Connection MetaData
B.2.10. HelloWorld/Native ironjacamar.xml
B.2.11. HelloWorld/Native C
B.2.12. HelloWorld/Native Connection Test Case
B.2.13. HelloWorld/Native Ant build.xml
B.2.14. HelloWorld/Native cmake
B.3. HelloWorld/Lazy example
B.3.1. Introduction
B.3.2. HelloWorld/Lazy Resource Adapter
B.3.3. HelloWorld/Lazy Managed Connection Factory
B.3.4. HelloWorld/Lazy Managed Connection
B.3.5. HelloWorld/Lazy Connection Factory
B.3.6. HelloWorld/Lazy Connection Factory Implementation
B.3.7. HelloWorld/Lazy Connection
B.3.8. HelloWorld/Lazy Connection Implementation
B.3.9. HelloWorld/Lazy Managed Connection MetaData
B.3.10. HelloWorld/Lazy ironjacamar.xml
B.3.11. HelloWorld/Lazy Connection Test Case
B.3.12. HelloWorld/Lazy Ant build.xml


/*
 * IronJacamar, a Java EE Connector Architecture implementation
 * Copyright 2010, Red Hat Inc, 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.jca.samples.helloworld;
import java.util.logging.Logger;
import javax.resource.ResourceException;
import javax.resource.spi.ActivationSpec;
import javax.resource.spi.BootstrapContext;
import javax.resource.spi.ConfigProperty;
import javax.resource.spi.Connector;
import javax.resource.spi.ResourceAdapter;
import javax.resource.spi.ResourceAdapterInternalException;
import javax.resource.spi.TransactionSupport;
import javax.resource.spi.endpoint.MessageEndpointFactory;
import javax.transaction.xa.XAResource;
/**
 * HelloWorldResourceAdapter
 *
 * @version $Revision: $
 */
@Connector(
   reauthenticationSupport = false,
   transactionSupport = TransactionSupport.TransactionSupportLevel.NoTransaction)
public class HelloWorldResourceAdapter implements ResourceAdapter
{
   /** The logger */
   private static Logger log = Logger.getLogger("HelloWorldResourceAdapter");
   /** Name property */
   @ConfigProperty(defaultValue = "AS 7", supportsDynamicUpdates = true)
   private String name;
   /**
    * Default constructor
    */
   public HelloWorldResourceAdapter()
   {
   }
   /** 
    * Set name
    * @param name The value
    */
   public void setName(String name)
   {
      this.name = name;
   }
   /** 
    * Get name
    * @return The value
    */
   public String getName()
   {
      return name;
   }
   /**
    * This is called during the activation of a message endpoint.
    *
    * @param endpointFactory A message endpoint factory instance.
    * @param spec An activation spec JavaBean instance.
    * @throws ResourceException generic exception 
    */
   public void endpointActivation(MessageEndpointFactory endpointFactory,
                                  ActivationSpec spec) throws ResourceException
   {
   }
   /**
    * This is called when a message endpoint is deactivated. 
    *
    * @param endpointFactory A message endpoint factory instance.
    * @param spec An activation spec JavaBean instance.
    */
   public void endpointDeactivation(MessageEndpointFactory endpointFactory,
                                    ActivationSpec spec)
   {
   }
   /**
    * This is called when a resource adapter instance is bootstrapped.
    *
    * @param ctx A bootstrap context containing references 
    * @throws ResourceAdapterInternalException indicates bootstrap failure.
    */
   public void start(BootstrapContext ctx)
      throws ResourceAdapterInternalException
   {
   }
   /**
    * This is called when a resource adapter instance is undeployed or
    * during application server shutdown. 
    */
   public void stop()
   {
   }
   /**
    * This method is called by the application server during crash recovery.
    *
    * @param specs an array of ActivationSpec JavaBeans 
    * @throws ResourceException generic exception 
    * @return an array of XAResource objects
    */
   public XAResource[] getXAResources(ActivationSpec[] specs)
      throws ResourceException
   {
      return null;
   }
   /** 
    * Returns a hash code value for the object.
    * @return A hash code value for this object.
    */
   @Override
   public int hashCode()
   {
      int result = 17;
      if (name != null)
         result += 31 * result + 7 * name.hashCode();
      else
         result += 31 * result + 7;
      return result;
   }
   /** 
    * Indicates whether some other object is equal to this one.
    * @param other The reference object with which to compare.
    * @return true If this object is the same as the obj argument, false otherwise.
    */
   @Override
   public boolean equals(Object other)
   {
      if (other == null)
         return false;
      if (other == this)
         return true;
      if (!(other instanceof HelloWorldResourceAdapter))
         return false;
      HelloWorldResourceAdapter obj = (HelloWorldResourceAdapter)other;
      boolean result = true; 
      if (result)
      {
         if (name == null)
            result = obj.getName() == null;
         else
            result = name.equals(obj.getName());
      }
      return result;
   }
}
      


/*
 * IronJacamar, a Java EE Connector Architecture implementation
 * Copyright 2010, Red Hat Inc, 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.jca.samples.helloworld;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.Set;
import java.util.logging.Logger;
import javax.resource.ResourceException;
import javax.resource.spi.ConnectionDefinition;
import javax.resource.spi.ConnectionManager;
import javax.resource.spi.ConnectionRequestInfo;
import javax.resource.spi.ManagedConnection;
import javax.resource.spi.ManagedConnectionFactory;
import javax.resource.spi.ResourceAdapter;
import javax.resource.spi.ResourceAdapterAssociation;
import javax.security.auth.Subject;
/**
 * HelloWorldManagedConnectionFactory
 *
 * @version $Revision: $
 */
@ConnectionDefinition(connectionFactory = HelloWorldConnectionFactory.class,
   connectionFactoryImpl = HelloWorldConnectionFactoryImpl.class,
   connection = HelloWorldConnection.class,
   connectionImpl = HelloWorldConnectionImpl.class)
public class HelloWorldManagedConnectionFactory 
   implements ManagedConnectionFactory, ResourceAdapterAssociation
{
   /** The serialVersionUID */
   private static final long serialVersionUID = 1L;
   /** The logger */
   private static Logger log = Logger.getLogger("HelloWorldManagedConnectionFactory");
   /** The resource adapter */
   private ResourceAdapter ra;
   /** The logwriter */
   private PrintWriter logwriter;
   /**
    * Default constructor
    */
   public HelloWorldManagedConnectionFactory()
   {
      this.ra = null;
      this.logwriter = null;
   }
   /**
    * Creates a Connection Factory instance. 
    *
    * @return EIS-specific Connection Factory instance or 
    *         javax.resource.cci.ConnectionFactory instance
    * @throws ResourceException Generic exception
    */
   public Object createConnectionFactory() throws ResourceException
   {
      throw new ResourceException("This resource adapter doesn't support non-managed environments");
   }
   /**
    * Creates a Connection Factory instance. 
    *
    * @param cxManager ConnectionManager to be associated with created EIS 
    *        connection factory instance
    * @return EIS-specific Connection Factory instance or 
    *        javax.resource.cci.ConnectionFactory instance
    * @throws ResourceException Generic exception
    */
   public Object createConnectionFactory(ConnectionManager cxManager) throws ResourceException
   {
      return new HelloWorldConnectionFactoryImpl(this, cxManager);
   }
   /**
    * Creates a new physical connection to the underlying EIS resource manager.
    *
    * @param subject Caller's security information
    * @param cxRequestInfo Additional resource adapter specific connection 
    *        request information
    * @throws ResourceException generic exception
    * @return ManagedConnection instance 
    */
   public ManagedConnection createManagedConnection(Subject subject,
                                                    ConnectionRequestInfo cxRequestInfo) 
      throws ResourceException
   {
      return new HelloWorldManagedConnection(this);
   }
   /**
    * Returns a matched connection from the candidate set of connections. 
    *
    * @param connectionSet Candidate connection set
    * @param subject Caller's security information
    * @param cxRequestInfo Additional resource adapter specific connection request information
    * @throws ResourceException generic exception
    * @return ManagedConnection if resource adapter finds an acceptable match otherwise null 
    */
   public ManagedConnection matchManagedConnections(Set connectionSet,
                                                    Subject subject, ConnectionRequestInfo cxRequestInfo) 
      throws ResourceException
   {
      ManagedConnection result = null;
      Iterator it = connectionSet.iterator();
      while (result == null && it.hasNext()) 
      {
         ManagedConnection mc = (ManagedConnection)it.next();
         if (mc instanceof HelloWorldManagedConnection) 
         {
            HelloWorldManagedConnection hwmc = (HelloWorldManagedConnection)mc;
            result = hwmc;
         }
      }
      return result;
   }
   /**
    * Get the log writer for this ManagedConnectionFactory instance.
    *
    * @return PrintWriter
    * @throws ResourceException generic exception
    */
   public PrintWriter getLogWriter() throws ResourceException
   {
      return logwriter;
   }
   /**
    * Set the log writer for this ManagedConnectionFactory instance.
    *
    * @param out PrintWriter - an out stream for error logging and tracing
    * @throws ResourceException generic exception
    */
   public void setLogWriter(PrintWriter out) throws ResourceException
   {
      logwriter = out;
   }
   /**
    * Get the resource adapter
    *
    * @return The handle
    */
   public ResourceAdapter getResourceAdapter()
   {
      return ra;
   }
   /**
    * Set the resource adapter
    *
    * @param ra The handle
    */
   public void setResourceAdapter(ResourceAdapter ra)
   {
      this.ra = ra;
   }
   /** 
    * Returns a hash code value for the object.
    * @return A hash code value for this object.
    */
   @Override
   public int hashCode()
   {
      int result = 17;
      return result;
   }
   /** 
    * Indicates whether some other object is equal to this one.
    * @param other The reference object with which to compare.
    * @return true If this object is the same as the obj argument, false otherwise.
    */
   @Override
   public boolean equals(Object other)
   {
      if (other == null)
         return false;
      if (other == this)
         return true;
      if (!(other instanceof HelloWorldManagedConnectionFactory))
         return false;
      HelloWorldManagedConnectionFactory obj = (HelloWorldManagedConnectionFactory)other;
      boolean result = true; 
      return result;
   }
}
      


/*
 * IronJacamar, a Java EE Connector Architecture implementation
 * Copyright 2010, Red Hat Inc, 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.jca.samples.helloworld;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
import javax.resource.NotSupportedException;
import javax.resource.ResourceException;
import javax.resource.spi.ConnectionEvent;
import javax.resource.spi.ConnectionEventListener;
import javax.resource.spi.ConnectionRequestInfo;
import javax.resource.spi.LocalTransaction;
import javax.resource.spi.ManagedConnection;
import javax.resource.spi.ManagedConnectionMetaData;
import javax.security.auth.Subject;
import javax.transaction.xa.XAResource;
/**
 * HelloWorldManagedConnection
 *
 * @version $Revision: $
 */
public class HelloWorldManagedConnection implements ManagedConnection
{
   /** The logger */
   private static Logger log = Logger.getLogger("HelloWorldManagedConnection");
   /** MCF */
   private HelloWorldManagedConnectionFactory mcf;
   /** Log writer */
   private PrintWriter logWriter;
   /** Listeners */
   private List<ConnectionEventListener> listeners;
   /** Connection */
   private Object connection;
   /**
    * default constructor
    * @param mcf mcf
    */
   public HelloWorldManagedConnection(HelloWorldManagedConnectionFactory mcf)
   {
      this.mcf = mcf;
      this.logWriter = null;
      this.listeners = new ArrayList<ConnectionEventListener>(1);
      this.connection = null;
   }
   /**
    * Creates a new connection handle for the underlying physical connection 
    * represented by the ManagedConnection instance. 
    *
    * @param subject Security context as JAAS subject
    * @param cxRequestInfo ConnectionRequestInfo instance
    * @return generic Object instance representing the connection handle. 
    * @throws ResourceException generic exception if operation fails
    */
   public Object getConnection(Subject subject,
                               ConnectionRequestInfo cxRequestInfo) 
      throws ResourceException
   {
      connection = new HelloWorldConnectionImpl(this, mcf);
      return connection;
   }
   /**
    * Used by the container to change the association of an 
    * application-level connection handle with a ManagedConneciton instance.
    *
    * @param connection Application-level connection handle
    * @throws ResourceException generic exception if operation fails
    */
   public void associateConnection(Object connection) throws ResourceException
   {
      this.connection = connection;
   }
   /**
    * Application server calls this method to force any cleanup on 
    * the ManagedConnection instance.
    *
    * @throws ResourceException generic exception if operation fails
    */
   public void cleanup() throws ResourceException
   {
   }
   /**
    * Destroys the physical connection to the underlying resource manager.
    *
    * @throws ResourceException generic exception if operation fails
    */
   public void destroy() throws ResourceException
   {
      this.connection = null;
   }
   /**
    * Adds a connection event listener to the ManagedConnection instance.
    *
    * @param listener A new ConnectionEventListener to be registered
    */
   public void addConnectionEventListener(ConnectionEventListener listener)
   {
      if (listener == null)
         throw new IllegalArgumentException("Listener is null");
      listeners.add(listener);
   }
   /**
    * Removes an already registered connection event listener 
    * from the ManagedConnection instance.
    *
    * @param listener Already registered connection event listener to be removed
    */
   public void removeConnectionEventListener(ConnectionEventListener listener)
   {
      if (listener == null)
         throw new IllegalArgumentException("Listener is null");
      listeners.remove(listener);
   }
   /**
    * Gets the log writer for this ManagedConnection instance.
    *
    * @return Character ourput stream associated with this 
    *         Managed-Connection instance
    * @throws ResourceException generic exception if operation fails
    */
   public PrintWriter getLogWriter() throws ResourceException
   {
      return logWriter;
   }
   /**
    * Sets the log writer for this ManagedConnection instance.
    *
    * @param out Character Output stream to be associated
    * @throws ResourceException generic exception if operation fails
    */
   public void setLogWriter(PrintWriter out) throws ResourceException
   {
      this.logWriter = out;
   }
   /**
    * Returns an <code>javax.resource.spi.LocalTransaction</code> instance.
    *
    * @return LocalTransaction instance
    * @throws ResourceException generic exception if operation fails
    */
   public LocalTransaction getLocalTransaction() throws ResourceException
   {
      throw new NotSupportedException("LocalTransaction not supported");
   }
   /**
    * Returns an <code>javax.transaction.xa.XAresource</code> instance. 
    *
    * @return XAResource instance
    * @throws ResourceException generic exception if operation fails
    */
   public XAResource getXAResource() throws ResourceException
   {
      throw new NotSupportedException("GetXAResource not supported");
   }
   /**
    * Gets the metadata information for this connection's underlying 
    * EIS resource manager instance. 
    *
    * @return ManagedConnectionMetaData instance
    * @throws ResourceException generic exception if operation fails
    */
   public ManagedConnectionMetaData getMetaData() throws ResourceException
   {
      return new HelloWorldManagedConnectionMetaData();
   }
   /**
    * Call helloWorld
    * @param name String name
    * @return String helloworld
    */
   String helloWorld(String name)
   {
      return "Hello World, " + name + " !";
   }
   /**
    * Close handle
    * @param handle The handle
    */
   void closeHandle(HelloWorldConnection handle)
   {
      ConnectionEvent event = new ConnectionEvent(this, ConnectionEvent.CONNECTION_CLOSED);
      event.setConnectionHandle(handle);
      for (ConnectionEventListener cel : listeners)
      {
         cel.connectionClosed(event);
      }
   }
}
      


/*
 * IronJacamar, a Java EE Connector Architecture implementation
 * Copyright 2010, Red Hat Inc, 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.jca.samples.helloworld;
import java.io.Serializable;
import javax.resource.Referenceable;
import javax.resource.ResourceException;
/**
 * HelloWorldConnectionFactory
 *
 * @version $Revision: $
 */
public interface HelloWorldConnectionFactory extends Serializable, Referenceable
{
   /** 
    * Get connection from factory
    *
    * @return HelloWorldConnection instance
    * @exception ResourceException Thrown if a connection can't be obtained
    */
   public HelloWorldConnection getConnection() throws ResourceException;
}
      


/*
 * IronJacamar, a Java EE Connector Architecture implementation
 * Copyright 2010, Red Hat Inc, 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.jca.samples.helloworld;
import javax.naming.NamingException;
import javax.naming.Reference;
import javax.resource.ResourceException;
import javax.resource.spi.ConnectionManager;
/**
 * HelloWorldConnectionFactoryImpl
 *
 * @version $Revision: $
 */
public class HelloWorldConnectionFactoryImpl implements HelloWorldConnectionFactory
{
   /** The serialVersionUID */
   private static final long serialVersionUID = 1L;
   private Reference reference;
   private HelloWorldManagedConnectionFactory mcf;
   private ConnectionManager connectionManager;
   /**
    * Default constructor
    * @param mcf ManagedConnectionFactory
    * @param cxManager ConnectionManager
    */
   public HelloWorldConnectionFactoryImpl(HelloWorldManagedConnectionFactory mcf,
                                          ConnectionManager cxManager)
   {
      this.mcf = mcf;
      this.connectionManager = cxManager;
   }
   /** 
    * Get connection from factory
    *
    * @return HelloWorldConnection instance
    * @exception ResourceException Thrown if a connection can't be obtained
    */
   @Override
   public HelloWorldConnection getConnection() throws ResourceException
   {
      return (HelloWorldConnection)connectionManager.allocateConnection(mcf, null);
   }
   /**
    * Get the Reference instance.
    *
    * @return Reference instance
    * @exception NamingException Thrown if a reference can't be obtained
    */
   @Override
   public Reference getReference() throws NamingException
   {
      return reference;
   }
   /**
    * Set the Reference instance.
    *
    * @param reference A Reference instance
    */
   @Override
   public void setReference(Reference reference)
   {
      this.reference = reference;
   }
}
      


/*
 * IronJacamar, a Java EE Connector Architecture implementation
 * Copyright 2010, Red Hat Inc, 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.jca.samples.helloworld;
/**
 * HelloWorldConnection
 *
 * @version $Revision: $
 */
public interface HelloWorldConnection
{
   /**
    * HelloWorld
    * @return String
    */
   public String helloWorld();
   /**
    * HelloWorld
    * @param name A name
    * @return String
    */
   public String helloWorld(String name);
   /**
    * Close
    */
   public void close();
}
      


/*
 * IronJacamar, a Java EE Connector Architecture implementation
 * Copyright 2010, Red Hat Inc, 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.jca.samples.helloworld;
import java.util.logging.Logger;
/**
 * HelloWorldConnectionImpl
 *
 * @version $Revision: $
 */
public class HelloWorldConnectionImpl implements HelloWorldConnection
{
   /** The logger */
   private static Logger log = Logger.getLogger("HelloWorldConnectionImpl");
   /** ManagedConnection */
   private HelloWorldManagedConnection mc;
   /** ManagedConnectionFactory */
   private HelloWorldManagedConnectionFactory mcf;
   /**
    * Default constructor
    * @param mc HelloWorldManagedConnection
    * @param mcf HelloWorldManagedConnectionFactory
    */
   public HelloWorldConnectionImpl(HelloWorldManagedConnection mc,
                                   HelloWorldManagedConnectionFactory mcf)
   {
      this.mc = mc;
      this.mcf = mcf;
   }
   /**
    * Call helloWorld
    * @return String helloworld
    */
   public String helloWorld()
   {
      return helloWorld(((HelloWorldResourceAdapter)mcf.getResourceAdapter()).getName());
   }
   /**
    * Call helloWorld
    * @param name String name
    * @return String helloworld
    */
   public String helloWorld(String name)
   {
      return mc.helloWorld(name);
   }
   /**
    * Close
    */
   public void close()
   {
      mc.closeHandle(this);
   }
}
      


/*
 * IronJacamar, a Java EE Connector Architecture implementation
 * Copyright 2010, Red Hat Inc, 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.jca.samples.helloworld;
import javax.resource.ResourceException;
import javax.resource.spi.ManagedConnectionMetaData;
/**
 * HelloWorldManagedConnectionMetaData
 *
 * @version $Revision: $
 */
public class HelloWorldManagedConnectionMetaData implements ManagedConnectionMetaData
{
   /**
    * Default constructor
    */
   public HelloWorldManagedConnectionMetaData()
   {
   }
   /**
    * Returns Product name of the underlying EIS instance connected 
    * through the ManagedConnection.
    *
    * @return Product name of the EIS instance
    * @throws ResourceException Thrown if an error occurs
    */
   @Override
   public String getEISProductName() throws ResourceException
   {
      return "HelloWorld Resource Adapter";
   }
   /**
    * Returns Product version of the underlying EIS instance connected 
    * through the ManagedConnection.
    *
    * @return Product version of the EIS instance
    * @throws ResourceException Thrown if an error occurs
    */
   @Override
   public String getEISProductVersion() throws ResourceException
   {
      return "1.0";
   }
   /**
    * Returns maximum limit on number of active concurrent connections 
    *
    * @return Maximum limit for number of active concurrent connections
    * @throws ResourceException Thrown if an error occurs
    */
   @Override
   public int getMaxConnections() throws ResourceException
   {
      return 0;
   }
   /**
    * Returns name of the user associated with the ManagedConnection instance
    *
    * @return Name of the user
    * @throws ResourceException Thrown if an error occurs
    */
   @Override
   public String getUserName() throws ResourceException
   {
      return null;
   }
}
      


/*
 * IronJacamar, a Java EE Connector Architecture implementation
 * Copyright 2010, Red Hat Inc, 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.jca.samples.helloworld;
import java.util.UUID;
import java.util.logging.Logger;
import javax.annotation.Resource;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.jboss.shrinkwrap.api.spec.ResourceAdapterArchive;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
/**
 * ConnectorTestCase
 *
 * @version $Revision: $
 */
@RunWith(Arquillian.class)
public class ConnectorTestCase
{
   private static Logger log = Logger.getLogger("ConnectorTestCase");
   private static String deploymentName = "ConnectorTestCase";
   /**
    * Define the deployment
    *
    * @return The deployment archive
    */
   @Deployment
   public static ResourceAdapterArchive createDeployment()
   {
      ResourceAdapterArchive raa =
         ShrinkWrap.create(ResourceAdapterArchive.class, deploymentName + ".rar");
      JavaArchive ja = ShrinkWrap.create(JavaArchive.class, 
         UUID.randomUUID().toString() + ".jar");
      ja.addClasses(HelloWorldResourceAdapter.class, 
         HelloWorldManagedConnectionFactory.class, 
         HelloWorldManagedConnection.class, 
         HelloWorldManagedConnectionMetaData.class, 
         HelloWorldConnectionFactory.class, 
         HelloWorldConnectionFactoryImpl.class, 
         HelloWorldConnection.class, 
         HelloWorldConnectionImpl.class);
      raa.addAsLibrary(ja);
      raa.addAsManifestResource("META-INF/ironjacamar.xml", "ironjacamar.xml");
      return raa;
   }
   /** resource */
   @Resource(mappedName = "java:/eis/HelloWorld")
   private HelloWorldConnectionFactory connectionFactory;
   /**
    * Test helloWorld
    *
    * @exception Throwable Thrown if case of an error
    */
   @Test
   public void testHelloWorldNoArgs() throws Throwable
   {
      assertNotNull(connectionFactory);
      HelloWorldConnection connection = connectionFactory.getConnection();
      assertNotNull(connection);
      String result = connection.helloWorld();
      connection.close();
   }
   /**
    * Test helloWorld
    *
    * @exception Throwable Thrown if case of an error
    */
   @Test
   public void testHelloWorldNameString() throws Throwable
   {
      assertNotNull(connectionFactory);
      HelloWorldConnection connection = connectionFactory.getConnection();
      assertNotNull(connection);
      String result = connection.helloWorld(null);
      connection.close();
   }
}
      


<!--
/*
 * IronJacamar, a Java EE Connector Architecture implementation
 * Copyright 2010, Red Hat Inc, 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.
 */
-->

<project name="helloworld" basedir="." default="rar">

  <!-- ================================= 
       Properties              
       ================================= -->
  <property name="build.dir" value="${basedir}/build" />
  <property name="target.dir" value="${basedir}/target" />
  <property name="lib.dir" value="${basedir}/lib" />

  <property name="javac.debug" value="on" />
  <property name="javac.deprecation" value="on" />
  <property name="javac.optimize" value="off" />
  <property name="javac.encoding" value="utf-8" />

  <property name="junit.printsummary" value="yes" />
  <property name="junit.haltonerror" value="no" />
  <property name="junit.haltonfailure" value="no" />
  <property name="junit.fork" value="yes" />
  <property name="junit.timeout" value="60000" />
  <property name="junit.jvm" value="" />
  <property name="junit.jvm.options" value="-Xms128m -Xmx512m -XX:MaxPermSize=256m" />
  <property name="junit.batchtest.haltonerror" value="no" />
  <property name="junit.batchtest.haltonfailure" value="no" />
  <property name="junit.batchtest.fork" value="yes" />
  
  <path id="lib.path.id">
    <fileset dir="${lib.dir}">
      <include name="**/*.jar"/>
    </fileset>
  </path>
    
  <path id="test.lib.path.id">
    <fileset dir="${lib.dir}">
      <include name="**/*.jar"/>
    </fileset>
    <fileset dir="${build.dir}">
      <include name="**/*.jar"/>
    </fileset>
  </path>
  
  <!-- ================================= 
       Target: init
       ================================= -->
  <target name="init">
    <mkdir dir="${lib.dir}" />
  </target>

  <!-- ================================= 
       Target: compile
       ================================= -->
  <target name="compile" depends="init">
    <mkdir dir="${build.dir}" />

    <javac srcdir="${basedir}/src/main/java"
           destdir="${build.dir}"
           classpathref="lib.path.id"
           debug="${javac.debug}"
           deprecation="${javac.deprecation}"
           encoding="${javac.encoding}"
           optimize="${javac.optimize}">
    </javac> 
  </target>
  
  <!-- ================================= 
       Target: rar
       ================================= -->
  <target name="rar" depends="compile">
    <mkdir dir="${target.dir}" />
    <mkdir dir="${basedir}/src/main/resources" />
    <jar destfile="${build.dir}/helloworld.jar"
         basedir="${build.dir}"
         includes="**/*.class"/>
    <jar destfile="${target.dir}/helloworld.rar">
      <fileset dir="${basedir}/src/main/resources" includes="META-INF/*"/>
      <fileset dir="${build.dir}" includes="**/*.jar"/>
    </jar>
  </target>
  
      
  <!-- ================================= 
       Target: prepare-test
       ================================= -->
  <target name="prepare-test" depends="init">
    <mkdir dir="${build.dir}/test" />

    <javac srcdir="src/test"
           destdir="${build.dir}/test"
           classpathref="test.lib.path.id"
           debug="${javac.debug}"
           deprecation="${javac.deprecation}"
           encoding="${javac.encoding}"
           optimize="${javac.optimize}">
      <compilerarg value="-Xlint"/>
    </javac> 

    <copy todir="${build.dir}/test">
      <fileset dir="src/main/resources"/>
      <fileset dir="src/test/resources"/>
    </copy>
  </target>

  <!-- ================================= 
       Target: test
       ================================= -->
  <target name="test" depends="rar, prepare-test">
    <mkdir dir="${basedir}/reports"/>

    <junit dir="src/test"
           printsummary="${junit.printsummary}"
           haltonerror="${junit.haltonerror}"
           haltonfailure="${junit.haltonfailure}"
           fork="${junit.fork}"
           timeout="${junit.timeout}">
      
      <jvmarg line="${junit.jvm.options}"/>
      <sysproperty key="archives.dir" value="${target.dir}"/>
      <sysproperty key="reports.dir" value="${basedir}/reports"/>
      <sysproperty key="java.util.logging.manager" value="org.jboss.logmanager.LogManager"/>
      <sysproperty key="log4j.defaultInitOverride" value="true"/>
      <sysproperty key="org.jboss.logging.Logger.pluginClass" 
                   value="org.jboss.logging.logmanager.LoggerPluginImpl"/>
      <sysproperty key="test.dir" value="${build.dir}/test"/>
      <sysproperty key="xb.builder.useUnorderedSequence" value="true"/>
      
      <classpath>
        <fileset dir="${lib.dir}" includes="**/*.jar" />
        <fileset dir="${build.dir}" includes="*.jar" />
        <pathelement location="${build.dir}/test"/>
      </classpath>
      
      <formatter type="plain"/>
      <formatter type="xml"/>
      
      <batchtest todir="${basedir}/reports"
                 haltonerror="${junit.batchtest.haltonerror}"
                 haltonfailure="${junit.batchtest.haltonfailure}"
                 fork="${junit.batchtest.fork}">
        
        <fileset dir="${build.dir}/test">
          <include name="**/*TestCase.class"/>
        </fileset>
      </batchtest>

    </junit>
    
  </target>
  
  <!-- ================================= 
       Target: docs
       ================================= -->
  <target name="docs" depends="compile">
    <mkdir dir="${target.dir}/docs"/>
    <javadoc packagenames="*"
             sourcepath="src/main/java"
             destdir="${target.dir}/docs"
             classpathref="lib.path.id">
    </javadoc>
  </target>
  
  <!-- ================================= 
       Target: clean              
       ================================= -->
  <target name="clean">
    <delete>
      <fileset dir="${basedir}" defaultexcludes="no">
        <include name="**/*~"/>
        <include name="**/*.bak"/>
      </fileset>
    </delete>
    <delete dir="${build.dir}"/>
    <delete dir="${target.dir}"/>
    <delete dir="${basedir}/reports"/>
  </target>

  <!-- ================================= 
       Target: dist-clean              
       ================================= -->
  <target name="dist-clean" depends="init,clean">
    <delete includeemptydirs="true">
      <fileset dir="${lib.dir}" includes="**/*"/>
    </delete>
  </target>

</project>

      


/*
 * IronJacamar, a Java EE Connector Architecture implementation
 * Copyright 2010, Red Hat Inc, 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.jca.samples.helloworld;
import java.util.logging.Logger;
import javax.resource.ResourceException;
import javax.resource.spi.ActivationSpec;
import javax.resource.spi.BootstrapContext;
import javax.resource.spi.ConfigProperty;
import javax.resource.spi.Connector;
import javax.resource.spi.ResourceAdapter;
import javax.resource.spi.ResourceAdapterInternalException;
import javax.resource.spi.TransactionSupport;
import javax.resource.spi.endpoint.MessageEndpointFactory;
import javax.transaction.xa.XAResource;
/**
 * HelloWorldResourceAdapter
 *
 * @version $Revision: $
 */
@Connector(
   reauthenticationSupport = false,
   transactionSupport = TransactionSupport.TransactionSupportLevel.NoTransaction)
public class HelloWorldResourceAdapter implements ResourceAdapter
{
   /** The logger */
   private static Logger log = Logger.getLogger("HelloWorldResourceAdapter");
   /** Name property */
   @ConfigProperty(defaultValue = "AS 7", supportsDynamicUpdates = true)
   private String name;
   /**
    * Default constructor
    */
   public HelloWorldResourceAdapter()
   {
   }
   /** 
    * Set name
    * @param name The value
    */
   public void setName(String name)
   {
      this.name = name;
   }
   /** 
    * Get name
    * @return The value
    */
   public String getName()
   {
      return name;
   }
   /**
    * This is called during the activation of a message endpoint.
    *
    * @param endpointFactory A message endpoint factory instance.
    * @param spec An activation spec JavaBean instance.
    * @throws ResourceException generic exception 
    */
   public void endpointActivation(MessageEndpointFactory endpointFactory,
                                  ActivationSpec spec) throws ResourceException
   {
   }
   /**
    * This is called when a message endpoint is deactivated. 
    *
    * @param endpointFactory A message endpoint factory instance.
    * @param spec An activation spec JavaBean instance.
    */
   public void endpointDeactivation(MessageEndpointFactory endpointFactory,
                                    ActivationSpec spec)
   {
   }
   /**
    * This is called when a resource adapter instance is bootstrapped.
    *
    * @param ctx A bootstrap context containing references 
    * @throws ResourceAdapterInternalException indicates bootstrap failure.
    */
   public void start(BootstrapContext ctx)
      throws ResourceAdapterInternalException
   {
   }
   /**
    * This is called when a resource adapter instance is undeployed or
    * during application server shutdown. 
    */
   public void stop()
   {
   }
   /**
    * This method is called by the application server during crash recovery.
    *
    * @param specs an array of ActivationSpec JavaBeans 
    * @throws ResourceException generic exception 
    * @return an array of XAResource objects
    */
   public XAResource[] getXAResources(ActivationSpec[] specs)
      throws ResourceException
   {
      return null;
   }
   /** 
    * Returns a hash code value for the object.
    * @return A hash code value for this object.
    */
   @Override
   public int hashCode()
   {
      int result = 17;
      if (name != null)
         result += 31 * result + 7 * name.hashCode();
      else
         result += 31 * result + 7;
      return result;
   }
   /** 
    * Indicates whether some other object is equal to this one.
    * @param other The reference object with which to compare.
    * @return true If this object is the same as the obj argument, false otherwise.
    */
   @Override
   public boolean equals(Object other)
   {
      if (other == null)
         return false;
      if (other == this)
         return true;
      if (!(other instanceof HelloWorldResourceAdapter))
         return false;
      HelloWorldResourceAdapter obj = (HelloWorldResourceAdapter)other;
      boolean result = true; 
      if (result)
      {
         if (name == null)
            result = obj.getName() == null;
         else
            result = name.equals(obj.getName());
      }
      return result;
   }
}
      


/*
 * IronJacamar, a Java EE Connector Architecture implementation
 * Copyright 2010, Red Hat Inc, 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.jca.samples.helloworld;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.Set;
import java.util.logging.Logger;
import javax.resource.ResourceException;
import javax.resource.spi.ConnectionDefinition;
import javax.resource.spi.ConnectionManager;
import javax.resource.spi.ConnectionRequestInfo;
import javax.resource.spi.ManagedConnection;
import javax.resource.spi.ManagedConnectionFactory;
import javax.resource.spi.ResourceAdapter;
import javax.resource.spi.ResourceAdapterAssociation;
import javax.security.auth.Subject;
/**
 * HelloWorldManagedConnectionFactory
 *
 * @version $Revision: $
 */
@ConnectionDefinition(connectionFactory = HelloWorldConnectionFactory.class,
   connectionFactoryImpl = HelloWorldConnectionFactoryImpl.class,
   connection = HelloWorldConnection.class,
   connectionImpl = HelloWorldConnectionImpl.class)
public class HelloWorldManagedConnectionFactory 
   implements ManagedConnectionFactory, ResourceAdapterAssociation
{
   /** The serialVersionUID */
   private static final long serialVersionUID = 1L;
   /** The logger */
   private static Logger log = Logger.getLogger("HelloWorldManagedConnectionFactory");
   /** The resource adapter */
   private ResourceAdapter ra;
   /** The logwriter */
   private PrintWriter logwriter;
   /**
    * Default constructor
    */
   public HelloWorldManagedConnectionFactory()
   {
      this.ra = null;
      this.logwriter = null;
   }
   /**
    * Creates a Connection Factory instance. 
    *
    * @return EIS-specific Connection Factory instance or 
    *         javax.resource.cci.ConnectionFactory instance
    * @throws ResourceException Generic exception
    */
   public Object createConnectionFactory() throws ResourceException
   {
      throw new ResourceException("This resource adapter doesn't support non-managed environments");
   }
   /**
    * Creates a Connection Factory instance. 
    *
    * @param cxManager ConnectionManager to be associated with created EIS 
    *        connection factory instance
    * @return EIS-specific Connection Factory instance or 
    *        javax.resource.cci.ConnectionFactory instance
    * @throws ResourceException Generic exception
    */
   public Object createConnectionFactory(ConnectionManager cxManager) throws ResourceException
   {
      return new HelloWorldConnectionFactoryImpl(this, cxManager);
   }
   /**
    * Creates a new physical connection to the underlying EIS resource manager.
    *
    * @param subject Caller's security information
    * @param cxRequestInfo Additional resource adapter specific connection 
    *        request information
    * @throws ResourceException generic exception
    * @return ManagedConnection instance 
    */
   public ManagedConnection createManagedConnection(Subject subject,
                                                    ConnectionRequestInfo cxRequestInfo) 
      throws ResourceException
   {
      return new HelloWorldManagedConnection(this);
   }
   /**
    * Returns a matched connection from the candidate set of connections. 
    *
    * @param connectionSet Candidate connection set
    * @param subject Caller's security information
    * @param cxRequestInfo Additional resource adapter specific connection request information
    * @throws ResourceException generic exception
    * @return ManagedConnection if resource adapter finds an acceptable match otherwise null 
    */
   public ManagedConnection matchManagedConnections(Set connectionSet,
                                                    Subject subject, ConnectionRequestInfo cxRequestInfo) 
      throws ResourceException
   {
      ManagedConnection result = null;
      Iterator it = connectionSet.iterator();
      while (result == null && it.hasNext()) 
      {
         ManagedConnection mc = (ManagedConnection)it.next();
         if (mc instanceof HelloWorldManagedConnection) 
         {
            HelloWorldManagedConnection hwmc = (HelloWorldManagedConnection)mc;
            result = hwmc;
         }
      }
      return result;
   }
   /**
    * Get the log writer for this ManagedConnectionFactory instance.
    *
    * @return PrintWriter
    * @throws ResourceException generic exception
    */
   public PrintWriter getLogWriter() throws ResourceException
   {
      return logwriter;
   }
   /**
    * Set the log writer for this ManagedConnectionFactory instance.
    *
    * @param out PrintWriter - an out stream for error logging and tracing
    * @throws ResourceException generic exception
    */
   public void setLogWriter(PrintWriter out) throws ResourceException
   {
      logwriter = out;
   }
   /**
    * Get the resource adapter
    *
    * @return The handle
    */
   public ResourceAdapter getResourceAdapter()
   {
      return ra;
   }
   /**
    * Set the resource adapter
    *
    * @param ra The handle
    */
   public void setResourceAdapter(ResourceAdapter ra)
   {
      this.ra = ra;
   }
   /** 
    * Returns a hash code value for the object.
    * @return A hash code value for this object.
    */
   @Override
   public int hashCode()
   {
      int result = 17;
      return result;
   }
   /** 
    * Indicates whether some other object is equal to this one.
    * @param other The reference object with which to compare.
    * @return true If this object is the same as the obj argument, false otherwise.
    */
   @Override
   public boolean equals(Object other)
   {
      if (other == null)
         return false;
      if (other == this)
         return true;
      if (!(other instanceof HelloWorldManagedConnectionFactory))
         return false;
      HelloWorldManagedConnectionFactory obj = (HelloWorldManagedConnectionFactory)other;
      boolean result = true; 
      return result;
   }
}
      


/*
 * IronJacamar, a Java EE Connector Architecture implementation
 * Copyright 2010, Red Hat Inc, 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.jca.samples.helloworld;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
import javax.resource.NotSupportedException;
import javax.resource.ResourceException;
import javax.resource.spi.ConnectionEvent;
import javax.resource.spi.ConnectionEventListener;
import javax.resource.spi.ConnectionRequestInfo;
import javax.resource.spi.LocalTransaction;
import javax.resource.spi.ManagedConnection;
import javax.resource.spi.ManagedConnectionMetaData;
import javax.security.auth.Subject;
import javax.transaction.xa.XAResource;
/**
 * HelloWorldManagedConnection
 *
 * @version $Revision: $
 */
public class HelloWorldManagedConnection implements ManagedConnection
{
   /** The logger */
   private static Logger log = Logger.getLogger("HelloWorldManagedConnection");
   /** MCF */
   private HelloWorldManagedConnectionFactory mcf;
   /** Log writer */
   private PrintWriter logWriter;
   /** Listeners */
   private List<ConnectionEventListener> listeners;
   /** Connection */
   private Object connection;
   /**
    * Constructor
    * @param mcf mcf
    */
   public HelloWorldManagedConnection(HelloWorldManagedConnectionFactory mcf)
   {
      this.mcf = mcf;
      this.logWriter = null;
      this.listeners = new ArrayList<ConnectionEventListener>(1);
      this.connection = null;
   }
   /**
    * Creates a new connection handle for the underlying physical connection 
    * represented by the ManagedConnection instance. 
    *
    * @param subject Security context as JAAS subject
    * @param cxRequestInfo ConnectionRequestInfo instance
    * @return generic Object instance representing the connection handle. 
    * @throws ResourceException generic exception if operation fails
    */
   public Object getConnection(Subject subject,
                               ConnectionRequestInfo cxRequestInfo) 
      throws ResourceException
   {
      connection = new HelloWorldConnectionImpl(this, mcf);
      return connection;
   }
   /**
    * Used by the container to change the association of an 
    * application-level connection handle with a ManagedConneciton instance.
    *
    * @param connection Application-level connection handle
    * @throws ResourceException generic exception if operation fails
    */
   public void associateConnection(Object connection) throws ResourceException
   {
      this.connection = connection;
   }
   /**
    * Application server calls this method to force any cleanup on 
    * the ManagedConnection instance.
    *
    * @throws ResourceException generic exception if operation fails
    */
   public void cleanup() throws ResourceException
   {
   }
   /**
    * Destroys the physical connection to the underlying resource manager.
    *
    * @throws ResourceException generic exception if operation fails
    */
   public void destroy() throws ResourceException
   {
      this.connection = null;
   }
   /**
    * Adds a connection event listener to the ManagedConnection instance.
    *
    * @param listener A new ConnectionEventListener to be registered
    */
   public void addConnectionEventListener(ConnectionEventListener listener)
   {
      if (listener == null)
         throw new IllegalArgumentException("Listener is null");
      listeners.add(listener);
   }
   /**
    * Removes an already registered connection event listener 
    * from the ManagedConnection instance.
    *
    * @param listener Already registered connection event listener to be removed
    */
   public void removeConnectionEventListener(ConnectionEventListener listener)
   {
      if (listener == null)
         throw new IllegalArgumentException("Listener is null");
      listeners.remove(listener);
   }
   /**
    * Gets the log writer for this ManagedConnection instance.
    *
    * @return Character ourput stream associated with this 
    *         Managed-Connection instance
    * @throws ResourceException generic exception if operation fails
    */
   public PrintWriter getLogWriter() throws ResourceException
   {
      return logWriter;
   }
   /**
    * Sets the log writer for this ManagedConnection instance.
    *
    * @param out Character Output stream to be associated
    * @throws ResourceException generic exception if operation fails
    */
   public void setLogWriter(PrintWriter out) throws ResourceException
   {
      this.logWriter = out;
   }
   /**
    * Returns an <code>javax.resource.spi.LocalTransaction</code> instance.
    *
    * @return LocalTransaction instance
    * @throws ResourceException generic exception if operation fails
    */
   public LocalTransaction getLocalTransaction() throws ResourceException
   {
      throw new NotSupportedException("LocalTransaction not supported");
   }
   /**
    * Returns an <code>javax.transaction.xa.XAresource</code> instance. 
    *
    * @return XAResource instance
    * @throws ResourceException generic exception if operation fails
    */
   public XAResource getXAResource() throws ResourceException
   {
      throw new NotSupportedException("GetXAResource not supported");
   }
   /**
    * Gets the metadata information for this connection's underlying 
    * EIS resource manager instance. 
    *
    * @return ManagedConnectionMetaData instance
    * @throws ResourceException generic exception if operation fails
    */
   public ManagedConnectionMetaData getMetaData() throws ResourceException
   {
      return new HelloWorldManagedConnectionMetaData();
   }
   /**
    * Call helloWorld
    * @param name String name
    * @return String helloworld
    */
   public native String helloWorld(String name);
   /**
    * Close handle
    * @param handle The handle
    */
   void closeHandle(HelloWorldConnection handle)
   {
      ConnectionEvent event = new ConnectionEvent(this, ConnectionEvent.CONNECTION_CLOSED);
      event.setConnectionHandle(handle);
      for (ConnectionEventListener cel : listeners)
      {
         cel.connectionClosed(event);
      }
   }
}
      


/*
 * IronJacamar, a Java EE Connector Architecture implementation
 * Copyright 2010, Red Hat Inc, 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.jca.samples.helloworld;
import java.io.Serializable;
import javax.resource.Referenceable;
import javax.resource.ResourceException;
/**
 * HelloWorldConnectionFactory
 *
 * @version $Revision: $
 */
public interface HelloWorldConnectionFactory extends Serializable, Referenceable
{
   /** 
    * Get connection from factory
    *
    * @return HelloWorldConnection instance
    * @exception ResourceException Thrown if a connection can't be obtained
    */
   public HelloWorldConnection getConnection() throws ResourceException;
}
      


/*
 * IronJacamar, a Java EE Connector Architecture implementation
 * Copyright 2010, Red Hat Inc, 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.jca.samples.helloworld;
import javax.naming.NamingException;
import javax.naming.Reference;
import javax.resource.ResourceException;
import javax.resource.spi.ConnectionManager;
/**
 * HelloWorldConnectionFactoryImpl
 *
 * @version $Revision: $
 */
public class HelloWorldConnectionFactoryImpl implements HelloWorldConnectionFactory
{
   /** The serialVersionUID */
   private static final long serialVersionUID = 1L;
   private Reference reference;
   private HelloWorldManagedConnectionFactory mcf;
   private ConnectionManager connectionManager;
   /**
    * Default constructor
    * @param mcf ManagedConnectionFactory
    * @param cxManager ConnectionManager
    */
   public HelloWorldConnectionFactoryImpl(HelloWorldManagedConnectionFactory mcf,
                                          ConnectionManager cxManager)
   {
      this.mcf = mcf;
      this.connectionManager = cxManager;
   }
   /** 
    * Get connection from factory
    *
    * @return HelloWorldConnection instance
    * @exception ResourceException Thrown if a connection can't be obtained
    */
   @Override
   public HelloWorldConnection getConnection() throws ResourceException
   {
      return (HelloWorldConnection)connectionManager.allocateConnection(mcf, null);
   }
   /**
    * Get the Reference instance.
    *
    * @return Reference instance
    * @exception NamingException Thrown if a reference can't be obtained
    */
   @Override
   public Reference getReference() throws NamingException
   {
      return reference;
   }
   /**
    * Set the Reference instance.
    *
    * @param reference A Reference instance
    */
   @Override
   public void setReference(Reference reference)
   {
      this.reference = reference;
   }
}
      


/*
 * IronJacamar, a Java EE Connector Architecture implementation
 * Copyright 2010, Red Hat Inc, 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.jca.samples.helloworld;
/**
 * HelloWorldConnection
 *
 * @version $Revision: $
 */
public interface HelloWorldConnection
{
   /**
    * HelloWorld
    * @return String
    */
   public String helloWorld();
   /**
    * HelloWorld
    * @param name A name
    * @return String
    */
   public String helloWorld(String name);
   /**
    * Close
    */
   public void close();
}
      


/*
 * IronJacamar, a Java EE Connector Architecture implementation
 * Copyright 2010, Red Hat Inc, 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.jca.samples.helloworld;
import java.util.logging.Logger;
/**
 * HelloWorldConnectionImpl
 *
 * @version $Revision: $
 */
public class HelloWorldConnectionImpl implements HelloWorldConnection
{
   /** The logger */
   private static Logger log = Logger.getLogger("HelloWorldConnectionImpl");
   /** ManagedConnection */
   private HelloWorldManagedConnection mc;
   /** ManagedConnectionFactory */
   private HelloWorldManagedConnectionFactory mcf;
   /**
    * Default constructor
    * @param mc HelloWorldManagedConnection
    * @param mcf HelloWorldManagedConnectionFactory
    */
   public HelloWorldConnectionImpl(HelloWorldManagedConnection mc,
                                   HelloWorldManagedConnectionFactory mcf)
   {
      this.mc = mc;
      this.mcf = mcf;
   }
   /**
    * Call helloWorld
    * @return String helloworld
    */
   public String helloWorld()
   {
      return helloWorld(((HelloWorldResourceAdapter)mcf.getResourceAdapter()).getName());
   }
   /**
    * Call helloWorld
    * @param name String name
    * @return String helloworld
    */
   public String helloWorld(String name)
   {
      return mc.helloWorld(name);
   }
   /**
    * Close
    */
   public void close()
   {
      mc.closeHandle(this);
   }
}
      


/*
 * IronJacamar, a Java EE Connector Architecture implementation
 * Copyright 2010, Red Hat Inc, 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.jca.samples.helloworld;
import javax.resource.ResourceException;
import javax.resource.spi.ManagedConnectionMetaData;
/**
 * HelloWorldManagedConnectionMetaData
 *
 * @version $Revision: $
 */
public class HelloWorldManagedConnectionMetaData implements ManagedConnectionMetaData
{
   /**
    * Default constructor
    */
   public HelloWorldManagedConnectionMetaData()
   {
   }
   /**
    * Returns Product name of the underlying EIS instance connected 
    * through the ManagedConnection.
    *
    * @return Product name of the EIS instance
    * @throws ResourceException Thrown if an error occurs
    */
   @Override
   public String getEISProductName() throws ResourceException
   {
      return "HelloWorld Resource Adapter";
   }
   /**
    * Returns Product version of the underlying EIS instance connected 
    * through the ManagedConnection.
    *
    * @return Product version of the EIS instance
    * @throws ResourceException Thrown if an error occurs
    */
   @Override
   public String getEISProductVersion() throws ResourceException
   {
      return "1.0";
   }
   /**
    * Returns maximum limit on number of active concurrent connections 
    *
    * @return Maximum limit for number of active concurrent connections
    * @throws ResourceException Thrown if an error occurs
    */
   @Override
   public int getMaxConnections() throws ResourceException
   {
      return 0;
   }
   /**
    * Returns name of the user associated with the ManagedConnection instance
    *
    * @return Name of the user
    * @throws ResourceException Thrown if an error occurs
    */
   @Override
   public String getUserName() throws ResourceException
   {
      return null;
   }
}
      


/*
 * IronJacamar, a Java EE Connector Architecture implementation
 * Copyright 2011, Red Hat Inc, 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.jca.samples.helloworld;
import java.io.File;
import java.util.UUID;
import java.util.logging.Logger;
import javax.annotation.Resource;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.jboss.shrinkwrap.api.spec.ResourceAdapterArchive;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
/**
 * Test case for the HelloWorld/Native resource adapter
 */
@RunWith(Arquillian.class)
public class ConnectorTestCase
{
   private static Logger log = Logger.getLogger("ConnectorTestCase");
   /**
    * Define the deployment
    *
    * @return The deployment archive
    */
   @Deployment
   public static ResourceAdapterArchive createDeployment()
   {
      String deploymentName = "ConnectorTestCase.rar";
      ResourceAdapterArchive raa =
         ShrinkWrap.create(ResourceAdapterArchive.class, deploymentName);
      JavaArchive ja = ShrinkWrap.create(JavaArchive.class, 
         UUID.randomUUID().toString() + ".jar");
      ja.addClasses(HelloWorldResourceAdapter.class, 
         HelloWorldManagedConnectionFactory.class, 
         HelloWorldManagedConnection.class, 
         HelloWorldManagedConnectionMetaData.class, 
         HelloWorldConnectionFactory.class, 
         HelloWorldConnectionFactoryImpl.class, 
         HelloWorldConnection.class, 
         HelloWorldConnectionImpl.class);
      raa.addAsLibrary(ja);
      raa.addAsManifestResource("META-INF/ironjacamar.xml", "ironjacamar.xml");
      String rootPath =
         System.getProperty("test.dir") + File.separator + ".." + File.separator;
      File root = new File(rootPath);
      for (File f : root.listFiles())
      {
         if (f.getName().contains("HelloWorld"))
            raa.addAsLibrary(f);
      }
      log.info(raa.toString(true));
      return raa;
   }
   /** Resource */
   @Resource(mappedName = "java:/eis/HelloWorld")
   private HelloWorldConnectionFactory connectionFactory;
   /**
    * Test helloWorld
    *
    * @exception Throwable Thrown if case of an error
    */
   @Test
   public void testHelloWorldNoArgs() throws Throwable
   {
      assertNotNull(connectionFactory);
      HelloWorldConnection connection = connectionFactory.getConnection();
      assertNotNull(connection);
      String result = connection.helloWorld();
      assertNotNull(result);
      connection.close();
   }
   /**
    * Test helloWorld
    *
    * @exception Throwable Thrown if case of an error
    */
   @Test
   public void testHelloWorldNameString() throws Throwable
   {
      assertNotNull(connectionFactory);
      HelloWorldConnection connection = connectionFactory.getConnection();
      assertNotNull(connection);
      String result = connection.helloWorld(null);
      assertNotNull(result);
      connection.close();
   }
}
      


<!--
/*
 * IronJacamar, a Java EE Connector Architecture implementation
 * Copyright 2010, Red Hat Inc, 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.
 */
-->

<project name="helloworld-native" basedir="." default="rar">

  <!-- ================================= 
       Properties              
       ================================= -->
  <property name="build.dir" value="${basedir}/build" />
  <property name="target.dir" value="${basedir}/target" />
  <property name="lib.dir" value="${basedir}/lib" />

  <property name="javac.debug" value="on" />
  <property name="javac.deprecation" value="on" />
  <property name="javac.optimize" value="off" />
  <property name="javac.encoding" value="utf-8" />

  <property name="junit.printsummary" value="yes" />
  <property name="junit.haltonerror" value="no" />
  <property name="junit.haltonfailure" value="no" />
  <property name="junit.fork" value="yes" />
  <property name="junit.timeout" value="60000" />
  <property name="junit.jvm" value="" />
  <property name="junit.jvm.options" value="-Xms128m -Xmx512m -XX:MaxPermSize=256m" />
  <property name="junit.batchtest.haltonerror" value="no" />
  <property name="junit.batchtest.haltonfailure" value="no" />
  <property name="junit.batchtest.fork" value="yes" />
  
  <path id="lib.path.id">
    <fileset dir="${lib.dir}">
      <include name="**/*.jar"/>
    </fileset>
  </path>

  <path id="native.path.id">
    <fileset dir="${lib.dir}">
      <include name="**/*.jar"/>
    </fileset>
    <pathelement path="${build.dir}"/>
  </path>
  
  <path id="test.lib.path.id">
    <fileset dir="${lib.dir}">
      <include name="**/*.jar"/>
    </fileset>
    <fileset dir="${build.dir}">
      <include name="**/*.jar"/>
    </fileset>
  </path>
  
  <!-- ================================= 
       Target: init
       ================================= -->
  <target name="init">
    <mkdir dir="${build.dir}" />
    <mkdir dir="${build.dir}/c" />
    <mkdir dir="${lib.dir}" />
  </target>

  <!-- ================================= 
       Target: compile
       ================================= -->
  <target name="compile" depends="init">
    <javac srcdir="${basedir}/src/main/java"
           destdir="${build.dir}"
           classpathref="lib.path.id"
           debug="${javac.debug}"
           deprecation="${javac.deprecation}"
           encoding="${javac.encoding}"
           optimize="${javac.optimize}">
    </javac> 
  </target>
  
  <!-- ================================= 
       Target: native
       ================================= -->
  <target name="native" depends="compile">
    <javah class="org.jboss.jca.samples.helloworld.HelloWorldManagedConnection"
           outputFile="${build.dir}/c/HelloWorld.h"
           force="true"
           classpathref="native.path.id">
    </javah>
  </target>

  <!-- ================================= 
       Target: rar
       ================================= -->
  <target name="rar">
    <mkdir dir="${target.dir}" />
    <mkdir dir="${basedir}/src/main/resources" />
    <jar destfile="${build.dir}/helloworld.jar"
         basedir="${build.dir}"
         includes="**/*.class"/>
    <jar destfile="${target.dir}/helloworld.rar">
      <fileset dir="${basedir}/src/main/resources" includes="META-INF/*"/>
      <fileset dir="${build.dir}" includes="*.jar"/>
      <fileset dir="${build.dir}" includes="*.so"/>
      <fileset dir="${build.dir}" includes="*.a"/>
      <fileset dir="${build.dir}" includes="*.dll"/>
    </jar>
  </target>
  
  <!-- ================================= 
       Target: prepare-test
       ================================= -->
  <target name="prepare-test" depends="init">
    <mkdir dir="${build.dir}/test" />

    <javac srcdir="src/test"
           destdir="${build.dir}/test"
           classpathref="test.lib.path.id"
           debug="${javac.debug}"
           deprecation="${javac.deprecation}"
           encoding="${javac.encoding}"
           optimize="${javac.optimize}">
      <compilerarg value="-Xlint"/>
    </javac> 

    <copy todir="${build.dir}/test">
      <fileset dir="src/main/resources"/>
      <fileset dir="src/test/resources"/>
    </copy>
  </target>

  <!-- ================================= 
       Target: test
       ================================= -->
  <target name="test" depends="rar, prepare-test">
    <mkdir dir="${basedir}/reports"/>

    <junit dir="src/test"
           printsummary="${junit.printsummary}"
           haltonerror="${junit.haltonerror}"
           haltonfailure="${junit.haltonfailure}"
           fork="${junit.fork}"
           timeout="${junit.timeout}">
      
      <jvmarg line="${junit.jvm.options}"/>
      <sysproperty key="archives.dir" value="${target.dir}"/>
      <sysproperty key="reports.dir" value="${basedir}/reports"/>
      <sysproperty key="java.util.logging.manager" value="org.jboss.logmanager.LogManager"/>
      <sysproperty key="log4j.defaultInitOverride" value="true"/>
      <sysproperty key="org.jboss.logging.Logger.pluginClass" 
                   value="org.jboss.logging.logmanager.LoggerPluginImpl"/>
      <sysproperty key="test.dir" value="${build.dir}/test"/>
      <sysproperty key="xb.builder.useUnorderedSequence" value="true"/>
      
      <classpath>
        <fileset dir="${lib.dir}" includes="**/*.jar" />
        <fileset dir="${build.dir}" includes="*.jar" />
        <pathelement location="${build.dir}/test"/>
      </classpath>
      
      <formatter type="plain"/>
      <formatter type="xml"/>
      
      <batchtest todir="${basedir}/reports"
                 haltonerror="${junit.batchtest.haltonerror}"
                 haltonfailure="${junit.batchtest.haltonfailure}"
                 fork="${junit.batchtest.fork}">
        
        <fileset dir="${build.dir}/test">
          <include name="**/*TestCase.class"/>
        </fileset>
      </batchtest>

    </junit>
    
  </target>
  
  <!-- ================================= 
       Target: docs
       ================================= -->
  <target name="docs" depends="compile">
    <mkdir dir="${target.dir}/docs"/>
    <javadoc packagenames="*"
             sourcepath="src/main/java"
             destdir="${target.dir}/docs"
             classpathref="lib.path.id">
    </javadoc>
  </target>
  
  <!-- ================================= 
       Target: clean              
       ================================= -->
  <target name="clean">
    <delete>
      <fileset dir="${basedir}" defaultexcludes="no">
        <include name="**/*~"/>
        <include name="**/*.bak"/>
      </fileset>
    </delete>
    <delete dir="${build.dir}"/>
    <delete dir="${target.dir}"/>
    <delete dir="${basedir}/reports"/>

    <!-- cmake environment -->
    <delete file="${basedir}/Makefile"/>
    <delete file="${basedir}/cmake_install.cmake"/>
    <delete dir="${basedir}/CMakeFiles"/>
    <delete file="${basedir}/CMakeCache.txt"/>
  </target>

  <!-- ================================= 
       Target: dist-clean              
       ================================= -->
  <target name="dist-clean" depends="init,clean">
    <delete includeemptydirs="true">
      <fileset dir="${lib.dir}" includes="**/*"/>
    </delete>
  </target>

</project>

      


/*
 * IronJacamar, a Java EE Connector Architecture implementation
 * Copyright 2012, Red Hat Inc, 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.jca.samples.helloworld;
import java.util.logging.Logger;
import javax.resource.ResourceException;
import javax.resource.spi.ActivationSpec;
import javax.resource.spi.BootstrapContext;
import javax.resource.spi.ConfigProperty;
import javax.resource.spi.Connector;
import javax.resource.spi.ResourceAdapter;
import javax.resource.spi.ResourceAdapterInternalException;
import javax.resource.spi.TransactionSupport;
import javax.resource.spi.endpoint.MessageEndpointFactory;
import javax.transaction.xa.XAResource;
/**
 * HelloWorldResourceAdapter
 *
 * @version $Revision: $
 */
@Connector(
   reauthenticationSupport = false,
   transactionSupport = TransactionSupport.TransactionSupportLevel.NoTransaction)
public class HelloWorldResourceAdapter implements ResourceAdapter
{
   /** The logger */
   private static Logger log = Logger.getLogger("HelloWorldResourceAdapter");
   /** Name property */
   @ConfigProperty(defaultValue = "AS 7", supportsDynamicUpdates = true)
   private String name;
   /**
    * Default constructor
    */
   public HelloWorldResourceAdapter()
   {
   }
   /** 
    * Set name
    * @param name The value
    */
   public void setName(String name)
   {
      this.name = name;
   }
   /** 
    * Get name
    * @return The value
    */
   public String getName()
   {
      return name;
   }
   /**
    * This is called during the activation of a message endpoint.
    *
    * @param endpointFactory A message endpoint factory instance.
    * @param spec An activation spec JavaBean instance.
    * @throws ResourceException generic exception 
    */
   public void endpointActivation(MessageEndpointFactory endpointFactory,
                                  ActivationSpec spec) throws ResourceException
   {
   }
   /**
    * This is called when a message endpoint is deactivated. 
    *
    * @param endpointFactory A message endpoint factory instance.
    * @param spec An activation spec JavaBean instance.
    */
   public void endpointDeactivation(MessageEndpointFactory endpointFactory,
                                    ActivationSpec spec)
   {
   }
   /**
    * This is called when a resource adapter instance is bootstrapped.
    *
    * @param ctx A bootstrap context containing references 
    * @throws ResourceAdapterInternalException indicates bootstrap failure.
    */
   public void start(BootstrapContext ctx)
      throws ResourceAdapterInternalException
   {
   }
   /**
    * This is called when a resource adapter instance is undeployed or
    * during application server shutdown. 
    */
   public void stop()
   {
   }
   /**
    * This method is called by the application server during crash recovery.
    *
    * @param specs an array of ActivationSpec JavaBeans 
    * @throws ResourceException generic exception 
    * @return an array of XAResource objects
    */
   public XAResource[] getXAResources(ActivationSpec[] specs)
      throws ResourceException
   {
      return null;
   }
   /** 
    * Returns a hash code value for the object.
    * @return A hash code value for this object.
    */
   @Override
   public int hashCode()
   {
      int result = 17;
      if (name != null)
         result += 31 * result + 7 * name.hashCode();
      else
         result += 31 * result + 7;
      return result;
   }
   /** 
    * Indicates whether some other object is equal to this one.
    * @param other The reference object with which to compare.
    * @return true If this object is the same as the obj argument, false otherwise.
    */
   @Override
   public boolean equals(Object other)
   {
      if (other == null)
         return false;
      if (other == this)
         return true;
      if (!(other instanceof HelloWorldResourceAdapter))
         return false;
      HelloWorldResourceAdapter obj = (HelloWorldResourceAdapter)other;
      boolean result = true; 
      if (result)
      {
         if (name == null)
            result = obj.getName() == null;
         else
            result = name.equals(obj.getName());
      }
      return result;
   }
}
      


/*
 * IronJacamar, a Java EE Connector Architecture implementation
 * Copyright 2012, Red Hat Inc, 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.jca.samples.helloworld;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.Set;
import java.util.logging.Logger;
import javax.resource.ResourceException;
import javax.resource.spi.ConnectionDefinition;
import javax.resource.spi.ConnectionManager;
import javax.resource.spi.ConnectionRequestInfo;
import javax.resource.spi.ManagedConnection;
import javax.resource.spi.ManagedConnectionFactory;
import javax.resource.spi.ResourceAdapter;
import javax.resource.spi.ResourceAdapterAssociation;
import javax.security.auth.Subject;
/**
 * HelloWorldManagedConnectionFactory
 *
 * @version $Revision: $
 */
@ConnectionDefinition(connectionFactory = HelloWorldConnectionFactory.class,
   connectionFactoryImpl = HelloWorldConnectionFactoryImpl.class,
   connection = HelloWorldConnection.class,
   connectionImpl = HelloWorldConnectionImpl.class)
public class HelloWorldManagedConnectionFactory 
   implements ManagedConnectionFactory, ResourceAdapterAssociation
{
   /** The serialVersionUID */
   private static final long serialVersionUID = 1L;
   /** The logger */
   private static Logger log = Logger.getLogger("HelloWorldManagedConnectionFactory");
   /** The resource adapter */
   private ResourceAdapter ra;
   /** The connection manager */
   private ConnectionManager cm;
   /** The logwriter */
   private PrintWriter logwriter;
   /**
    * Default constructor
    */
   public HelloWorldManagedConnectionFactory()
   {
      this.ra = null;
      this.cm = null;
      this.logwriter = null;
   }
   /**
    * Creates a Connection Factory instance. 
    *
    * @return EIS-specific Connection Factory instance or 
    *         javax.resource.cci.ConnectionFactory instance
    * @throws ResourceException Generic exception
    */
   public Object createConnectionFactory() throws ResourceException
   {
      throw new ResourceException("This resource adapter doesn't support non-managed environments");
   }
   /**
    * Creates a Connection Factory instance. 
    *
    * @param cxManager ConnectionManager to be associated with created EIS 
    *        connection factory instance
    * @return EIS-specific Connection Factory instance or 
    *        javax.resource.cci.ConnectionFactory instance
    * @throws ResourceException Generic exception
    */
   public Object createConnectionFactory(ConnectionManager cxManager) throws ResourceException
   {
      this.cm = cxManager;
      return new HelloWorldConnectionFactoryImpl(this, cxManager);
   }
   /**
    * Creates a new physical connection to the underlying EIS resource manager.
    *
    * @param subject Caller's security information
    * @param cxRequestInfo Additional resource adapter specific connection 
    *        request information
    * @throws ResourceException generic exception
    * @return ManagedConnection instance 
    */
   public ManagedConnection createManagedConnection(Subject subject,
                                                    ConnectionRequestInfo cxRequestInfo) 
      throws ResourceException
   {
      return new HelloWorldManagedConnection(cm, this);
   }
   /**
    * Returns a matched connection from the candidate set of connections. 
    *
    * @param connectionSet Candidate connection set
    * @param subject Caller's security information
    * @param cxRequestInfo Additional resource adapter specific connection request information
    * @throws ResourceException generic exception
    * @return ManagedConnection if resource adapter finds an acceptable match otherwise null 
    */
   public ManagedConnection matchManagedConnections(Set connectionSet,
                                                    Subject subject, ConnectionRequestInfo cxRequestInfo) 
      throws ResourceException
   {
      Iterator it = connectionSet.iterator();
      while (it.hasNext()) 
      {
         ManagedConnection mc = (ManagedConnection)it.next();
         if (mc instanceof HelloWorldManagedConnection) 
         {
            return (HelloWorldManagedConnection)mc;
         }
      }
      return null;
   }
   /**
    * Get the log writer for this ManagedConnectionFactory instance.
    *
    * @return PrintWriter
    * @throws ResourceException generic exception
    */
   public PrintWriter getLogWriter() throws ResourceException
   {
      return logwriter;
   }
   /**
    * Set the log writer for this ManagedConnectionFactory instance.
    *
    * @param out PrintWriter - an out stream for error logging and tracing
    * @throws ResourceException generic exception
    */
   public void setLogWriter(PrintWriter out) throws ResourceException
   {
      logwriter = out;
   }
   /**
    * Get the resource adapter
    *
    * @return The handle
    */
   public ResourceAdapter getResourceAdapter()
   {
      return ra;
   }
   /**
    * Set the resource adapter
    *
    * @param ra The handle
    */
   public void setResourceAdapter(ResourceAdapter ra)
   {
      this.ra = ra;
   }
   /** 
    * Returns a hash code value for the object.
    * @return A hash code value for this object.
    */
   @Override
   public int hashCode()
   {
      int result = 17;
      return result;
   }
   /** 
    * Indicates whether some other object is equal to this one.
    * @param other The reference object with which to compare.
    * @return true If this object is the same as the obj argument, false otherwise.
    */
   @Override
   public boolean equals(Object other)
   {
      if (other == null)
         return false;
      if (other == this)
         return true;
      if (!(other instanceof HelloWorldManagedConnectionFactory))
         return false;
      HelloWorldManagedConnectionFactory obj = (HelloWorldManagedConnectionFactory)other;
      boolean result = true; 
      return result;
   }
}
      


/*
 * IronJacamar, a Java EE Connector Architecture implementation
 * Copyright 2012, Red Hat Inc, 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.jca.samples.helloworld;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.logging.Logger;
import javax.resource.NotSupportedException;
import javax.resource.ResourceException;
import javax.resource.spi.ConnectionEvent;
import javax.resource.spi.ConnectionEventListener;
import javax.resource.spi.ConnectionManager;
import javax.resource.spi.ConnectionRequestInfo;
import javax.resource.spi.DissociatableManagedConnection;
import javax.resource.spi.LocalTransaction;
import javax.resource.spi.ManagedConnection;
import javax.resource.spi.ManagedConnectionMetaData;
import javax.security.auth.Subject;
import javax.transaction.xa.XAResource;
/**
 * HelloWorldManagedConnection
 *
 * @version $Revision: $
 */
public class HelloWorldManagedConnection implements ManagedConnection,
                                                    DissociatableManagedConnection
{
   /** The logger */
   private static Logger log = Logger.getLogger("HelloWorldManagedConnection");
   /** Connection manager */
   private ConnectionManager cm;
   /** MCF */
   private HelloWorldManagedConnectionFactory mcf;
   /** Log writer */
   private PrintWriter logWriter;
   /** Listeners */
   private List<ConnectionEventListener> listeners;
   /** Connection */
   private HelloWorldConnectionImpl connection;
   /**
    * Constructor
    * @param cm The connection manager
    * @param mcf The managed connection factory
    */
   public HelloWorldManagedConnection(ConnectionManager cm,
                                      HelloWorldManagedConnectionFactory mcf)
   {
      this.cm = cm;
      this.mcf = mcf;
      this.logWriter = null;
      this.listeners = Collections.synchronizedList(new ArrayList<ConnectionEventListener>(1));
      this.connection = null;
   }
   /**
    * Creates a new connection handle for the underlying physical connection 
    * represented by the ManagedConnection instance. 
    *
    * @param subject Security context as JAAS subject
    * @param cxRequestInfo ConnectionRequestInfo instance
    * @return generic Object instance representing the connection handle. 
    * @throws ResourceException generic exception if operation fails
    */
   public Object getConnection(Subject subject,
                               ConnectionRequestInfo cxRequestInfo) 
      throws ResourceException
   {
      if (connection != null)
      {
         connection.setManagedConnection(null);
      }
      connection = new HelloWorldConnectionImpl(this, mcf, cm, cxRequestInfo);
      return connection;
   }
   /**
    * Used by the container to change the association of an 
    * application-level connection handle with a ManagedConneciton instance.
    *
    * @param connection Application-level connection handle
    * @throws ResourceException generic exception if operation fails
    */
   public void associateConnection(Object connection) throws ResourceException
   {
      if (connection == null)
         throw new ResourceException("Null connection handle");
      if (!(connection instanceof HelloWorldConnectionImpl))
         throw new ResourceException("Wrong connection handle");
      if (this.connection != null)
      {
         this.connection.setManagedConnection(null);
      }
      this.connection = (HelloWorldConnectionImpl)connection;
      this.connection.setManagedConnection(this);
   }
   /**
    * This method is called by an application server (that is capable of lazy
    * connection association optimization) in order to dissociate a ManagedConnection
    * instance from all of its connection handles.
    * @exception ResourceException Thrown if an error occurs
    */
   public void dissociateConnections() throws ResourceException
   {
      if (connection != null)
      {
         connection.setManagedConnection(null);
         connection = null;
      }
   }
   /**
    * Application server calls this method to force any cleanup on 
    * the ManagedConnection instance.
    *
    * @throws ResourceException generic exception if operation fails
    */
   public void cleanup() throws ResourceException
   {
      if (connection != null)
      {
         connection.setManagedConnection(null);
         connection = null;
      }
   }
   /**
    * Destroys the physical connection to the underlying resource manager.
    *
    * @throws ResourceException generic exception if operation fails
    */
   public void destroy() throws ResourceException
   {
      if (connection != null)
      {
         connection.setManagedConnection(null);
         connection = null;
      }
   }
   /**
    * Adds a connection event listener to the ManagedConnection instance.
    *
    * @param listener A new ConnectionEventListener to be registered
    */
   public void addConnectionEventListener(ConnectionEventListener listener)
   {
      if (listener == null)
         throw new IllegalArgumentException("Listener is null");
      listeners.add(listener);
   }
   /**
    * Removes an already registered connection event listener 
    * from the ManagedConnection instance.
    *
    * @param listener Already registered connection event listener to be removed
    */
   public void removeConnectionEventListener(ConnectionEventListener listener)
   {
      if (listener == null)
         throw new IllegalArgumentException("Listener is null");
      listeners.remove(listener);
   }
   /**
    * Gets the log writer for this ManagedConnection instance.
    *
    * @return Character ourput stream associated with this 
    *         Managed-Connection instance
    * @throws ResourceException generic exception if operation fails
    */
   public PrintWriter getLogWriter() throws ResourceException
   {
      return logWriter;
   }
   /**
    * Sets the log writer for this ManagedConnection instance.
    *
    * @param out Character Output stream to be associated
    * @throws ResourceException generic exception if operation fails
    */
   public void setLogWriter(PrintWriter out) throws ResourceException
   {
      this.logWriter = out;
   }
   /**
    * Returns an <code>javax.resource.spi.LocalTransaction</code> instance.
    *
    * @return LocalTransaction instance
    * @throws ResourceException generic exception if operation fails
    */
   public LocalTransaction getLocalTransaction() throws ResourceException
   {
      throw new NotSupportedException("LocalTransaction not supported");
   }
   /**
    * Returns an <code>javax.transaction.xa.XAresource</code> instance. 
    *
    * @return XAResource instance
    * @throws ResourceException generic exception if operation fails
    */
   public XAResource getXAResource() throws ResourceException
   {
      throw new NotSupportedException("GetXAResource not supported");
   }
   /**
    * Gets the metadata information for this connection's underlying 
    * EIS resource manager instance. 
    *
    * @return ManagedConnectionMetaData instance
    * @throws ResourceException generic exception if operation fails
    */
   public ManagedConnectionMetaData getMetaData() throws ResourceException
   {
      return new HelloWorldManagedConnectionMetaData();
   }
   /**
    * Call helloWorld
    * @param name String name
    * @return String helloworld
    */
   String helloWorld(String name)
   {
      return "Hello World, " + name + " !";
   }
   /**
    * Close handle
    * @param handle The handle
    */
   void closeHandle(HelloWorldConnection handle)
   {
      ConnectionEvent event = new ConnectionEvent(this, ConnectionEvent.CONNECTION_CLOSED);
      event.setConnectionHandle(handle);
      for (ConnectionEventListener cel : listeners)
      {
         cel.connectionClosed(event);
      }
   }
}
      


/*
 * IronJacamar, a Java EE Connector Architecture implementation
 * Copyright 2012, Red Hat Inc, 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.jca.samples.helloworld;
import java.io.Serializable;
import javax.resource.Referenceable;
import javax.resource.ResourceException;
/**
 * HelloWorldConnectionFactory
 *
 * @version $Revision: $
 */
public interface HelloWorldConnectionFactory extends Serializable, Referenceable
{
   /** 
    * Get connection from factory
    *
    * @return HelloWorldConnection instance
    * @exception ResourceException Thrown if a connection can't be obtained
    */
   public HelloWorldConnection getConnection() throws ResourceException;
}
      


/*
 * IronJacamar, a Java EE Connector Architecture implementation
 * Copyright 2012, Red Hat Inc, 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.jca.samples.helloworld;
import javax.naming.NamingException;
import javax.naming.Reference;
import javax.resource.ResourceException;
import javax.resource.spi.ConnectionManager;
/**
 * HelloWorldConnectionFactoryImpl
 *
 * @version $Revision: $
 */
public class HelloWorldConnectionFactoryImpl implements HelloWorldConnectionFactory
{
   /** The serialVersionUID */
   private static final long serialVersionUID = 1L;
   private Reference reference;
   private HelloWorldManagedConnectionFactory mcf;
   private ConnectionManager connectionManager;
   /**
    * Default constructor
    * @param mcf ManagedConnectionFactory
    * @param cxManager ConnectionManager
    */
   public HelloWorldConnectionFactoryImpl(HelloWorldManagedConnectionFactory mcf,
                                          ConnectionManager cxManager)
   {
      this.mcf = mcf;
      this.connectionManager = cxManager;
   }
   /** 
    * Get connection from factory
    *
    * @return HelloWorldConnection instance
    * @exception ResourceException Thrown if a connection can't be obtained
    */
   @Override
   public HelloWorldConnection getConnection() throws ResourceException
   {
      return (HelloWorldConnection)connectionManager.allocateConnection(mcf, null);
   }
   /**
    * Get the Reference instance.
    *
    * @return Reference instance
    * @exception NamingException Thrown if a reference can't be obtained
    */
   @Override
   public Reference getReference() throws NamingException
   {
      return reference;
   }
   /**
    * Set the Reference instance.
    *
    * @param reference A Reference instance
    */
   @Override
   public void setReference(Reference reference)
   {
      this.reference = reference;
   }
}
      


/*
 * IronJacamar, a Java EE Connector Architecture implementation
 * Copyright 2012, Red Hat Inc, 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.jca.samples.helloworld;
/**
 * HelloWorldConnection
 *
 * @version $Revision: $
 */
public interface HelloWorldConnection
{
   /**
    * HelloWorld
    * @return String
    */
   public String helloWorld();
   /**
    * HelloWorld
    * @param name A name
    * @return String
    */
   public String helloWorld(String name);
   /**
    * Close
    */
   public void close();
}
      


/*
 * IronJacamar, a Java EE Connector Architecture implementation
 * Copyright 2012, Red Hat Inc, 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.jca.samples.helloworld;
import java.util.logging.Logger;
import javax.resource.spi.ConnectionManager;
import javax.resource.spi.ConnectionRequestInfo;
import javax.resource.spi.LazyAssociatableConnectionManager;
/**
 * HelloWorldConnectionImpl
 *
 * @version $Revision: $
 */
public class HelloWorldConnectionImpl implements HelloWorldConnection
{
   /** The logger */
   private static Logger log = Logger.getLogger("HelloWorldConnectionImpl");
   /** Connection Manager */
   private ConnectionManager cm;
   /** ManagedConnection */
   private HelloWorldManagedConnection mc;
   /** ManagedConnectionFactory */
   private HelloWorldManagedConnectionFactory mcf;
   /** ConnectionRequestInfo */
   private ConnectionRequestInfo cri;
   /**
    * Default constructor
    * @param mc HelloWorldManagedConnection
    * @param mcf HelloWorldManagedConnectionFactory
    * @param cm The connection manager
    * @param cri The connection request info
    */
   public HelloWorldConnectionImpl(HelloWorldManagedConnection mc,
                                   HelloWorldManagedConnectionFactory mcf,
                                   ConnectionManager cm,
                                   ConnectionRequestInfo cri)
   {
      this.mc = mc;
      this.mcf = mcf;
      this.cm = cm;
      this.cri = cri;
   }
   /**
    * Call helloWorld
    * @return String helloworld
    */
   public String helloWorld()
   {
      return helloWorld(((HelloWorldResourceAdapter)mcf.getResourceAdapter()).getName());
   }
   /**
    * Call helloWorld
    * @param name String name
    * @return String helloworld
    */
   public String helloWorld(String name)
   {
      if (mc == null)
         associate();
      return mc.helloWorld(name);
   }
   /**
    * Close
    */
   public void close()
   {
      if (mc != null)
      {
         mc.closeHandle(this);
      }
      else
      {
         if (cm instanceof LazyAssociatableConnectionManager)
         {
            LazyAssociatableConnectionManager lacm = (LazyAssociatableConnectionManager)cm;
            lacm.inactiveConnectionClosed(this, mcf);
         }
      }
   }
   /**
    * Set the managed connection
    * @param mc The managed connection
    */
   void setManagedConnection(HelloWorldManagedConnection mc)
   {
      this.mc = mc;
   }
   /**
    * Associate
    */
   private void associate()
   {
      if (cm instanceof LazyAssociatableConnectionManager)
      {
         try
         {
            LazyAssociatableConnectionManager lacm = (LazyAssociatableConnectionManager)cm;
            lacm.associateConnection(this, mcf, cri);
         }
         catch (Throwable t)
         {
            log.severe("Associate" + t.getMessage());
         }
      }
   }
}
      


/*
 * IronJacamar, a Java EE Connector Architecture implementation
 * Copyright 2012, Red Hat Inc, 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.jca.samples.helloworld;
import javax.resource.ResourceException;
import javax.resource.spi.ManagedConnectionMetaData;
/**
 * HelloWorldManagedConnectionMetaData
 *
 * @version $Revision: $
 */
public class HelloWorldManagedConnectionMetaData implements ManagedConnectionMetaData
{
   /**
    * Default constructor
    */
   public HelloWorldManagedConnectionMetaData()
   {
   }
   /**
    * Returns Product name of the underlying EIS instance connected 
    * through the ManagedConnection.
    *
    * @return Product name of the EIS instance
    * @throws ResourceException Thrown if an error occurs
    */
   @Override
   public String getEISProductName() throws ResourceException
   {
      return "HelloWorld Resource Adapter";
   }
   /**
    * Returns Product version of the underlying EIS instance connected 
    * through the ManagedConnection.
    *
    * @return Product version of the EIS instance
    * @throws ResourceException Thrown if an error occurs
    */
   @Override
   public String getEISProductVersion() throws ResourceException
   {
      return "1.0";
   }
   /**
    * Returns maximum limit on number of active concurrent connections 
    *
    * @return Maximum limit for number of active concurrent connections
    * @throws ResourceException Thrown if an error occurs
    */
   @Override
   public int getMaxConnections() throws ResourceException
   {
      return 0;
   }
   /**
    * Returns name of the user associated with the ManagedConnection instance
    *
    * @return Name of the user
    * @throws ResourceException Thrown if an error occurs
    */
   @Override
   public String getUserName() throws ResourceException
   {
      return null;
   }
}
      


/*
 * IronJacamar, a Java EE Connector Architecture implementation
 * Copyright 2012, Red Hat Inc, 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.jca.samples.helloworld;
import java.util.UUID;
import java.util.logging.Logger;
import javax.annotation.Resource;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.jboss.shrinkwrap.api.spec.ResourceAdapterArchive;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
/**
 * ConnectorTestCase
 *
 * @version $Revision: $
 */
@RunWith(Arquillian.class)
public class ConnectorTestCase
{
   private static Logger log = Logger.getLogger("ConnectorTestCase");
   private static String deploymentName = "ConnectorTestCase";
   /**
    * Define the deployment
    *
    * @return The deployment archive
    */
   @Deployment
   public static ResourceAdapterArchive createDeployment()
   {
      ResourceAdapterArchive raa =
         ShrinkWrap.create(ResourceAdapterArchive.class, deploymentName + ".rar");
      JavaArchive ja = ShrinkWrap.create(JavaArchive.class, 
         UUID.randomUUID().toString() + ".jar");
      ja.addClasses(HelloWorldResourceAdapter.class, 
         HelloWorldManagedConnectionFactory.class, 
         HelloWorldManagedConnection.class, 
         HelloWorldManagedConnectionMetaData.class, 
         HelloWorldConnectionFactory.class, 
         HelloWorldConnectionFactoryImpl.class, 
         HelloWorldConnection.class, 
         HelloWorldConnectionImpl.class);
      raa.addAsLibrary(ja);
      raa.addAsManifestResource("META-INF/ironjacamar.xml", "ironjacamar.xml");
      return raa;
   }
   /** resource */
   @Resource(mappedName = "java:/eis/HelloWorld")
   private HelloWorldConnectionFactory connectionFactory;
   /**
    * Test helloWorld
    *
    * @exception Throwable Thrown if case of an error
    */
   @Test
   public void testHelloWorldNoArgs() throws Throwable
   {
      assertNotNull(connectionFactory);
      HelloWorldConnection connection = connectionFactory.getConnection();
      assertNotNull(connection);
      String result = connection.helloWorld();
      connection.close();
   }
   /**
    * Test helloWorld
    *
    * @exception Throwable Thrown if case of an error
    */
   @Test
   public void testHelloWorldNameString() throws Throwable
   {
      assertNotNull(connectionFactory);
      HelloWorldConnection connection = connectionFactory.getConnection();
      assertNotNull(connection);
      String result = connection.helloWorld(null);
      connection.close();
   }
   /**
    * Test helloWorld with two connections
    *
    * max-pool-size is 1, so once getConnection() is called
    * the second time, the managed connection for connection1
    * is dissociated.
    *
    * @exception Throwable Thrown if case of an error
    */
   @Test
   public void testHelloWorldTwoConnections() throws Throwable
   {
      assertNotNull(connectionFactory);
      HelloWorldConnection connection1 = connectionFactory.getConnection();
      assertNotNull(connection1);
      String result1 = connection1.helloWorld(null);
      assertNotNull(result1);
      HelloWorldConnection connection2 = connectionFactory.getConnection();
      assertNotNull(connection2);
      String result2 = connection2.helloWorld(null);
      assertNotNull(result2);
      connection1.close();
      connection2.close();
   }
}
      


<!--
/*
 * IronJacamar, a Java EE Connector Architecture implementation
 * Copyright 2012, Red Hat Inc, 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.
 */
-->

<project name="helloworld-lazy" basedir="." default="rar">

  <!-- ================================= 
       Properties              
       ================================= -->
  <property name="build.dir" value="${basedir}/build" />
  <property name="target.dir" value="${basedir}/target" />
  <property name="lib.dir" value="${basedir}/lib" />

  <property name="javac.debug" value="on" />
  <property name="javac.deprecation" value="on" />
  <property name="javac.optimize" value="off" />
  <property name="javac.encoding" value="utf-8" />

  <property name="junit.printsummary" value="yes" />
  <property name="junit.haltonerror" value="no" />
  <property name="junit.haltonfailure" value="no" />
  <property name="junit.fork" value="yes" />
  <property name="junit.timeout" value="60000" />
  <property name="junit.jvm" value="" />
  <property name="junit.jvm.options" value="-Xms128m -Xmx512m -XX:MaxPermSize=256m" />
  <property name="junit.batchtest.haltonerror" value="no" />
  <property name="junit.batchtest.haltonfailure" value="no" />
  <property name="junit.batchtest.fork" value="yes" />
  
  <path id="lib.path.id">
    <fileset dir="${lib.dir}">
      <include name="**/*.jar"/>
    </fileset>
  </path>
    
  <path id="test.lib.path.id">
    <fileset dir="${lib.dir}">
      <include name="**/*.jar"/>
    </fileset>
    <fileset dir="${build.dir}">
      <include name="**/*.jar"/>
    </fileset>
  </path>
  
  <!-- ================================= 
       Target: init
       ================================= -->
  <target name="init">
    <mkdir dir="${lib.dir}" />
  </target>

  <!-- ================================= 
       Target: compile
       ================================= -->
  <target name="compile" depends="init">
    <mkdir dir="${build.dir}" />

    <javac srcdir="${basedir}/src/main/java"
           destdir="${build.dir}"
           classpathref="lib.path.id"
           debug="${javac.debug}"
           deprecation="${javac.deprecation}"
           encoding="${javac.encoding}"
           optimize="${javac.optimize}">
    </javac> 
  </target>
  
  <!-- ================================= 
       Target: rar
       ================================= -->
  <target name="rar" depends="compile">
    <mkdir dir="${target.dir}" />
    <mkdir dir="${basedir}/src/main/resources" />
    <jar destfile="${build.dir}/helloworld.jar"
         basedir="${build.dir}"
         includes="**/*.class"/>
    <jar destfile="${target.dir}/helloworld.rar">
      <fileset dir="${basedir}/src/main/resources" includes="META-INF/*"/>
      <fileset dir="${build.dir}" includes="**/*.jar"/>
    </jar>
  </target>
  
      
  <!-- ================================= 
       Target: prepare-test
       ================================= -->
  <target name="prepare-test" depends="init">
    <mkdir dir="${build.dir}/test" />

    <javac srcdir="src/test"
           destdir="${build.dir}/test"
           classpathref="test.lib.path.id"
           debug="${javac.debug}"
           deprecation="${javac.deprecation}"
           encoding="${javac.encoding}"
           optimize="${javac.optimize}">
      <compilerarg value="-Xlint"/>
    </javac> 

    <copy todir="${build.dir}/test">
      <fileset dir="src/main/resources"/>
      <fileset dir="src/test/resources"/>
    </copy>
  </target>

  <!-- ================================= 
       Target: test
       ================================= -->
  <target name="test" depends="rar, prepare-test">
    <mkdir dir="${basedir}/reports"/>

    <junit dir="src/test"
           printsummary="${junit.printsummary}"
           haltonerror="${junit.haltonerror}"
           haltonfailure="${junit.haltonfailure}"
           fork="${junit.fork}"
           timeout="${junit.timeout}">
      
      <jvmarg line="${junit.jvm.options}"/>
      <sysproperty key="archives.dir" value="${target.dir}"/>
      <sysproperty key="reports.dir" value="${basedir}/reports"/>
      <sysproperty key="java.util.logging.manager" value="org.jboss.logmanager.LogManager"/>
      <sysproperty key="log4j.defaultInitOverride" value="true"/>
      <sysproperty key="org.jboss.logging.Logger.pluginClass" 
                   value="org.jboss.logging.logmanager.LoggerPluginImpl"/>
      <sysproperty key="test.dir" value="${build.dir}/test"/>
      <sysproperty key="xb.builder.useUnorderedSequence" value="true"/>
      
      <classpath>
        <fileset dir="${lib.dir}" includes="**/*.jar" />
        <fileset dir="${build.dir}" includes="*.jar" />
        <pathelement location="${build.dir}/test"/>
      </classpath>
      
      <formatter type="plain"/>
      <formatter type="xml"/>
      
      <batchtest todir="${basedir}/reports"
                 haltonerror="${junit.batchtest.haltonerror}"
                 haltonfailure="${junit.batchtest.haltonfailure}"
                 fork="${junit.batchtest.fork}">
        
        <fileset dir="${build.dir}/test">
          <include name="**/*TestCase.class"/>
        </fileset>
      </batchtest>

    </junit>
    
  </target>
  
  <!-- ================================= 
       Target: docs
       ================================= -->
  <target name="docs" depends="compile">
    <mkdir dir="${target.dir}/docs"/>
    <javadoc packagenames="*"
             sourcepath="src/main/java"
             destdir="${target.dir}/docs"
             classpathref="lib.path.id">
    </javadoc>
  </target>
  
  <!-- ================================= 
       Target: clean              
       ================================= -->
  <target name="clean">
    <delete>
      <fileset dir="${basedir}" defaultexcludes="no">
        <include name="**/*~"/>
        <include name="**/*.bak"/>
      </fileset>
    </delete>
    <delete dir="${build.dir}"/>
    <delete dir="${target.dir}"/>
    <delete dir="${basedir}/reports"/>
  </target>

  <!-- ================================= 
       Target: dist-clean              
       ================================= -->
  <target name="dist-clean" depends="init,clean">
    <delete includeemptydirs="true">
      <fileset dir="${lib.dir}" includes="**/*"/>
    </delete>
  </target>

</project>