Search code examples
javamulequartz-schedulerpollingendpoint

Anypoint Studio Quartz Endpoint Poll a DB


i can't find a true tutorial on how to schedule a Quartz to poll a table in the DB.

I've tried to check alone, but it gaves to me the "deprecated" parenthesis on the JDBC association class endpoint.

So i'm a bit lost...how to configure a quartz to call a class made in the Mule Project that has to be executed everytime the scheduler has the timeout?

And how to parse the result?

Sorry if i request lots of things but i'm stuck...

EDIT:

this is the attempt with global connector:

<?xml version="1.0" encoding="UTF-8"?> 
<mule xmlns:jdbc-ee="http://www.mulesoft.org/schema/mule/ee/jdbc"
    xmlns:db="http://www.mulesoft.org/schema/mule/db" xmlns:servlet="http://www.mulesoft.org/schema/mule/servlet"
    xmlns:quartz="http://www.mulesoft.org/schema/mule/quartz" xmlns="http://www.mulesoft.org/schema/mule/core"
    xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
    xmlns:spring="http://www.springframework.org/schema/beans" version="CE-3.5.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.mulesoft.org/schema/mule/ee/jdbc http://www.mulesoft.org/schema/mule/jdbc/current/mule-jdbc-ee.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/quartz http://www.mulesoft.org/schema/mule/quartz/current/mule-quartz.xsd
http://www.mulesoft.org/schema/mule/servlet http://www.mulesoft.org/schema/mule/servlet/current/mule-servlet.xsd
http://www.mulesoft.org/schema/mule/db http://www.mulesoft.org/schema/mule/db/current/mule-db.xsd">
    <db:oracle-config name="Oracle_Global_Connector"
        host="laaaaaaaaaaaaaaaaa.bbbbbbbbbb.yyyy.it" port="1521" instance="IEEEEE"
        user="HTTTTTTTTT" password="HHHHHHHHHH" doc:name="Oracle Configuration" />


    <jdbc-ee:connector name="Database_Global"
        dataSource-ref="Oracle_Global_Connector" validateConnections="true" queryTimeout="-1"
        pollingFrequency="0" doc:name="Database">
        <jdbc-ee:query key="RetriveQuery" value="select * from MyTable" />
    </jdbc-ee:connector>


    <quartz:connector name="AWB_Quartz_Poller"
        validateConnections="true" doc:name="Quartz">
        <quartz:factory-property key="org.quartz.scheduler.instanceName"
            value="MuleScheduler1" />
        <quartz:factory-property key="org.quartz.threadPool.class"
            value="org.quartz.simpl.SimpleThreadPool" />
        <quartz:factory-property key="org.quartz.threadPool.threadCount"
            value="3" />
        <quartz:factory-property key="org.quartz.scheduler.rmi.proxy"
            value="false" />
        <quartz:factory-property key="org.quartz.scheduler.rmi.export"
            value="false" />
        <quartz:factory-property key="org.quartz.jobStore.class"
            value="org.quartz.simpl.RAMJobStore" /> <!-- Optional -->
    </quartz:connector>


    <flow name="testquartzFlow1" doc:name="testquartzFlow1">
        <quartz:inbound-endpoint jobName="MyFirstQuartzScheduler"
            repeatInterval="10000" responseTimeout="10000" doc:name="QuartzInbound">
            <quartz:event-generator-job groupName="TestScheduler"
                jobGroupName="TestScheduler">
                <quartz:payload>This is a job scheduler that will write to file
                    after every 10 seconds.</quartz:payload>
            </quartz:event-generator-job>
        </quartz:inbound-endpoint>
        <jdbc-ee:outbound-endpoint exchange-pattern="request-response"
            queryKey="RetriveQuery" queryTimeout="-1" connector-ref="Database_Global"
            doc:name="Database (JDBC)" />
    </flow> 
</mule>

thanks


Solution

  • Here is an example to use quartz .. It will poll yhe Database after every 10 sec.. and don't worry about "deprecated" parenthesis .. It will work

      <spring:beans>
       <spring:bean id="DB_Source" name="DB_Source" class="org.enhydra.jdbc.standard.StandardDataSource">
          <spring:property name="url" value="Your DBURL"/>
          <spring:property name="driverName" value="Your Driver name"/>
        </spring:bean>
      </spring:beans>
    
      <jdbc-ee:connector name="Database_Global" dataSource-ref="DB_Source" validateConnections="true" queryTimeout="-1" pollingFrequency="0" doc:name="Database">
       <jdbc-ee:query key="RetriveQuery" value="Select * from TableName "/>
    </jdbc-ee:connector>
    
    
    <quartz:connector name="AWB_Quartz_Poller" validateConnections="true" doc:name="Quartz">
       <quartz:factory-property key="org.quartz.scheduler.instanceName" value="MuleScheduler1"/>
        <quartz:factory-property key="org.quartz.threadPool.class" value="org.quartz.simpl.SimpleThreadPool"/>
       <quartz:factory-property key="org.quartz.threadPool.threadCount" value="3"/>
       <quartz:factory-property key="org.quartz.scheduler.rmi.proxy" value="false"/>
        <quartz:factory-property key="org.quartz.scheduler.rmi.export" value="false"/>
        <quartz:factory-property key="org.quartz.jobStore.class" value="org.quartz.simpl.RAMJobStore"/> <!-- Optional -->
       </quartz:connector>
    
    
     <flow name="TestScheduleServiceFlow1" doc:name="TestScheduleServiceFlow1">
      <quartz:inbound-endpoint jobName="MyFirstQuartzScheduler" repeatInterval="10000" responseTimeout="10000" connector-ref="AWB_Quartz_Poller" doc:name="QuartzInbound">
     <quartz:event-generator-job groupName="TestScheduler" jobGroupName="TestScheduler">
      <quartz:payload>This is a job scheduler that will write to file after every 10 seconds.</quartz:payload>
     </quartz:event-generator-job>
     </quartz:inbound-endpoint>
     <jdbc-ee:outbound-endpoint exchange-pattern="request-response" queryKey="RetriveQuery" queryTimeout="-1" connector-ref="Database_Global" doc:name="Database (JDBC)"/>
     </flow>
     </mule>