You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Lorenzo Benvenuti (Jira)" <ji...@apache.org> on 2020/05/06 07:42:00 UTC

[jira] [Created] (CAMEL-15017) Can't use custom scheduler in polling consumer

Lorenzo Benvenuti created CAMEL-15017:
-----------------------------------------

             Summary: Can't use custom scheduler in polling consumer
                 Key: CAMEL-15017
                 URL: https://issues.apache.org/jira/browse/CAMEL-15017
             Project: Camel
          Issue Type: Bug
          Components: came-core
    Affects Versions: 2.25.1
            Reporter: Lorenzo Benvenuti


Hi,

I came across this error while trying to use a Quartz scheduler with a JPA component but I guess it applies to all the endpoints extending {{ScheduledPollEndpoint}}.

If I use
{code:java}
from("jpa://myEntity?scheduler=quartz2&scheduler.cron=0+*+*+?+*+*+*")
   /* ... */
{code}
I receive the following error:
{code:java}
org.apache.camel.FailedToCreateConsumerException: Failed to create Consumer for endpoint: jpa://myEntity?scheduler=quartz2&scheduler.cron=0+*+*+%3F+*+*+*. Reason: There are 1 scheduler parameters that couldn't be set on the endpoint. Check the uri if the parameters are spelt correctly and that they are properties of the endpoint. Unknown parameters=[{cron=0 * * ? * * *}]
at org.apache.camel.impl.ScheduledPollConsumer.doStart(ScheduledPollConsumer.java:433) ~[camel-core-2.25.1.jar:2.25.1]
	at org.apache.camel.component.jpa.JpaConsumer.doStart(JpaConsumer.java:530) ~[camel-jpa-2.25.1.jar:2.25.1]
{code}
This happens because the scheduler is an instance of {{DefaultScheduledPollConsumerScheduler}}. After some debugging I found out that when {{ScheduledPollEndpoint#configureScheduledPollConsumerProperties}} is called, {{schedulerName}} is always null ({{Endpoint.configureProperties}} is invoked before setting endpoint properties using reflection).

The only workaround I've found so far is to write a custom component and force the scheduler on the endpoint:
{code:java}
public class MyJpaComponent extends JpaComponent {

    @Override
    protected Endpoint createEndpoint(String uri, String path, Map<String, Object> options) throws Exception {
        JpaEndpoint endpoint = (JpaEndpoint) super.createEndpoint(uri, path, options);
        endpoint.setScheduler("quartz2");
        return endpoint;
    }

}
{code}
Thanks,

lorenzo



--
This message was sent by Atlassian Jira
(v8.3.4#803005)