blob: 4cf1148763ea717268943e572cbca693611249c0 [file] [log] [blame]
/*
* Copyright (c) 1997, 2020 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 v. 2.0, which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* This Source Code may also be made available under the following Secondary
* Licenses when the conditions for such availability set forth in the
* Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
* version 2 with the GNU Classpath Exception, which is available at
* https://www.gnu.org/software/classpath/license.html.
*
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
*/
package com.sun.gjc.spi;
import static jakarta.resource.spi.AuthenticationMechanism.CredentialInterface.PasswordCredential;
import static java.util.logging.Level.SEVERE;
import java.util.Timer;
import java.util.logging.Logger;
import javax.transaction.xa.XAResource;
import com.sun.logging.LogDomains;
import jakarta.resource.NotSupportedException;
import jakarta.resource.spi.ActivationSpec;
import jakarta.resource.spi.AuthenticationMechanism;
import jakarta.resource.spi.BootstrapContext;
import jakarta.resource.spi.Connector;
import jakarta.resource.spi.ResourceAdapter;
import jakarta.resource.spi.UnavailableException;
import jakarta.resource.spi.endpoint.MessageEndpointFactory;
/**
* <code>ResourceAdapterImpl</code> implementation for Generic JDBC Connector.
*
* @author Evani Sai Surya Kiran
* @version 1.0, 02/08/05
*/
@Connector(
description = "Resource adapter wrapping implementation of driver",
displayName = "Resource Adapter",
vendorName = "Sun Microsystems",
eisType = "Database",
version = "1.0",
authMechanisms = {
@AuthenticationMechanism(
authMechanism = "BasicPassword",
credentialInterface = PasswordCredential)
}
)
public class ResourceAdapterImpl implements ResourceAdapter {
private static Logger logger = LogDomains.getLogger(ResourceAdapterImpl.class, LogDomains.RSR_LOGGER);
private static ResourceAdapterImpl resourceAdapterImpl;
private BootstrapContext bootstrapContext;
private Timer timer;
public ResourceAdapterImpl() {
if (resourceAdapterImpl == null) {
// We do not expect RA to be initialized multiple times as this is a System RAR
resourceAdapterImpl = this;
}
}
public static ResourceAdapterImpl getInstance() {
if (resourceAdapterImpl == null) {
throw new IllegalStateException("ResourceAdapter not initialized");
}
return resourceAdapterImpl;
}
/**
* Empty method implementation for endpointActivation which just throws
* <code>NotSupportedException</code>
*
* @param mef <code>MessageEndpointFactory</code>
* @param as <code>ActivationSpec</code>
* @throws <code>NotSupportedException</code>
*
*/
public void endpointActivation(MessageEndpointFactory mef, ActivationSpec as) throws NotSupportedException {
throw new NotSupportedException("This method is not supported for this JDBC connector");
}
/**
* Empty method implementation for endpointDeactivation
*
* @param mef <code>MessageEndpointFactory</code>
* @param as <code>ActivationSpec</code>
*/
public void endpointDeactivation(MessageEndpointFactory mef, ActivationSpec as) {
}
/**
* Empty method implementation for getXAResources which just throws
* <code>NotSupportedException</code>
*
* @param specs <code>ActivationSpec</code> array
* @throws <code>NotSupportedException</code>
*
*/
public XAResource[] getXAResources(ActivationSpec[] specs) throws NotSupportedException {
throw new NotSupportedException("This method is not supported for this JDBC connector");
}
/**
* Empty implementation of start method
*
* @param bootstrapContext <code>BootstrapContext</code>
*/
public void start(BootstrapContext bootstrapContext) {
this.bootstrapContext = bootstrapContext;
}
/**
* Empty implementation of stop method
*/
public void stop() {
logger.finest("Cancelling the timer");
if (timer != null) {
timer.purge();
timer.cancel();
}
}
public Timer getTimer() {
if (bootstrapContext != null) {
if (timer == null) {
logger.finest("Creating the timer");
try {
timer = bootstrapContext.createTimer();
} catch (UnavailableException ex) {
logger.log(SEVERE, "jdbc-ra.timer_creation_exception", ex.getMessage());
}
}
}
return timer;
}
}