blob: acec2953ca9dcc093431fe67ec14454ca4132993 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 1998, 2013 Oracle and/or its affiliates. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* Oracle - initial API and implementation from Oracle TopLink
******************************************************************************/
package org.eclipse.persistence.eis;
import javax.resource.cci.*;
import org.eclipse.persistence.internal.databaseaccess.Accessor;
import org.eclipse.persistence.internal.databaseaccess.Platform;
import org.eclipse.persistence.sessions.DatasourceLogin;
import org.eclipse.persistence.sessions.Session;
/**
* <p>An <code>EISLogin</code> defines connection information and datasource
* properties. There are three ways to connect to an EIS datasource through
* EclipseLink EIS:
* <ul>
* <li>Provide a JNDI name to the ConnectionFactory and use the default
* getConnection
* <li>Provide a JNDI name to the ConnectionFactory and a driver specific
* ConnectionSpec to pass to the getConnection
* <li>Connect in a non-managed way directly to the driver specific
* ConnectionFactory
* </ul>
*
* <p> A <code>EISConnectionSpec</code> must be provided to define how to
* connect to the EIS adapter.
*
* <p> The EIS platform can be used to provide datasource/driver specific
* behavior such as InteractionSpec and Record conversion.
*
* @see EISConnectionSpec
*
* @author James
* @since OracleAS TopLink 10<i>g</i> (10.0.3)
*/
public class EISLogin extends DatasourceLogin {
/**
* Default constructor.
*/
public EISLogin() {
this(new EISPlatform());
}
/**
* Constructor.
*/
public EISLogin(Platform platform) {
super(platform);
this.connector = new EISConnectionSpec();
}
/**
* Build and return the EIS accessorr.
*/
public Accessor buildAccessor() {
return new EISAccessor();
}
/**
* Connect to the EIS adapter and return the Connection.
*/
public Object connectToDatasource(Accessor accessor, Session session) {
return getConnectionSpec().connectToDataSource((EISAccessor)accessor, getProperties());
}
/**
* PUBLIC:
* Set the password.
*/
public void setPassword(String password) {
// Avoid encryption
// Bug 4117441 - Secure programming practices, store password in char[]
if (password != null) {
setProperty("password", password.toCharArray());
} else {
// is null so remove the property
// respect explicit de-referencing of password
removeProperty("password");
}
}
/**
* PUBLIC:
* Return the JNDI URL for the managed connection factory for the JCA adapter connecting to.
*/
public String getConnectionFactoryURL() {
if ((getConnectionSpec().getName() == null) || (getConnectionSpec().getName().size() == 0)) {
return null;
}
return getConnectionSpec().getName().get(0);
}
/**
* PUBLIC:
* Set the JNDI URL for the managed connection factory for the JCA adapter connecting to.
*/
public void setConnectionFactoryURL(String url) {
if ((url == null) || (url.length() == 0)) {
return;
}
getConnectionSpec().setName(url);
}
/**
* Return the connector.
* The connector defines how the connection is created.
*/
public EISConnectionSpec getConnectionSpec() {
return (EISConnectionSpec)getConnector();
}
/**
* PUBLIC:
* Set the EclipseLink connection spec.
* The connection spec defines how to connect to the EIS adapter.
*/
public void setConnectionSpec(EISConnectionSpec connectionSpec) {
setConnector(connectionSpec);
}
/**
* PUBLIC:
* Configure the login to connect through a JDNI managed connection factory and the default getConnection().
*/
public void configureConnectionSpec(String jndiName) {
setConnectionSpec(new EISConnectionSpec(jndiName));
}
/**
* PUBLIC:
* Configure the login to connect through a non-managed connection factory and the default getConnection().
*/
public void configureConnectionSpec(ConnectionFactory connectionFactory) {
EISConnectionSpec spec = new EISConnectionSpec();
spec.setConnectionFactory(connectionFactory);
setConnectionSpec(spec);
}
/**
* PUBLIC:
* Configure the login to connect through a JDNI managed connection factory and adapter connection spec.
*/
public void configureConnectionSpec(String jndiName, ConnectionSpec connectionSpec) {
EISConnectionSpec spec = new EISConnectionSpec(jndiName);
spec.setConnectionSpec(connectionSpec);
setConnectionSpec(spec);
}
/**
* PUBLIC:
* Configure the login to connect through a non-managed connection factory and adapter connection spec.
*/
public void configureConnectionSpec(ConnectionFactory connectionFactory, ConnectionSpec connectionSpec) {
EISConnectionSpec spec = new EISConnectionSpec();
spec.setConnectionFactory(connectionFactory);
spec.setConnectionSpec(connectionSpec);
setConnectionSpec(spec);
}
}