home | career | drupal | java | mac | mysql | perl | scala | uml | unix  

Java EE 6 example source code file (ManagedConnectionFactoryImpl.java)

This example Java EE 6 source code file (ManagedConnectionFactoryImpl.java) is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Java - Java EE 6 tags/keywords

bean, configproperty, io, javabean, javamailconnectionfactoryimpl, log, logging, managedconnectionfactoryimpl, managedconnectionfactoryimpl, managedconnectionimpl, managedconnectionimpl, mcf::createconnectionfactory, object, printwriter, propertychangesupport, resourceexception, resourceexception, string, string, util

The Java EE 6 ManagedConnectionFactoryImpl.java source code

/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 *
 * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
 *
 * The contents of this file are subject to the terms of either the GNU
 * General Public License Version 2 only ("GPL") or the Common Development
 * and Distribution License("CDDL") (collectively, the "License").  You
 * may not use this file except in compliance with the License. You can obtain
 * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
 * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
 * language governing permissions and limitations under the License.
 *
 * When distributing the software, include this License Header Notice in each
 * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
 * Sun designates this particular file as subject to the "Classpath" exception
 * as provided by Sun in the GPL Version 2 section of the License file that
 * accompanied this code.  If applicable, add the following below the License
 * Header, with the fields enclosed by brackets [] replaced by your own
 * identifying information: "Portions Copyrighted [year]
 * [name of copyright owner]"
 *
 * Contributor(s):
 *
 * If you wish your version of this file to be governed by only the CDDL or
 * only the GPL Version 2, indicate your decision by adding "[Contributor]
 * elects to include this software in this distribution under the [CDDL or GPL
 * Version 2] license."  If you don't indicate a single choice of license, a
 * recipient has the option to distribute your version of this file under
 * either the CDDL, the GPL Version 2 or to extend the choice of license to
 * its licensees as provided above.  However, if you add GPL Version 2 code
 * and therefore, elected the GPL Version 2 license, then the option applies
 * only if the new code is made subject to such option by the copyright
 * holder.
 */

package samples.connectors.mailconnector.ra.outbound;

import javax.resource.spi.*;
import java.lang.Object;
import javax.resource.ResourceException;
import javax.security.auth.Subject;
import java.io.PrintWriter;
import java.io.Serializable;
import javax.resource.spi.security.PasswordCredential;
import java.util.*;
import java.util.logging.*;
import java.beans.*;
import java.io.*;

/**
 * An object of this class is a factory of both ManagedConnection and
 * connection factory instances.
 * This class supports connection pooling by defining methods for
 * matching and creating connections.
 * This class is implemented as a JavaBeans component.
 */

