Class FBManagedConnectionFactory

  • All Implemented Interfaces:
    java.io.Serializable, javax.resource.spi.ManagedConnectionFactory, FirebirdConnectionProperties

    public class FBManagedConnectionFactory
    extends java.lang.Object
    implements javax.resource.spi.ManagedConnectionFactory, FirebirdConnectionProperties, java.io.Serializable
    FBManagedConnectionFactory implements the jca ManagedConnectionFactory interface and also many of the internal functions of ManagedConnection. This nonstandard 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 ManagedConnection is associated with an xid. WARNING: this adapter will probably not work properly in an environment where ManagedConnectionFactory is serialized and deserialized, and the deserialized copy is expected to function as anything other than a key.
    Author:
    David Jencks , Mark Rotteveel
    See Also:
    Serialized Form
    • Constructor Detail

      • FBManagedConnectionFactory

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

        public FBManagedConnectionFactory​(GDSType gdsType)
        Create a new FBManagedConnectionFactory based around the given GDSType.
        Parameters:
        gdsType - The GDS implementation to use
    • Method Detail

      • getGDSType

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

        @Deprecated
        public int getBlobBufferLength()
        Deprecated.
      • setBlobBufferLength

        @Deprecated
        public void setBlobBufferLength​(int value)
        Deprecated.
      • getTransactionIsolationName

        @Deprecated
        public java.lang.String getTransactionIsolationName()
        Deprecated.
      • setTransactionIsolationName

        @Deprecated
        public void setTransactionIsolationName​(java.lang.String name)
      • getLocalEncoding

        @Deprecated
        public java.lang.String getLocalEncoding()
        Deprecated.
        use getCharSet() instead.
      • setLocalEncoding

        @Deprecated
        public void setLocalEncoding​(java.lang.String localEncoding)
        Deprecated.
        use setCharSet(String) instead.
      • getBuffersNumber

        public int getBuffersNumber()
        Specified by:
        getBuffersNumber in interface FirebirdConnectionProperties
        Returns:
        number of cache buffers that should be allocated for this connection, should be specified for ClassicServer instances, SuperServer has a server-wide configuration parameter.
      • getDatabase

        public java.lang.String getDatabase()
        Specified by:
        getDatabase in interface FirebirdConnectionProperties
        Returns:
        path to the database including the server name and the port, if needed.
      • getNonStandardProperty

        public java.lang.String getNonStandardProperty​(java.lang.String key)
        Description copied from interface: FirebirdConnectionProperties
        Get the property that does not have corresponding getter method by its name.
        Specified by:
        getNonStandardProperty in interface FirebirdConnectionProperties
        Parameters:
        key - name of the property to get.
        Returns:
        value of the property.
      • getType

        public java.lang.String getType()
        Specified by:
        getType in interface FirebirdConnectionProperties
        Returns:
        type of the connection, for example, "PURE_JAVA", "LOCAL", "EMBEDDED", depends on the GDS implementations installed in the system.
      • getUserName

        public java.lang.String getUserName()
        Specified by:
        getUserName in interface FirebirdConnectionProperties
        Returns:
        name of the user that will be used when connecting to the database.
      • isTimestampUsesLocalTimezone

        public boolean isTimestampUsesLocalTimezone()
        Specified by:
        isTimestampUsesLocalTimezone in interface FirebirdConnectionProperties
        Returns:
        true if the Jaybird 1.0 handling of the calendar in corresponding setters. This is also compatible with MySQL calendar treatment.
      • setBuffersNumber

        public void setBuffersNumber​(int buffersNumber)
        Specified by:
        setBuffersNumber in interface FirebirdConnectionProperties
        Parameters:
        buffersNumber - number of cache buffers that should be allocated for this connection, should be specified for ClassicServer instances, SuperServer has a server-wide configuration parameter.
      • setCharSet

        public void setCharSet​(java.lang.String charSet)
        Specified by:
        setCharSet in interface FirebirdConnectionProperties
        Parameters:
        charSet - Character set for the connection. Similar to encoding property, but accepts Java names instead of Firebird ones.
      • setDatabase

        public void setDatabase​(java.lang.String database)
        Specified by:
        setDatabase in interface FirebirdConnectionProperties
        Parameters:
        database - path to the database including the server name and the port, if needed.
      • setDefaultIsolation

        public void setDefaultIsolation​(java.lang.String isolation)
        Description copied from interface: FirebirdConnectionProperties
        Set the default transaction isolation level as string. This method is complementary to the FirebirdConnectionProperties.setDefaultTransactionIsolation(int), however it takes a string as parameter instead of a numeric constant.

        Following strings are allowed:

        • "TRANSACTION_READ_COMMITTED" for a READ COMMITTED isolation level.
        • "TRANSACTION_REPEATABLE_READ" for a REPEATABLE READ isolation level.
        • "TRANSACTION_SERIALIZABLE" for a SERIALIZABLE isolation level.
        Specified by:
        setDefaultIsolation in interface FirebirdConnectionProperties
        Parameters:
        isolation - string constant representing a default isolation level.
      • setEncoding

        public void setEncoding​(java.lang.String encoding)
        Specified by:
        setEncoding in interface FirebirdConnectionProperties
        Parameters:
        encoding - Character encoding for the connection. See Firebird documentation for more information.
      • setNonStandardProperty

        public void setNonStandardProperty​(java.lang.String key,
                                           java.lang.String value)
        Description copied from interface: FirebirdConnectionProperties
        Set the property that does not have corresponding setter method.
        Specified by:
        setNonStandardProperty in interface FirebirdConnectionProperties
        Parameters:
        key - name of the property to set.
        value - value of the property.
      • setNonStandardProperty

        public void setNonStandardProperty​(java.lang.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.
      • setPassword

        public void setPassword​(java.lang.String password)
        Specified by:
        setPassword in interface FirebirdConnectionProperties
        Parameters:
        password - password corresponding to the specified user name.
      • setTimestampUsesLocalTimezone

        public void setTimestampUsesLocalTimezone​(boolean timestampUsesLocalTimezone)
        Specified by:
        setTimestampUsesLocalTimezone in interface FirebirdConnectionProperties
        Parameters:
        timestampUsesLocalTimezone - true if the Jaybird 1.0 handling of the calendar in corresponding setters. This is also compatible with MySQL calendar treatment.
      • setTpbMapping

        public void setTpbMapping​(java.lang.String tpbMapping)
        Description copied from interface: FirebirdConnectionProperties
        Set path to the properties file with the TPB mapping. The path begins with the protocol specification followed by the path to the resource. A special protocol "res:" should be used to specify resource in the classpath.

        For the compatibility reasons, if no protocol is specified, classpath is used by default.

        Properties file contains a mapping between the transaction isolation level (name of the constant in the Connection interface and a comma-separated list of TPB parameters.

        Specified by:
        setTpbMapping in interface FirebirdConnectionProperties
        Parameters:
        tpbMapping - path to the properties file.
      • setType

        public void setType​(java.lang.String type)
        Specified by:
        setType in interface FirebirdConnectionProperties
        Parameters:
        type - type of the connection, for example, "PURE_JAVA", "LOCAL", "EMBEDDED", depends on the GDS implementations installed in the system.
      • setUserName

        public void setUserName​(java.lang.String userName)
        Specified by:
        setUserName in interface FirebirdConnectionProperties
        Parameters:
        userName - name of the user that will be used when connecting to the database.
      • setUseStandardUdf

        public void setUseStandardUdf​(boolean useStandardUdf)
        Specified by:
        setUseStandardUdf in interface FirebirdConnectionProperties
        Parameters:
        useStandardUdf - true if driver should assume that standard UDF are installed.
      • setUseStreamBlobs

        public void setUseStreamBlobs​(boolean useStreamBlobs)
        Specified by:
        setUseStreamBlobs in interface FirebirdConnectionProperties
        Parameters:
        useStreamBlobs - true if stream blobs should be created, otherwise false.
      • setDefaultConnectionManager

        public void setDefaultConnectionManager​(javax.resource.spi.ConnectionManager defaultCm)
      • setWireCrypt

        public void setWireCrypt​(java.lang.String wireCrypt)
        Description copied from interface: FirebirdConnectionProperties
        Sets the wire encryption level.

        Values are defined by WireCrypt, values are handled case insensitive. Invalid values are accepted, but will cause an error when a connection is established.

        Specified by:
        setWireCrypt in interface FirebirdConnectionProperties
        Parameters:
        wireCrypt - Wire encryption level
      • setDbCryptConfig

        public void setDbCryptConfig​(java.lang.String dbCryptConfig)
        Description copied from interface: FirebirdConnectionProperties
        Sets the database encryption plugin configuration.
        Specified by:
        setDbCryptConfig in interface FirebirdConnectionProperties
        Parameters:
        dbCryptConfig - Database encryption plugin configuration, meaning plugin specific
      • setAuthPlugins

        public void setAuthPlugins​(java.lang.String authPlugins)
        Description copied from interface: FirebirdConnectionProperties
        Sets the authentication plugins to try.

        Invalid names are skipped during authentication.

        Specified by:
        setAuthPlugins in interface FirebirdConnectionProperties
        Parameters:
        authPlugins - comma-separated list of authentication plugins, or null for driver default
      • setGeneratedKeysEnabled

        public void setGeneratedKeysEnabled​(java.lang.String generatedKeysEnabled)
        Description copied from interface: FirebirdConnectionProperties
        Sets the generatedKeysEnabled configuration.
        Specified by:
        setGeneratedKeysEnabled in interface FirebirdConnectionProperties
        Parameters:
        generatedKeysEnabled - Generated keys support configuration: default (or null/empty), disabled, ignored, or a list of statement types to enable (possible values: insert, update, delete, update_or_insert, merge)
      • setDataTypeBind

        public void setDataTypeBind​(java.lang.String dataTypeBind)
        Description copied from interface: FirebirdConnectionProperties
        Sets the dataTypeBind configuration.

        If the value is explicitly set to a non-null value and the connected server is Firebird 4 or higher, this will configure the data type binding with the specified values using isc_dpb_set_bind, which is equivalent to executing SET BIND statements with the values.

        See also Firebird documentation for SET BIND.

        Specified by:
        setDataTypeBind in interface FirebirdConnectionProperties
        Parameters:
        dataTypeBind - Firebird 4+ data type bind configuration, a semicolon-separated list of <from-type> TO <to-type>
      • setSessionTimeZone

        public void setSessionTimeZone​(java.lang.String sessionTimeZone)
        Description copied from interface: FirebirdConnectionProperties
        Sets the sessionTimeZone.
        Specified by:
        setSessionTimeZone in interface FirebirdConnectionProperties
        Parameters:
        sessionTimeZone - Firebird 4+ session time zone name (we strongly suggest to use Java compatible names only), use "server" to use server default time zone (note: conversion will use JVM default time zone)
      • setIgnoreProcedureType

        public void setIgnoreProcedureType​(boolean ignoreProcedureType)
        Description copied from interface: FirebirdConnectionProperties
        Sets the value ignoreProcedureType.

        When set to true, the CallableStatement implementation in Jaybird will ignore metadata information about the stored procedure type and default to using EXECUTE PROCEDURE, unless the type is explicitly set using FirebirdCallableStatement.setSelectableProcedure(boolean). This can be useful in situations where a stored procedure is selectable, but tooling or code expects an executable stored procedure.

        Specified by:
        setIgnoreProcedureType in interface FirebirdConnectionProperties
        Parameters:
        ignoreProcedureType - true Ignore procedure type
      • isWireCompression

        public boolean isWireCompression()
        Description copied from interface: FirebirdConnectionProperties
        Get if wire compression should be enabled.

        Wire compression requires Firebird 3 or higher, and the server must have the zlib library. If compression cannot be negotiated, the connection will be made without wire compression.

        This property will be ignored for native connections. For native connections, the configuration in firebird.conf read by the client library will be used.

        Specified by:
        isWireCompression in interface FirebirdConnectionProperties
        Returns:
        true wire compression enabled
      • hashCode

        public int hashCode()
        Specified by:
        hashCode in interface javax.resource.spi.ManagedConnectionFactory
        Overrides:
        hashCode in class java.lang.Object
      • equals

        public boolean equals​(java.lang.Object other)
        Specified by:
        equals in interface javax.resource.spi.ManagedConnectionFactory
        Overrides:
        equals in class java.lang.Object
      • getDefaultConnectionRequestInfo

        public FBConnectionRequestInfo getDefaultConnectionRequestInfo()
                                                                throws javax.resource.ResourceException
        Throws:
        javax.resource.ResourceException
      • getDefaultTpb

        public FBTpb getDefaultTpb()
                            throws javax.resource.ResourceException
        Throws:
        javax.resource.ResourceException
      • createConnectionFactory

        public java.lang.Object createConnectionFactory​(javax.resource.spi.ConnectionManager cxManager)
                                                 throws javax.resource.ResourceException
        The createConnectionFactory method creates a DataSource using the supplied ConnectionManager.
        Specified by:
        createConnectionFactory in interface javax.resource.spi.ManagedConnectionFactory
        Parameters:
        cxManager - a ConnectionManager value
        Returns:
        a java.lang.Object value
        Throws:
        javax.resource.ResourceException - if an error occurs
      • createConnectionFactory

        public java.lang.Object createConnectionFactory()
                                                 throws javax.resource.ResourceException
        The createConnectionFactory method creates a DataSource with a default stand alone ConnectionManager. Ours can implement pooling.
        Specified by:
        createConnectionFactory in interface javax.resource.spi.ManagedConnectionFactory
        Returns:
        a new javax.sql.DataSource based around this connection factory
        Throws:
        javax.resource.ResourceException - if an error occurs
      • createManagedConnection

        public javax.resource.spi.ManagedConnection createManagedConnection​(javax.security.auth.Subject subject,
                                                                            javax.resource.spi.ConnectionRequestInfo cri)
                                                                     throws javax.resource.ResourceException
        Creates a new physical connection to the underlying EIS resource manager, 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.
        Specified by:
        createManagedConnection in interface javax.resource.spi.ManagedConnectionFactory
        Parameters:
        subject - Caller's security information
        cri - Additional resource adapter specific connection request information
        Returns:
        ManagedConnection instance
        Throws:
        javax.resource.ResourceException - generic exception
        javax.resource.spi.SecurityException - security related error
        javax.resource.spi.ResourceAllocationException - failed to allocate system resources for connection request
        javax.resource.spi.ResourceAdapterInternalException - resource adapter related error condition
        javax.resource.spi.EISSystemException - internal error condition in EIS instance
      • matchManagedConnections

        public javax.resource.spi.ManagedConnection matchManagedConnections​(java.util.Set connectionSet,
                                                                            javax.security.auth.Subject subject,
                                                                            javax.resource.spi.ConnectionRequestInfo cxRequestInfo)
                                                                     throws javax.resource.ResourceException
        Returns a matched 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. Note that criteria used for matching is specific to a resource adapter and is not prescribed by the Connector specification.

        This method returns a ManagedConnection instance that is the best match for handling the connection allocation request.

        Specified by:
        matchManagedConnections in interface javax.resource.spi.ManagedConnectionFactory
        Parameters:
        connectionSet - candidate connection set
        subject - caller's security information
        cxRequestInfo - additional resource adapter specific connection request information
        Returns:
        ManagedConnection if resource adapter finds an acceptable match otherwise null
        Throws:
        javax.resource.ResourceException - - generic exception
        javax.resource.spi.SecurityException - - security related error
        javax.resource.spi.ResourceAdapterInternalException - - resource adapter related error condition
        javax.resource.NotSupportedException - - if operation is not supported
      • setLogWriter

        public void setLogWriter​(java.io.PrintWriter out)
                          throws javax.resource.ResourceException
        Set 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. ApplicationServer manages the association of output stream with the ManagedConnectionFactory. When a ManagedConnectionFactory object is created the log writer is initially null, in other words, logging is disabled. Once a log writer is associated with a ManagedConnectionFactory, logging and tracing for ManagedConnectionFactory instance is enabled.

        The ManagedConnection instances created by ManagedConnectionFactory "inherits" the log writer, which can be overridden by ApplicationServer using ManagedConnection.setLogWriter(java.io.PrintWriter)to set ManagedConnection specific logging and tracing.

        Specified by:
        setLogWriter in interface javax.resource.spi.ManagedConnectionFactory
        Parameters:
        out - an out stream for error logging and tracing
        Throws:
        javax.resource.ResourceException - generic exception
        javax.resource.spi.ResourceAdapterInternalException - resource adapter related error condition
      • getLogWriter

        public java.io.PrintWriter getLogWriter()
        Get 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. ApplicationServer manages the association of output stream with the ManagedConnectionFactory. When a ManagedConnectionFactory object is created the log writer is initially null, in other words, logging is disabled.
        Specified by:
        getLogWriter in interface javax.resource.spi.ManagedConnectionFactory
        Returns:
        PrintWriter instance
        Throws:
        javax.resource.ResourceException - generic exception
      • canonicalize

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