|
Java EE 6 example source code file (ManagedConnectionFactoryImpl.java)
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: |
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 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.