Here's what I have so far. I am not sure if this is the best way,
However I can not find a way to store the variable for next quartz
run:

        from("quartz2://sync/myTimer?trigger.repeatInterval=5000&stateful=true")
                .routeId("myRoute")
                .choice()
                .when(property("last_id").isNotNull())
                .setBody(
                        constant("select id from student where id
:?last_id >= order by id"))
                .otherwise()
                //
                .setBody(constant("select id from student order by id ")).end()
                .to("jdbc:ds?useHeadersAsParameters=true")
                .log("sync db using sql stmt: ${in.body}")
                .process(new Processor() {

                    @Override
                    public void process(Exchange exchange) throws Exception {

                        // we need to iterate over the IDs and pull each record
                        // from DB

                        // set the last id or the last time stamp
                        exchange.setProperty("last_id", constant(2));
                    }
                }).log("done up to ID: ${property.last_id}");

Thank you.

I am using camel 2.15.1


On Thu, May 7, 2015 at 9:26 PM, Mansour Al Akeel
<mansour.alak...@gmail.com> wrote:
> Yes, I had a look earlier at this component. But I don't understand
> how it solve my problem. Can you please elaborate ?
>
>
> On Thu, May 7, 2015 at 7:56 PM, fradj zayen <zaye...@gmail.com> wrote:
>> Hi,
>> did you tried to use sql component?
>> http://camel.apache.org/sql-component.html
>> Regards
>> Fradj
>>
>> 2015-05-07 15:08 GMT+01:00 Mansour Al Akeel <mansour.alak...@gmail.com>:
>>>
>>> Usually I do this in plain java without using camel, however, I would
>>> like to start using camel for similar tasks.
>>>
>>> I need to use stateful job t opreserve state and variable for last
>>> run. One of these variable is the ID for the last record that was
>>> processed. I have seen that some developers mark a field with "DONE"
>>> in the originating table. However this is not possible as we don't
>>> have write permission to the originating table. And we can not read
>>> all the records, because the table may get big.
>>>
>>>
>>>
>>> So here's what I want to do:
>>>
>>> // poll the table every 5 seconds
>>>
>>> // if any new resords added or update_timestamp changed, then select
>>> those new records
>>>
>>> // use Message Enricher to get the new data from the DB. Iterate over
>>> them.
>>>
>>> // Send each updated record to message queue to be indexed by lucene
>>> or JDBC endpoint to be inserted into the target table.
>>>
>>> // store the last_id or timestamp for the processed recored to be used
>>> in the next run.
>>>
>>> A similar functionaity, I may need soon to poll CIMS sharepoint, where
>>> I don't have write access in the originating DB.
>>>
>>> I was not able to locate any example for using quartz2 stateful job.
>>>
>>> Any advice or pointer ?
>>>
>>> Thank you
>>
>>

Reply via email to