Uploaded image for project: 'Red Hat Fuse'
  1. Red Hat Fuse
  2. ENTESB-10640

JdbcAggregationRepository does not work with postgresql's OID data type for exchange column

    • Icon: Feature Feature
    • Resolution: Done
    • Icon: Major Major
    • fuse-7.4-GA
    • fuse-7.2, fuse-7.3
    • Camel
    • 0
    • 0% 0%
    • Todo
    • Fuse 7.4 Sprint 47 - Bug Fix

      Postgresql supports OID data type(not bytea) to treat a large object. Also org.springframework.jdbc.support.lob.LobHandler supports it with "wrapAsLob" property.(1)
      If user use it with org.apache.camel.processor.aggregate.jdbc.JdbcAggregationRepository, reading resultset always fail(2) due to incorrect way to treat a BinaryStream object.

      (1)
      https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/jdbc/support/lob/LobHandler.html

      (2)

      2019-05-09 13:45:36,725 | ERROR | ead #2 - timer://run | o.a.c.p.DefaultErrorHandler      | 62 - org.apache.camel.camel-core - 2.21.0.fuse-730078-redhat-00001 | Failed delivery for (MessageId: ID-unused-220-201-nrt-redhat-com-1557376031933-3-5 on ExchangeId: ID-unused-220-201-nrt-redhat-com-1557376031933-3-4). Exhausted after delivery attempt: 1 caught: java.lang.RuntimeException: Error getting key true from repository aggregation
      
      Message History
      ---------------------------------------------------------------------------------------------------------------------------------------
      RouteId              ProcessorId          Processor                                                                        Elapsed (ms)
      [_route1           ] [_route1           ] [timer://run?repeatCount=2                                                     ] [         9]
      [_route1           ] [_transacted1      ] [transacted                                                                    ] [         0]
      [_route1           ] [_setBody1         ] [setBody[simple{5/9/19 1:45 PM}]                              ] [         1]
      [_route1           ] [_log1             ] [log                                                                           ] [         1]
      [_route1           ] [_aggregate1       ] [aggregate[true]                                                               ] [         0]
      
      Stacktrace
      ---------------------------------------------------------------------------------------------------------------------------------------
      java.lang.RuntimeException: Error getting key true from repository aggregation
      	at org.apache.camel.processor.aggregate.jdbc.JdbcAggregationRepository$3.doInTransaction(JdbcAggregationRepository.java:295) ~[233:org.apache.camel.camel-sql:2.21.0.fuse-730078-redhat-00001]
      	at org.apache.camel.processor.aggregate.jdbc.JdbcAggregationRepository$3.doInTransaction(JdbcAggregationRepository.java:284) ~[233:org.apache.camel.camel-sql:2.21.0.fuse-730078-redhat-00001]
      	at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:133) ~[172:org.apache.servicemix.bundles.spring-tx:4.3.20.RELEASE_1]
      	at org.apache.camel.processor.aggregate.jdbc.JdbcAggregationRepository.get(JdbcAggregationRepository.java:284) ~[233:org.apache.camel.camel-sql:2.21.0.fuse-730078-redhat-00001]
      	at org.apache.camel.processor.aggregate.jdbc.JdbcAggregationRepository.get(JdbcAggregationRepository.java:276) ~[233:org.apache.camel.camel-sql:2.21.0.fuse-730078-redhat-00001]
      	at org.apache.camel.processor.aggregate.AggregateProcessor.doAggregation(AggregateProcessor.java:390) ~[62:org.apache.camel.camel-core:2.21.0.fuse-730078-redhat-00001]
      	at org.apache.camel.processor.aggregate.AggregateProcessor.doProcess(AggregateProcessor.java:350) ~[62:org.apache.camel.camel-core:2.21.0.fuse-730078-redhat-00001]
      	at org.apache.camel.processor.aggregate.AggregateProcessor.process(AggregateProcessor.java:271) ~[62:org.apache.camel.camel-core:2.21.0.fuse-730078-redhat-00001]
      	at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:548) [62:org.apache.camel.camel-core:2.21.0.fuse-730078-redhat-00001]
      	at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:406) [62:org.apache.camel.camel-core:2.21.0.fuse-730078-redhat-00001]
      	at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:176) [62:org.apache.camel.camel-core:2.21.0.fuse-730078-redhat-00001]
      	at org.apache.camel.processor.Pipeline.process(Pipeline.java:138) [62:org.apache.camel.camel-core:2.21.0.fuse-730078-redhat-00001]
      	at org.apache.camel.processor.Pipeline.process(Pipeline.java:101) [62:org.apache.camel.camel-core:2.21.0.fuse-730078-redhat-00001]
      	at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:548) [62:org.apache.camel.camel-core:2.21.0.fuse-730078-redhat-00001]
      	at org.apache.camel.spring.spi.TransactionErrorHandler.processByErrorHandler(TransactionErrorHandler.java:220) [72:org.apache.camel.camel-spring:2.21.0.fuse-730078-redhat-00001]
      	at org.apache.camel.spring.spi.TransactionErrorHandler.process(TransactionErrorHandler.java:101) [72:org.apache.camel.camel-spring:2.21.0.fuse-730078-redhat-00001]
      	at org.apache.camel.spring.spi.TransactionErrorHandler.process(TransactionErrorHandler.java:114) [72:org.apache.camel.camel-spring:2.21.0.fuse-730078-redhat-00001]
      	at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:548) [62:org.apache.camel.camel-core:2.21.0.fuse-730078-redhat-00001]
      	at org.apache.camel.spring.spi.TransactionErrorHandler.processByErrorHandler(TransactionErrorHandler.java:220) [72:org.apache.camel.camel-spring:2.21.0.fuse-730078-redhat-00001]
      	at org.apache.camel.spring.spi.TransactionErrorHandler$1.doInTransactionWithoutResult(TransactionErrorHandler.java:183) [72:org.apache.camel.camel-spring:2.21.0.fuse-730078-redhat-00001]
      	at org.springframework.transaction.support.TransactionCallbackWithoutResult.doInTransaction(TransactionCallbackWithoutResult.java:34) [172:org.apache.servicemix.bundles.spring-tx:4.3.20.RELEASE_1]
      	at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:133) [172:org.apache.servicemix.bundles.spring-tx:4.3.20.RELEASE_1]
      	at org.apache.camel.spring.spi.TransactionErrorHandler.doInTransactionTemplate(TransactionErrorHandler.java:176) [72:org.apache.camel.camel-spring:2.21.0.fuse-730078-redhat-00001]
      	at org.apache.camel.spring.spi.TransactionErrorHandler.processInTransaction(TransactionErrorHandler.java:136) [72:org.apache.camel.camel-spring:2.21.0.fuse-730078-redhat-00001]
      	at org.apache.camel.spring.spi.TransactionErrorHandler.process(TransactionErrorHandler.java:105) [72:org.apache.camel.camel-spring:2.21.0.fuse-730078-redhat-00001]
      	at org.apache.camel.spring.spi.TransactionErrorHandler.process(TransactionErrorHandler.java:114) [72:org.apache.camel.camel-spring:2.21.0.fuse-730078-redhat-00001]
      	at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201) [62:org.apache.camel.camel-core:2.21.0.fuse-730078-redhat-00001]
      	at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201) [62:org.apache.camel.camel-core:2.21.0.fuse-730078-redhat-00001]
      	at org.apache.camel.component.timer.TimerConsumer.sendTimerExchange(TimerConsumer.java:197) [62:org.apache.camel.camel-core:2.21.0.fuse-730078-redhat-00001]
      	at org.apache.camel.component.timer.TimerConsumer$1.run(TimerConsumer.java:79) [62:org.apache.camel.camel-core:2.21.0.fuse-730078-redhat-00001]
      	at java.util.TimerThread.mainLoop(Timer.java:555) [?:?]
      	at java.util.TimerThread.run(Timer.java:505) [?:?]
      Caused by: java.io.StreamCorruptedException: invalid stream header: 31363430
      	at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:857) ~[?:?]
      	at java.io.ObjectInputStream.<init>(ObjectInputStream.java:349) ~[?:?]
      	at org.apache.camel.processor.aggregate.jdbc.ClassLoadingAwareObjectInputStream.<init>(ClassLoadingAwareObjectInputStream.java:50) ~[233:org.apache.camel.camel-sql:2.21.0.fuse-730078-redhat-00001]
      	at org.apache.camel.processor.aggregate.jdbc.JdbcCamelCodec.decode(JdbcCamelCodec.java:87) ~[233:org.apache.camel.camel-sql:2.21.0.fuse-730078-redhat-00001]
      	at org.apache.camel.processor.aggregate.jdbc.JdbcCamelCodec.unmarshallExchange(JdbcCamelCodec.java:58) ~[233:org.apache.camel.camel-sql:2.21.0.fuse-730078-redhat-00001]
      	at org.apache.camel.processor.aggregate.jdbc.JdbcAggregationRepository$3.doInTransaction(JdbcAggregationRepository.java:290) ~[233:org.apache.camel.camel-sql:2.21.0.fuse-730078-redhat-00001]
      	... 31 more
      

        1. features.xml
          0.4 kB
        2. org.ops4j.datasource-reproducer.cfg
          0.3 kB
        3. reproducer.zip
          10 kB

            [ENTESB-10640] JdbcAggregationRepository does not work with postgresql's OID data type for exchange column

            Hi acosenti,
            Thank you so much for the fix on upstream.
            It seems like there is no test code to confirm the fix also I'm afraid for any regression by this fix.
            Could you kindly consider about the test code for this ticket please?

            Hisao Furuichi added a comment - Hi acosenti , Thank you so much for the fix on upstream. It seems like there is no test code to confirm the fix also I'm afraid for any regression by this fix. Could you kindly consider about the test code for this ticket please?

              acosenti Andrea Cosentino
              rhn-support-hfuruich Hisao Furuichi
              Tomas Turek Tomas Turek
              Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

                Created:
                Updated:
                Resolved: