com.informix.smartTrigger

## Interface IfmxThreadedSmartTrigger

All Superinterfaces:
  java.lang.AutoCloseable, java.lang.Runnable

    public interface IfmxThreadedSmartTrigger
    extends java.lang.AutoCloseable, java.lang.Runnable

Represents a Threadable Smart Trigger object This object allows you to interact with an Informix server (12.10.xC9 or higher) in order to register and receive Smart Trigger push notifications when certain events happen on the server

Since:
  4.10.9

### Method Summary

All Methods Instance Methods Abstract Methods
`void` `addTrigger(java.lang.String tableName, java.lang.String tableOwnerName, java.lang.String databaseName, java.lang.String sqlQuery, IfmxSmartTriggerCallback... callback)` Sets a watch on a particular table using a query using the default label
`void` `addTrigger(java.lang.String tableName, java.lang.String tableOwnerName, java.lang.String databaseName, java.lang.String sqlQuery, java.lang.String label, IfmxSmartTriggerCallback... callback)` Sets a watch on a particular table using a query using the default label
`IfmxThreadedSmartTrigger` `buffer(int bufferSize)` Sets the buffer size for the data that will be held here in the client This should be set to a size that will collect the number of records you can get at a time as well as the 2 times the size of the JSON document that will be returned.
`IfmxThreadedSmartTrigger` `commitTime(long time)` Advanced option to restart your smart trigger from a commit time that was reported from a prior Smart Trigger session
`java.lang.String` `detach()` Detach from this smart trigger session You must have set `detachable(boolean)` to true to enable this trigger to be detachable (12.10.xC9W1 or higher)
`IfmxThreadedSmartTrigger` `detachable(boolean detachable)` Designate whether this session can be detached A detached session has a unique ID which can be referenced if this session closes to restore the session and recover any records that might not have transferred.
`java.lang.String` `getDetachableSessionID()` Returns the ID for this session if it is detachable If you use the `detachable(boolean)` option to make this detachable (12.10.xC9W1 or higher) calling this will return the session ID.
`java.util.List<java.lang.String>` `getLabels()` Returns a list of labels currently registered as triggers in this object
`boolean` `isClosed()` Returns whether the trigger is open or closed
`IfmxThreadedSmartTrigger` `label(java.lang.String labelName)` Set a default label for all triggers created by this object
`IfmxThreadedSmartTrigger` `maxRecordsPerRequest(int size)` Sets how many records can be returned in a single event call This sets the maximum number of records returned if more than one record is sitting in the queue.
`IfmxThreadedSmartTrigger` `operationsCacheSize(int size)` Sets the number of events/operations that the server will cache The number set here will be how many events the server will cache waiting on the client to retrieve them.
`void` `registerCallback(java.lang.String label, IfmxSmartTriggerCallback callback)` Registers a callback against an existing label If you have already created a trigger with a label using `addTrigger(String, String, String, String, IfmxSmartTriggerCallback...)` or if you are re-connecting to a detached session, you can register just the callback methods against the label you designated.
`void` `removeTrigger(java.lang.String label)` Removes one or more triggers based on the label provided If you have already started the smart trigger, removing triggers will be queued until a timeout or a trigger is executed.
`void` `removeTrigger(java.lang.String tableName, java.lang.String tableOwnerName, java.lang.String databaseName)` Stops a trigger on a particular table/owner/database If you have already started the smart trigger, removing triggers will be queued until a timeout or a trigger is executed.
`IfmxThreadedSmartTrigger` `sessionID(java.lang.String id)` Sets the Smart Trigger session ID for us to connect to.
`IfmxThreadedSmartTrigger` `timeout(int timeout)` Sets the timeout for waiting for events from the server If no event is triggered after this timeout, a timeout event is fired, allowing the class to check if the user has made any changes to it's watch list or requested the connection to the server to be closed.
`IfmxThreadedSmartTrigger` `transactionID(long id)` Advanced option to restart your smart trigger from a transaction id that was reported from a prior Smart Trigger session
`void` `watch()` Starts watching for smart triggers You must call this or `Runnable.run()` if you are executing this as a thread to actually start watching for smart triggers This method will block forever, until the thread is interrupted or another thread calls the `AutoCloseable.close()` method.

### Methods inherited from interface java.lang.AutoCloseable

`close`

### Methods inherited from interface java.lang.Runnable

`run`

