[ 
https://issues.apache.org/jira/browse/CAMEL-13951?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16924040#comment-16924040
 ] 

Claus Ibsen commented on CAMEL-13951:
-------------------------------------

You can always write your own custom repository that fits your use-case / 
database etc.

And yeah maybe JdbcAggRepo can be refactored to be more extensible, we have 
done this in the past for some of the others. But we can't hit 100% of every 
database setup that are out there in the world with the OOTB code, and 
therefore you can write your own.

And be careful to tie to this to Spring XML only as those InitializingBean etc 
are spring only. This should work for non spring users too etc. And therefore 
Camel has its Service API where you have callbacks for start/stop etc.

> 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)

Reply via email to