All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.vertx.resourceadapter.impl.VertxManagedConnection Maven / Gradle / Ivy

There is a newer version: 3.9.8
Show newest version
package io.vertx.resourceadapter.impl;

import io.vertx.core.Vertx;
import io.vertx.resourceadapter.VertxEventBus;

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;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.logging.Logger;

/**
 * VertxManagedConnection
 *
 */
public class VertxManagedConnection implements ManagedConnection, VertxHolder {

  private static final Logger log = Logger.getLogger(VertxManagedConnection.class.getName());

  private PrintWriter logwriter;

  private final VertxManagedConnectionFactory mcf;

  private final List listeners
    = Collections.synchronizedList(new ArrayList<>(1));;

  private VertxConnectionImpl vertxConn;

  private final Vertx vertx;
  
  public VertxManagedConnection(VertxManagedConnectionFactory mcf, Vertx vertx)
      throws ResourceException {
    this.mcf = mcf;
    this.vertx = vertx;
    this.logwriter = null;
    this.vertxConn = null;
    VertxPlatformFactory.instance().addVertxHolder(this);
  }

  public VertxManagedConnectionFactory getManagementConnectionFactory() {
    return this.mcf;
  }

  @Override
  public Vertx getVertx() {
    return this.vertx;
  }

  /**
   * 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 {
    log.finest("getConnection()");
    this.vertxConn = new VertxConnectionImpl(this);
    return vertxConn;
  }

  /**
   * 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 {
    log.finest("associateConnection()");

    if (connection == null)
      throw new ResourceException("Null connection handle");

    if (!(connection instanceof VertxConnectionImpl))
      throw new ResourceException("Wrong connection handle");

    this.vertxConn = (VertxConnectionImpl) 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 {
    // there is no client-specific properties
    log.finest("cleanup()");
  }

  /**
   * Destroys the physical connection to the underlying resource manager.
   *
   * @throws ResourceException
   *           generic exception if operation fails
   */
  public void destroy() throws ResourceException {
    log.finest("destroy()");
    VertxPlatformFactory.instance().removeVertxHolder(this);
  }

  /**
   * Adds a connection event listener to the ManagedConnection instance.
   *
   * @param listener
   *          A new ConnectionEventListener to be registered
   */
  public void addConnectionEventListener(ConnectionEventListener listener) {
    log.finest("addConnectionEventListener()");
    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) {
    log.finest("removeConnectionEventListener()");
    if (listener == null)
      throw new IllegalArgumentException("Listener is null");
    listeners.remove(listener);
  }

  /**
   * Close handle
   *
   * @param handle
   *          The handle
   */
  void closeHandle(VertxConnectionImpl handle) {
    ConnectionEvent event = new ConnectionEvent(this,
        ConnectionEvent.CONNECTION_CLOSED);
    event.setConnectionHandle(handle);
    for (ConnectionEventListener cel : listeners) {
      cel.connectionClosed(event);
    }
  }

  /**
   * Gets the log writer for this ManagedConnection instance.
   *
   * @return Character output stream associated with this Managed-Connection
   *         instance
   * @throws ResourceException
   *           generic exception if operation fails
   */
  public PrintWriter getLogWriter() throws ResourceException {
    log.finest("getLogWriter()");
    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 {
    log.finest("setLogWriter()");
    logwriter = out;
  }

  /**
   * Returns an javax.resource.spi.LocalTransaction instance.
   *
   * @return LocalTransaction instance
   * @throws ResourceException
   *           generic exception if operation fails
   */
  public LocalTransaction getLocalTransaction() throws ResourceException {
    throw new NotSupportedException("getLocalTransaction() not supported");
  }

  /**
   * Returns an javax.transaction.xa.XAresource 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 {
    log.finest("getMetaData()");
    return new VertxManagedConnectionMetaData();
  }

  VertxEventBus getVertxEventBus() {
    return new WrappedEventBus(vertx.eventBus());
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy