A fix is available
APAR status
Closed as program error.
Error description
When using skip-record processing with the LocalJDBCWriter and JDBCWriter batch data stream framework (BDS) writers, the skip listener will only be called once and the count only incremented once, for an entire SQL batch execution.
Local fix
Problem summary
**************************************************************** * USERS AFFECTED: Users of the batch function of IBM * * WebSphere Application Server V8.5. * **************************************************************** * PROBLEM DESCRIPTION: Skip-record exception processing with * * BDS JDBCWriter(s) only calls listener * * once and increments skip count once * * per SQL batch. * **************************************************************** * RECOMMENDATION: * **************************************************************** Note throughout that the term "batch" here generally refers to standard JDBC batch updates, not to the "batch"-style processing with programming model provided by batch function within WebSphere Application Server. The fundamental issue here is a suboptimal fit between the skip-record processing and the batch SQL execution performed by the LocalJDBCWriter/JDBCWriter BDS writers. The skip-record processing is generally designed to count the number of skipped records against a user-configured limit and to call a user-supplied skip listener passing the skipped (possibly bad) record. The SQL batch execution used by these writers batches a sequence of SQL statements and runs them all at once against the database. The problem is a mismatch in granularity then between the per-record exception the skip-record processing expects and the per-batch exception (in the form of a BatchUpdateException) that the batch execution will throw. In other words, if a BatchUpdateException is thrown we were treating it as a single failure without trying to figure out exactly which statements within the batch had succeeded or failed (and failed with which particular exceptions). The main challenge here is that there is not a standard (JDBC-specified) mechanism for picking apart a BatchUpdateException returned by a particular JDBC driver in a particular configuration.
Problem conclusion
The behavior with this fix depends on whether the user is using a JDBC driver configuration that performs an atomic or a non-atomic batch execution style. Generally for the "atomic" style, the batch execution will abort on the first failure, whereas for "non-atomic" style, the rest of the batch will be executed. First, for a driver using atomic style, the runtime will abort the step execution loop, i.e. throw an exception rolling back the current transaction. For a driver using non-atomic style, the runtime will use a heuristic to try to pick apart the BatchUpdateException looking at the chained SQLException(s) . It will try to figure out which statements within the batch execution resulted in errors, and map that back to the corresponding record, calling the skip listener with the corresponding record and corresponding chained SQLException. It will also increment the skip count once for each record resulting in exception within the batch, not just once for the entire batch. If this mapping cannot be made (for non-atomic style), and a skip listener has been configured, the runtime will call the skip listener once for each problem record, but passing the top-level BatchUpdateException. But if the mapping cannot be made and a skip listener hasn't been configured, the runtime will abort the step execution loop by throwing an exception. The fix for this APAR is currently targeted for inclusion in fix packs 8.5.0.2. Please refer to the Recommended Updates page for delivery information: http://www.ibm.com/support/docview.wss?rs=180&uid=swg27004980
Temporary fix
This fix is available via an interim fix which is available upon request.
Comments
APAR Information
APAR number
PM71882
Reported component name
WEBS APP SERV N
Reported component ID
5724H8800
Reported release
850
Status
CLOSED PER
PE
NoPE
HIPER
NoHIPER
Special Attention
NoSpecatt
Submitted date
2012-08-30
Closed date
2012-11-01
Last modified date
2012-11-01
APAR is sysrouted FROM one or more of the following:
APAR is sysrouted TO one or more of the following:
Fix information
Fixed component name
WEBS APP SERV N
Fixed component ID
5724H8800
Applicable component levels
R850 PSY
UP
[{"Business Unit":{"code":"BU059","label":"IBM Software w\/o TPS"},"Product":{"code":"SSEQTP","label":"WebSphere Application Server"},"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"8.5","Line of Business":{"code":"LOB45","label":"Automation"}}]
Document Information
Modified date:
01 November 2021