@ConnectionDefinition(
        connectionFactory = samples.connectors.mailconnector.api.JavaMailConnectionFactory.class,
        connectionFactoryImpl = samples.connectors.mailconnector.ra.outbound.JavaMailConnectionFactoryImpl.class,
        connection = samples.connectors.mailconnector.api.JavaMailConnection.class,
        connectionImpl = samples.connectors.mailconnector.ra.outbound.JavaMailConnectionImpl.class
)
public class ManagedConnectionFactoryImpl implements 
    ManagedConnectionFactory, Serializable 
{
    private transient PrintWriter out;
    private transient PropertyChangeSupport changes = 
        new PropertyChangeSupport(this);
  
    static Logger logger = 
        Logger.getLogger("samples.connectors.mailconnector.ra.outbound",
            "samples.connectors.mailconnector.ra.outbound.LocalStrings");

    /**
     * Constructor.
     */

    public ManagedConnectionFactoryImpl() 
    {
        logger.fine(" 1.- ManagedConnectionFactoryImpl::Constructor");
    }

    /**
     * Creates a Connection Factory instance. The ConnectionFactory instance 
     * is initialized with the passed ConnectionManager. In the managed 
     * scenario, ConnectionManager is provided by the application server.
     *
     * @param cxManager ConnectionManager to be associated with created EIS 
     *                  connection factory instance
     *
     * @return    EIS-specific Connection Factory instance
     *
     * @exception ResourceException if the attempt to create a connection 
     *                              factory fails
     */

    public Object createConnectionFactory(ConnectionManager cxManager) 
	throws ResourceException
    {
    	logger.fine(" 2.- MCF::createConnectionFactory(cxManager)");
    	JavaMailConnectionFactoryImpl cf = null;
    	try
	{
      	    cf = new JavaMailConnectionFactoryImpl(this, cxManager);
    	} catch(Exception e) {
      	    throw new ResourceException(e.getMessage());
    	}
    	return cf;
    }

    /**
     * Creates a Connection Factory instance. The Connection Factory instance 
     * is initialized with a default ConnectionManager. In the non-managed 
     * scenario, the ConnectionManager is provided by the resource adapter.
     *
     * @return EIS-specific Connection Factory instance
     *
     * @exception ResourceException if the attempt to create a connection 
     *                              factory fails
     */                        

    public Object createConnectionFactory() 
	throws ResourceException
    {
        logger.fine(" 2.- MCF::createConnectionFactory()");
        return new JavaMailConnectionFactoryImpl(this, null);
    }


    /**
     * ManagedConnectionFactory uses the security information (passed as 
     * Subject) and additional ConnectionRequestInfo (which is specific to 
     * ResourceAdapter and opaque to application server) to create this new 
     * connection.
     *
     * @param subject   caller's security information
     * @param cxRequestInfo   additional resource adapter specific connection 
     *                        request information
     *
     * @return  ManagedConnection instance
     *
     * @exception ResourceException if the attempt to create a connection fails
     */

    public ManagedConnection createManagedConnection(Subject subject, 
				ConnectionRequestInfo cxRequestInfo) 
	throws ResourceException
    {
    	logger.fine(" 3A.- ManagedConnectionFactory::createManagedConnection(Subject, cxM)");
        String userName = null;
        ManagedConnectionImpl mc = null;

        mc = new ManagedConnectionImpl(this, subject, cxRequestInfo);

        return mc;
    }


    /**
     * Returns a matched managed  connection from the candidate set of connections.
     * ManagedConnectionFactory uses the security info (as in Subject) and 
     * information provided through ConnectionRequestInfo and additional 
     * Resource Adapter specific criteria to do matching.
     * A MC that has the requested store is returned as a match
     *
     * @param connectionSet  candidate connection set
     * @param subject  caller's security information
     * @param cxRequestInfo  additional resource adapter specific connection 
     *                       request information
     *
     * @return ManagedConnection  if resource adapter finds an acceptable 
     *                            match, otherwise null
     *
     * @exception ResourceException if the match fails
     */

    public ManagedConnection matchManagedConnections(Set connectionSet, 
				    Subject subject, 
				    ConnectionRequestInfo cxRequestInfo) 
	throws ResourceException
    {
        PasswordCredential pc = 
            Util.getPasswordCredential(this, subject, cxRequestInfo);

        String userName = null;

        if (pc != null)
            userName = pc.getUserName();

        Iterator it = connectionSet.iterator();
        while (it.hasNext()) 
	{
            Object obj = it.next();
            if (obj instanceof ManagedConnectionImpl) 
	    {
                ManagedConnectionImpl mc = (ManagedConnectionImpl) obj;
                ManagedConnectionFactory mcf = mc.getManagedConnectionFactory();

                if (Util.isPasswordCredentialEqual(mc.getPasswordCredential(), pc) 
                       //&& mcf.equals(this)
                       && mc.isTheSameStore((ConnectionRequestInfoImpl)cxRequestInfo)) 
		{
                    logger.finest("MCF::matchManagedConnections: found match mc = " + mc);
                    return mc;
                }
            }
        }
        return null;
    }


    /**
     * Sets the log writer for this ManagedConnectionFactory instance.
     * The log writer is a character output stream to which all logging and 
     * tracing messages for this ManagedConnectionfactory instance will be 
     * printed.
     *
     * @param out  an output stream for error logging and tracing
     *
     * @exception ResourceException if the method fails
     */

    public void setLogWriter(PrintWriter out) 
	throws ResourceException
    {
        this.out = out;
    }

    /**
     * Gets the log writer for this ManagedConnectionFactory instance.
     *
     * @return PrintWriter  an output stream for error logging and tracing
     *
     * @exception ResourceException if the method fails
     */

    public PrintWriter getLogWriter() 
	throws ResourceException
    {
        return this.out;
    }

    /**
     * Returns the hash code for the ManagedConnectionFactory.
     *(Concatenation of the MCF property values)
     *
     * @return int  hash code for the ManagedConnectionFactory   
     */

    public int hashCode()
    {
        //The rule here is that if two objects have the same Id
        //i.e. they are equal and the .equals method returns true
        //     then the .hashCode method *must* return the same
        //     hash code for those two objects
      	
       int hashcode = new String("").hashCode();

       if (userName != null)
          hashcode += userName.hashCode();

       if (password != null)
          hashcode += password.hashCode();
  
       if (serverName != null)
          hashcode += serverName.hashCode();
  
       if (protocol != null)
          hashcode += protocol.hashCode();
       
       if (folderName != null)
          folderName += folderName.hashCode();
  
       return hashcode;
    }

    /**
     * Check if this ManagedConnectionFactory is equal to another 
     * ManagedConnectionFactory.
     *
     * @param obj  another ManagedConnectionFactory
     *
     * @return boolean  true if the properties are the same
     */

    public boolean equals(Object obj)
    {
        if (obj != null) 
	{
            if (obj instanceof ManagedConnectionFactoryImpl) 
	    {
                ManagedConnectionFactoryImpl other = (ManagedConnectionFactoryImpl)obj;
                
                if ( !userName.equals(other.getUserName()) )
                    return false;
                if ( !password.equals(other.getPassword()) )
                    return false;
                if ( !serverName.equals(other.getServerName()) )
                    return false;
                if ( !folderName.equals(other.getFolderName()) )
                    return false;
                if ( !protocol.equals(other.getProtocol()) )
                    return false;
        
                return true;
            }
        }
        return false;
    }
 

    /**
     * Associate PropertyChangeListener with the ManagedConnectionFactory, 
     * in order to notify about properties changes. 
     *
     * @param lis  the PropertyChangeListener to be associated with the
     *             ManagedConnectionFactory
     */

    public void addPropertyChangeListener(PropertyChangeListener lis) 
    {
        changes.addPropertyChangeListener(lis);
    }


    /**
     * Delete association of PropertyChangeListener with the 
     * ManagedConnectionFactory.
     *
     * @param lis  the PropertyChangeListener to be removed
     */

    public void removePropertyChangeListener(PropertyChangeListener lis) 
    {
        changes.removePropertyChangeListener(lis);
    }
    
    private void readObject(ObjectInputStream in)
	throws IOException, ClassNotFoundException
    {
      	logger.finest("Before readObject mcf");
  
      	in.defaultReadObject();
      	this.changes = new PropertyChangeSupport(this);
      	this.out=null;
      	logger.finest("after readObject mcf");
    }


    //
    //	Properties
    //

    // serverName property value 
    private String serverName = new String("unknownServerName");
    
    // userName property value 
    private String userName = new String("unknownUserName");
    
    // password property value
    @ConfigProperty(
            type = String.class,
            defaultValue = "UnknownPassword"
    )
    private String password = new String("unknownPassword");
    
    // folderName property value
    @ConfigProperty(
            type=String.class,
            defaultValue="UnknownFolderName"
    )
    private String folderName = new String("Inbox");
    
    // Normally imap or pop3 
    private String protocol = new String("imap");
    
 
    /** 
     * Returns the value of the serverName property.
     *
     * @return  the value of the serverName property
     */

    public String getServerName() 
    {
        return this.serverName;
    }

    /** 
     * Sets the value of the serverName property
     *
     * @param  serverName  String containing the value to be assigned 
     *                     to serverName
     */

    @ConfigProperty(
            type = String.class,
            defaultValue = "UnknownHostName"
    )
    public void setServerName(String serverName) 
    {
        String oldName = this.serverName;
        this.serverName = serverName;
        changes.firePropertyChange("serverName", oldName, serverName);
    }

    /** 
     * Returns the value of the userName property.
     *
     * @return the value of the userName property
     */

    public String getUserName() 
    {
        return this.userName;
    }

    /** 
     * Sets the value of the userName property.
     *
     * @param userName  String containing the value to be assigned 
     *                  to userName
     */

    @ConfigProperty(
            type = String.class,
            defaultValue = "UnknownUserName"
    )
    public void setUserName(String userName) 
    {
        this.userName = userName;
    }

    /** 
     * Returns the value of the password property.
     *
     * @return  the value of the password property
     */

    public String getPassword() 
    {
        return this.password;
    }

    /** 
     * Sets the value of the password property.
     *
     * @param password  String containing the value to be assigned to 
     *                  password
     */

    public void setPassword(String password)
    {
        this.password = password;
    }

    /** 
     * Returns the value of the folderName property.
     *
     * @return  the value of the folderName property
     */

    public String getFolderName() 
    {
        return this.folderName;
    }

    /** 
     * Sets the value of the folderName property.
     *
     * @param folderName  String containing the value to be assigned 
     *                    to folderName
     */

    public void setFolderName(String folderName) 
    {
        this.folderName = folderName;
    }

    /** 
     * Returns the value of the protocol property.
     *
     * @return String  the value of the protocol property
     */

    public String getProtocol() 
    {
        return this.protocol;
    }

    /** 
     * Sets the value of the protocol property.
     *
     * @param protocol  String containing the value to be assigned to 
     *                  protocol
     */

    @ConfigProperty(
            description = "Typically Imap",
            type=String.class,
            defaultValue="Imap"
    )
    public void setProtocol(String protocol)
    {
        this.protocol = protocol;
    }

}

Other Java EE 6 examples (source code examples)

Here is a short list of links related to this Java EE 6 ManagedConnectionFactoryImpl.java source code file:



my book on functional programming

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.