Class FBManagedConnectionFactory

java.lang.Object
org.firebirdsql.jaybird.xca.FBManagedConnectionFactory
All Implemented Interfaces:
Serializable, AttachmentProperties, BaseProperties, DatabaseConnectionProperties, FirebirdConnectionProperties

public final class FBManagedConnectionFactory extends Object implements FirebirdConnectionProperties, Serializable
FBManagedConnectionFactory is a factory for FBManagedConnection, and implements many of the internal functions of FBManagedConnection. This behavior is required due to firebird requiring all work done in a transaction to be done over one connection.

To support xa semantics, the correct db handle must be located whenever a managed connection is associated with a xid.

Author:
David Jencks, Mark Rotteveel
See Also:
  • Constructor Details

    • FBManagedConnectionFactory

      public FBManagedConnectionFactory()
      Create a new pure-Java FBManagedConnectionFactory.

      This managed connection factory can be shared.

    • FBManagedConnectionFactory

      public FBManagedConnectionFactory(boolean shared)
      Create a new pure-Java FBManagedConnectionFactory.
      Parameters:
      shared - Indicates that this Managed Connection Factory can be shared or not. When true configuration changes are not allowed after the first connection or datasource has been created to ensure all shared users have the same expectation of configuration.
    • FBManagedConnectionFactory

      public FBManagedConnectionFactory(GDSType gdsType)
      Create a new FBManagedConnectionFactory based on the given GDSType.

      This managed connection factory can be shared.

      Parameters:
      gdsType - The GDS implementation to use
    • FBManagedConnectionFactory

      public FBManagedConnectionFactory(boolean shared, GDSType gdsType)
      Create a new FBManagedConnectionFactory based on the given GDSType.
      Parameters:
      shared - Indicates that this Managed Connection Factory can be shared or not. When true configuration changes are not allowed after the first connection or datasource has been created to ensure all shared users have the same expectation of configuration.
      gdsType - The GDS implementation to use
    • FBManagedConnectionFactory

      public FBManagedConnectionFactory(GDSType gdsType, FBConnectionProperties connectionProperties)
      Create a new FBManagedConnectionFactory based on the given GDSType and connection properties.

      This managed connection factory can be shared.

      Parameters:
      gdsType - The GDS implementation to use
      connectionProperties - Initial connection properties (will be copied), use of null is allowed
    • FBManagedConnectionFactory

      public FBManagedConnectionFactory(boolean shared, GDSType gdsType, FBConnectionProperties connectionProperties)
      Create a new FBManagedConnectionFactory based on the given GDSType and connection properties.
      Parameters:
      shared - Indicates that this Managed Connection Factory can be shared or not. When true configuration changes are not allowed after the first connection or datasource has been created to ensure all shared users have the same expectation of configuration.
      gdsType - The GDS implementation to use
      connectionProperties - Initial connection properties (will be copied), use of null is allowed
  • Method Details

    • getDatabaseFactory

      public FbDatabaseFactory getDatabaseFactory()
    • getGDSType

      public GDSType getGDSType()
      Get the GDS implementation type around which this factory is based.
      Returns:
      The GDS implementation type
    • getShared

      public boolean getShared()
      Returns:
      true if this instance can be safely shared (modification disallowed after creation of first connection/data source)
    • getTransactionParameters

      public TransactionParameterBuffer getTransactionParameters(int isolation)
      Description copied from interface: FirebirdConnectionProperties
      Get the transaction parameter buffer corresponding to the current connection request information.
      Specified by:
      getTransactionParameters in interface FirebirdConnectionProperties
      Parameters:
      isolation - transaction isolation level for which TPB should be returned.
      Returns:
      instance of TransactionParameterBuffer.
    • setNonStandardProperty

      public void setNonStandardProperty(String propertyMapping)
      Description copied from interface: FirebirdConnectionProperties
      Set the property that does not have corresponding setter method.
      Specified by:
      setNonStandardProperty in interface FirebirdConnectionProperties
      Parameters:
      propertyMapping - parameter value in the propertyName[=propertyValue] form, this allows setting non-standard parameters using configuration files.
    • setTransactionParameters

      public void setTransactionParameters(int isolation, TransactionParameterBuffer tpb)
      Description copied from interface: FirebirdConnectionProperties
      Set transaction parameters for the specified transaction isolation level. The specified TPB is used as a default mapping for the specified isolation level.
      Specified by:
      setTransactionParameters in interface FirebirdConnectionProperties
      Parameters:
      isolation - transaction isolation level.
      tpb - instance of TransactionParameterBuffer containing transaction parameters.
    • setDefaultConnectionManager

      public void setDefaultConnectionManager(XcaConnectionManager defaultCm)
    • getProperty

      public String getProperty(String name)
      Description copied from interface: BaseProperties
      Retrieves a string property value by name.

      For properties with an explicit default, this method should return the string presentation of that default, not null. For int or boolean the string equivalent is returned.

      Specified by:
      getProperty in interface BaseProperties
      Parameters:
      name - Property name (not null or empty)
      Returns:
      Value of the property, or null when not set or not a known property
    • setProperty

      public void setProperty(String name, String value)
      Description copied from interface: BaseProperties
      Sets a property by name.

      This method can be used to set all defined properties, but also properties not known by Jaybird. When setting int or boolean properties, the appropriate conversions are applied. Using null will reset to the default value. For boolean properties, an empty string is taken to mean true.

      Specified by:
      setProperty in interface BaseProperties
      Parameters:
      name - Property name (not null or empty)
      value - Property value (use null to apply default)
    • getIntProperty

      public Integer getIntProperty(String name)
      Description copied from interface: BaseProperties
      Retrieves an int property value by name.

      For properties with an explicit default, this method should return the integer presentation of that default. For implementation simplicity, it is allowed to convert any string property to int instead of checking if something is actually an int property

      Specified by:
      getIntProperty in interface BaseProperties
      Parameters:
      name - Property name (not null or empty)
      Returns:
      Integer with value of the property, or null when not set
    • setIntProperty

      public void setIntProperty(String name, Integer value)
      Description copied from interface: BaseProperties
      Sets an int property by name.

      For implementation simplicity, it is allowed to also set string properties. The value set will be the string equivalent.

      Specified by:
      setIntProperty in interface BaseProperties
      Parameters:
      name - Property name (not null or empty)
      value - Property value (use null to apply default)
    • getBooleanProperty

      public Boolean getBooleanProperty(String name)
      Description copied from interface: BaseProperties
      Retrieves a boolean property value by name.

      For properties with an explicit default, this method should return the boolean presentation of that default. For implementation simplicity, it is allowed to convert any string property to boolean instead of checking if something is actually a boolean property

      Specified by:
      getBooleanProperty in interface BaseProperties
      Parameters:
      name - Property name (not null or empty)
      Returns:
      Integer with value of the property, or null when not set
    • setBooleanProperty

      public void setBooleanProperty(String name, Boolean value)
      Description copied from interface: BaseProperties
      Sets a boolean property by name.

      For implementation simplicity, it is allowed to also set string properties. The value set will be the string equivalent.

      Specified by:
      setBooleanProperty in interface BaseProperties
      Parameters:
      name - Property name (not null or empty)
      value - Property value (use null to apply default)
    • connectionPropertyValues

      public Map<ConnectionProperty,Object> connectionPropertyValues()
      Description copied from interface: BaseProperties
      An unmodifiable view on the connection properties held by this BaseProperties implementation.

      Be aware, implementations can have additional properties that are not mapped from ConnectionProperty. Such properties will need to be retrieved in an implementation-specific manner.

      Specified by:
      connectionPropertyValues in interface BaseProperties
      Returns:
      An unmodifiable view on the property values held in this properties instance
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • equals

      public boolean equals(Object other)
      Overrides:
      equals in class Object
    • getDefaultConnectionRequestInfo

      public FBConnectionRequestInfo getDefaultConnectionRequestInfo() throws SQLException
      Throws:
      SQLException
    • getDefaultTpb

      public TransactionParameterBuffer getDefaultTpb() throws SQLException
      Throws:
      SQLException
    • getTpb

      public TransactionParameterBuffer getTpb(int isolation) throws SQLException
      Throws:
      SQLException
    • createConnectionFactory

      public DataSource createConnectionFactory(XcaConnectionManager connectionManager)
      Creates a javax.sql.DataSource instance. The data source instance gets initialized with the passed XcaConnectionManager.
      Parameters:
      connectionManager - Connection manager
      Returns:
      data source instance
    • createConnectionFactory

      public DataSource createConnectionFactory()
      Creates a javax.sql.DataSource instance. The data source instance gets initialized with a default XcaConnectionManager provided by the resource adapter.
      Returns:
      data source instance
    • createManagedConnection

      public FBManagedConnection createManagedConnection() throws SQLException
      Creates a new physical connection to the Firebird database using the default configuration.
      Returns:
      Managed connection instance
      Throws:
      SQLException - generic exception
      See Also:
    • createManagedConnection

      public FBManagedConnection createManagedConnection(FBConnectionRequestInfo connectionRequestInfo) throws SQLException
      Creates a new physical connection to the Firebird database.

      ManagedConnectionFactory uses the additional ConnectionRequestInfo to create this new connection.

      Parameters:
      connectionRequestInfo - Additional resource adapter specific connection request information, can be null for default
      Returns:
      Managed connection instance
      Throws:
      SQLException - generic exception
      See Also:
    • canonicalize

      public FBManagedConnectionFactory canonicalize()
      The canonicalize method is used in FBDriver to reuse previous fbmcf instances if they have been created. It should really be package access level
      Returns:
      a FBManagedConnectionFactory value
    • forget

      public void forget(FBManagedConnection mc, Xid xid)
    • recover

      public void recover(FBManagedConnection mc, Xid xid)
    • getCacheKey

      public FBConnectionProperties getCacheKey()