A custom AsyncEventListener may fail to pass data that is loaded by bulk insert (i.e. batch insert by PreparedStatement) from a Java client application into the external database. This behavior does not occur with single (non-batch) inserts, nor with the default, built-in DBSynchronizer.
The Generic AsyncEventListner in SQLFire uses a slightly different invocation path, and only Primary Key based events are sent to the AsyncEventListner Queue. A bulk insert's event type is BULK_INSERT and a custom AsyncEventListener that implements AsyncEventListener will not receive the BULK_INSERT type event.
There are two basic workarounds for this behavior (which will be addressed in a future release).
Use simple (non-batch) SQL inserts in conjunction with a Prepared Statement instead of a bulk insert in your Java client application.
Example:
Statement.addBatch(); Statement.executeBatch(); --> tatement.executeUpdate(insertSQL);
Extend the built-in DBSynchronizer instead of implementing AsyncEventListener in the custom AsyncEventListener code.
Example:
public class customDBSynchronizer implements AsyncEventListener --> import com.vmware.sqlfire.callbacks.DBSynchronizer; public class customDBSynchronizer extends DBSynchronizer