[
https://issues.apache.org/jira/browse/CAMEL-13951?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16924034#comment-16924034
]
Grzegorz Grzybek commented on CAMEL-13951:
------------------------------------------
The inflexibility of {{JdbcAggregationRepository}} is that it configures
{{org.apache.camel.processor.aggregate.jdbc.JdbcAggregationRepository#transactionTemplate}}
inside
{{org.apache.camel.processor.aggregate.jdbc.JdbcAggregationRepository#setTransactionManager()}}
without a way to specify the propagation behavior.
Please suggest the best way to _open_ {{JdbcAggregationRepository}}:
* add setter for the propagation behavior of template used for {{add()}}, to
allow pass {{PROPAGATION_NESTED}}
* add setter for entire {{TransactionTemplate}} used by
{{JdbcAggregationRepository#add()}}
* maybe use 3rd {{TransactionTemplate}} used only by {{add()}} to be used in
PostgreSQL case
Probably all of the above would require adding {{implements InitializingBean}}
and overriding {{afterPropertiesSet()}}.
> JdbcAggregationRepository doesn't work with PostgreSQL
> ------------------------------------------------------
>
> Key: CAMEL-13951
> URL: https://issues.apache.org/jira/browse/CAMEL-13951
> Project: Camel
> Issue Type: Improvement
> Components: camel-sql
> Affects Versions: 2.24.1, 3.0.0.RC1
> Reporter: Grzegorz Grzybek
> Assignee: Grzegorz Grzybek
> Priority: Major
>
> See:
> *
> https://www.postgresql.org/message-id/200609241203.59292.ralf.wiebicke%40exedio.com
> *
> https://groups.google.com/forum/#!msg/comp.databases.postgresql/NuXGXdFbA4g/LQ97ahowmxkJ
> *
> https://www.progress.com/blogs/solution-to-current-transaction-is-aborted-error-for-postgresql-compatibility-with-odbc-jdbc
> The problem is that JdbcAggregationRepository relies heavily on spring-jdbc's
> throwing org.springframework.dao.DataIntegrityViolationException according to
> its sql exception mapping.
> By default, DataIntegrityViolationException is thrown if SQLState starts with
> {{23}}. Check https://www.postgresql.org/docs/10/errcodes-appendix.html and
> see that:
> bq. 23505: unique_violation
> The _problem_ specific to PostgreSQL is that hitting such exception makes the
> connection (and surrounding Spring transaction) unusable. There's no way to
> _repeat_ an attempt to insert (or even check current) state of aggregation,
> because PostgreSQL will immediately throw:
> {noformat}
> Caused by: org.postgresql.util.PSQLException: ERROR: current transaction is
> aborted, commands ignored until end of transaction block
> at
> org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2468)
> at
> org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2211)
> at
> org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:309)
> at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:446)
> ...
> {noformat}
> With SQLState - {{25P02}} == "in_failed_sql_transaction".
> The expected (by PostgreSQL) behavior is to rollback current transaction and
> start over.
> We're however in (potentially nested) TransactionTemplate and _rollback only_
> status is beyond (easy) control.
--
This message was sent by Atlassian Jira
(v8.3.2#803003)