### Method Detail

#### addTrigger

    void addTrigger(java.lang.String tableName,
                    java.lang.String tableOwnerName,
                    java.lang.String databaseName,
                    java.lang.String sqlQuery,
                    IfmxSmartTriggerCallback... callback)
             throws java.sql.SQLException

Sets a watch on a particular table using a query using the default label

Sets up a watch to a given table/owner/database using a simple SQL query. See the corresponding Informix documentation on which SQL Queries are valid.

You can pass in callback objects here or register callbacks later against a label using registerCallback(...) The user who is connected to the database from this class must have read permission on the table you are attempting to watch as well as sysadmin databse access. For details see the Informix server documentation. If you have already started the smart trigger, adding additional triggers will be queued until a timeout or a trigger is executed.

Parameters:
  `tableName` - name of the table to watch
  `tableOwnerName` - owner of the table
  `databaseName` - database the table resides in
  `sqlQuery` - the SQL query that will validate if a change should trigger a message
  `callback` - a list of zero or more callback objects that will be executed when a trigger is fired.
Throws:
  `java.sql.SQLException` - if there is a database access error

#### addTrigger

    void addTrigger(java.lang.String tableName,
                    java.lang.String tableOwnerName,
                    java.lang.String databaseName,
                    java.lang.String sqlQuery,
                    java.lang.String label,
                    IfmxSmartTriggerCallback... callback)
             throws java.sql.SQLException

Sets a watch on a particular table using a query using the default label

Sets up a watch to a given table/owner/database using a simple SQL query. See the corresponding Informix documentation on which SQL Queries are valid.

You can pass in callback objects here or register callbacks later against a label using registerCallback(...) The user who is connected to the database from this class must have read permission on the table you are attempting to watch as well as sysadmin databse access. For details see the Informix server documentation. If you have already started the smart trigger, adding additional triggers will be queued until a timeout or a trigger is executed.

Parameters:
  `tableName` - name of the table to watch
  `tableOwnerName` - owner of the table
  `databaseName` - database the table resides in
  `sqlQuery` - the SQL query that will validate if a change should trigger a message
  `label` - the label you want to use to identify/correlate one or more triggers
  `callback` - a list of zero or more callback objects that will be executed when a trigger is fired.
Throws:
  `java.sql.SQLException` - if there is a database access error

#### buffer

    IfmxThreadedSmartTrigger buffer(int bufferSize)

Sets the buffer size for the data that will be held here in the client This should be set to a size that will collect the number of records you can get at a time as well as the 2 times the size of the JSON document that will be returned. Plus an addition 1024 bytes for metadata For Example: Given you expect 10 rows back that the JSON representation will be at most 150 bytes Your buffer should be AT LEAST 150 * 2 * 10 + 1024 bytes. By default the buffer size is 64 * 1024 + 1024 which means you can get 64 rows of a 512 byte JSON documents at a time.

Parameters:
  `bufferSize` - Size in bytes for the buffer for this class
Returns:
  this object

#### commitTime

    IfmxThreadedSmartTrigger commitTime(long time)

Advanced option to restart your smart trigger from a commit time that was reported from a prior Smart Trigger session

Parameters:
  `time` - time value from a prior operations JSON document returned from a smart trigger object
Returns:
  this object

#### detachable

    IfmxThreadedSmartTrigger detachable(boolean detachable)

Designate whether this session can be detached A detached session has a unique ID which can be referenced if this session closes to restore the session and recover any records that might not have transferred. The server will hold (up to the limit set) a number of records that can be recovered when the session is re-attached.

Parameters:
  `detachable` - whether the session is detachable (default false)
Returns:
  this object

#### detach

    java.lang.String detach()
                     throws java.sql.SQLException

Detach from this smart trigger session You must have set `detachable(boolean)` to true to enable this trigger to be detachable (12.10.xC9W1 or higher)

Returns:
  sessionID The session ID for this trigger that you can reconnect with via `sessionID(String)`
Throws:
  `java.sql.SQLException` - if there is a database access error
Since:
  12.10.xC9W1

#### getDetachableSessionID

    java.lang.String getDetachableSessionID()

Returns the ID for this session if it is detachable If you use the `detachable(boolean)` option to make this detachable (12.10.xC9W1 or higher) calling this will return the session ID. You can save this ID and reconnect to the session if you close or get disconnected

