You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Claus Ibsen (JIRA)" <ji...@apache.org> on 2018/03/29 11:38:00 UTC
[jira] [Resolved] (CAMEL-10098) AbstractJdbcMessageIdRepository
is not actually parameterizable
[ https://issues.apache.org/jira/browse/CAMEL-10098?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Claus Ibsen resolved CAMEL-10098.
---------------------------------
Resolution: Won't Fix
Assignee: Claus Ibsen
Added to class javadoc about that it must be a String type
* <b>Important:</b> Implementations of this should use <tt>String</tt> as the generic type as that is
* what is required by Camel to allow using the idempotent repository with the Idempotent Consumer EIP
* and also as file consumer read-lock. It was a mistake to make \{@link IdempotentRepository} parameterized,
* as it should have been a pre-configured to use a <tt>String</tt> type.
> AbstractJdbcMessageIdRepository<T> is not actually parameterizable
> ------------------------------------------------------------------
>
> Key: CAMEL-10098
> URL: https://issues.apache.org/jira/browse/CAMEL-10098
> Project: Camel
> Issue Type: Improvement
> Components: camel-core, camel-sql
> Affects Versions: 2.15.1
> Environment: Camel 2.15.1.redhat-620133
> JBoss Fuse 6.2.0.redhat-133
> openjdk version "1.8.0_45"
> OpenJDK Runtime Environment (build 1.8.0_45-b13)
> OpenJDK 64-Bit Server VM (build 25.45-b02, mixed mode)
> Linux 3.10.0-229.1.2.el7.x86_64 #1 SMP Fri Mar 6 17:12:08 EST 2015 x86_64 GNU/Linux (RHEL 7)
> Reporter: Matthew Zipay
> Assignee: Claus Ibsen
> Priority: Minor
> Fix For: Future
>
>
> The org.apache.camel.processor.idempotent.jdbc.AbstractJdbcMessageIdRepository class is advertised as being extendable in the documentation, and is declared as parameterized in the source code, so that developers "can extend to build custom JDBC idempotent repository."
> However, attempting to parameterize with anything other than String fails. The cause appears to be org.apache.camel.processor.idempotent.IdempotentConsumer, whose process() method assumes that the key is always a String before handing it off to the repository instance (which may in fact be a AbstractJdbcMessageIdRepository<T> where T is *not* String). The results is an unavoidable ClassCastException.
> Here is the relevant bit from a stack trace using {{public class IdempRepository extends AbstractJdbcMessageIdRepository<IdempKey>}}:
> {code}
> Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to my.custom.IdempKey
> at my.custom.IdempRepository.queryForInt(IdempRepository.java:18)[515:my-bundle:1.0.0.SNAPSHOT]
> at org.apache.camel.processor.idempotent.jdbc.AbstractJdbcMessageIdRepository$1.doInTransaction(AbstractJdbcMessageIdRepository.java:122)[273:org.apache.camel.camel-sql:2.15.1.redhat-620133]
> at org.apache.camel.processor.idempotent.jdbc.AbstractJdbcMessageIdRepository$1.doInTransaction(AbstractJdbcMessageIdRepository.java:120)[273:org.apache.camel.camel-sql:2.15.1.redhat-620133]
> at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:131)[202:org.apache.servicemix.bundles.spring-tx:3.2.12.RELEASE_1]
> at org.apache.camel.processor.idempotent.jdbc.AbstractJdbcMessageIdRepository.add(AbstractJdbcMessageIdRepository.java:120)[273:org.apache.camel.camel-sql:2.15.1.redhat-620133]
> at org.apache.camel.processor.idempotent.IdempotentConsumer.process(IdempotentConsumer.java:94)[198:org.apache.camel.camel-core:2.15.1.redhat-620133]
> {code}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)