Returns:
  sessionID or null if the session is non-detachable or if the session is not open
Since:
  12.10.xC9W1

#### getLabels

    java.util.List<java.lang.String> getLabels()

Returns a list of labels currently registered as triggers in this object

Returns:
  list list of labels

#### label

    IfmxThreadedSmartTrigger label(java.lang.String labelName)

Set a default label for all triggers created by this object

Parameters:
  `labelName` - A default label name
Returns:
  this object

#### maxRecordsPerRequest

    IfmxThreadedSmartTrigger maxRecordsPerRequest(int size)

Sets how many records can be returned in a single event call This sets the maximum number of records returned if more than one record is sitting in the queue. If you set to 0, then you get back all that are available.

Parameters:
  `size` - records in a single request
Returns:
  this object

#### operationsCacheSize

    IfmxThreadedSmartTrigger operationsCacheSize(int size)

Sets the number of events/operations that the server will cache The number set here will be how many events the server will cache waiting on the client to retrieve them. Any addition events over this cache size will be lost if the client does not retrieve them quickly enough

Parameters:
  `size` - size of server side operations cache
Returns:
  this object

#### registerCallback

    void registerCallback(java.lang.String label,
                          IfmxSmartTriggerCallback callback)

Registers a callback against an existing label If you have already created a trigger with a label using `addTrigger(String, String, String, String, IfmxSmartTriggerCallback...)` or if you are re-connecting to a detached session, you can register just the callback methods against the label you designated. This can also be used to attach multiple callback methods to a single trigger

Parameters:
  `label` - The existing label for an existing trigger
  `callback` - Callback method/interface which will get executed when a trigger with the matching label is received.

#### timeout

    IfmxThreadedSmartTrigger timeout(int timeout)

Sets the timeout for waiting for events from the server If no event is triggered after this timeout, a timeout event is fired, allowing the class to check if the user has made any changes to it's watch list or requested the connection to the server to be closed. The default timeout value is 60 seconds

Parameters:
  `timeout` - The timeout used for waiting for events
Returns:
  this object

#### transactionID

    IfmxThreadedSmartTrigger transactionID(long id)

Advanced option to restart your smart trigger from a transaction id that was reported from a prior Smart Trigger session

Parameters:
  `id` - transaction id
Returns:
  this object

#### removeTrigger

    void removeTrigger(java.lang.String tableName,
                       java.lang.String tableOwnerName,
                       java.lang.String databaseName)
                throws java.sql.SQLException

Stops a trigger on a particular table/owner/database If you have already started the smart trigger, removing triggers will be queued until a timeout or a trigger is executed.

Parameters:
  `tableName` - table to stop watching
  `tableOwnerName` - owner of the table
  `databaseName` - database where the table resides
Throws:
  `java.sql.SQLException` - if there is a database access error

#### removeTrigger

    void removeTrigger(java.lang.String label)
                throws java.sql.SQLException

Removes one or more triggers based on the label provided If you have already started the smart trigger, removing triggers will be queued until a timeout or a trigger is executed.

Parameters:
  `label` - label to remove
Throws:
  `java.sql.SQLException` - if there is a database access error

#### watch

    void watch()
        throws java.sql.SQLException

Starts watching for smart triggers You must call this or `Runnable.run()` if you are executing this as a thread to actually start watching for smart triggers This method will block forever, until the thread is interrupted or another thread calls the `AutoCloseable.close()` method. Note if you set your `timeout(int)` to zero, this will block until interrupted only. It will never close on it's own. It's recommended to always have some timeout so the loop here has a chance to take any actions, including adding/removing triggers or closing down. As smart triggers are caught from the server, this call will route them to the appropriate callback object you specified when you set up the smart trigger. Missed records or timeouts are automatically sent to all callback objects

Throws:
  `java.sql.SQLException` - if there is a database access error

#### sessionID

    IfmxThreadedSmartTrigger sessionID(java.lang.String id)

Sets the Smart Trigger session ID for us to connect to. This will re-establish the connection that was disconnected or lost when you call `watch()` or `Runnable.run()` Calling this method automatically sets `detachable(boolean)` to `true`

Parameters:
  `id` - Smart Trigger/Push Data session ID to connect to
Returns:
  IfmxThreadedSmartTrigger this object

#### isClosed

    boolean isClosed()

Returns whether the trigger is open or closed

Returns:
  boolean if the trigger is closed