QUARTZ - Arquivo Properties - could not be read

2 respostas
L

Boa tarde pessoal,

Já faz um bom tempo que não tenho programado e portanto a minha questão pode parecer ser um pouco básica para muitos de vocês. De qualquer forma, vamos lá:

Estou criando um App para ServiceDesk na empresa onde trabalho usando JSF 2.0 + Primefaces + Eclipelink etc. O Aplicativo está praticamente pronto e resta apenas uma entrega que eu gostaria de implementar. Esta entrega é o envio de E-MAILS diários para alguns chamados que estão abertos a mais de x dias. Para isso, pesquisando , descobri há pouco a LIB Quartz.

Segui a documentação da LIB , mas ainda assim, ao iniciar o servidor TOMCAT , recebo a seguinte mensagem de erro:

org.quartz.SchedulerException: Properties file: ‘quartz.properties’ could not be read. [See nested exception: java.io.FileNotFoundException: quartz.properties (O sistema não pode encontrar o arquivo especificado)]

Vou compartilhar todos os meus arquivos para que vocês possam ver como está a minha estrutura:

WEB.XML

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Production</param-value>
    </context-param>
    <context-param>
        <param-name>primefaces.THEME</param-name>
        <param-value>bluesky</param-value>
    </context-param>    
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            15
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>faces/index.xhtml</welcome-file>
    </welcome-file-list>    
    
    <context-param>
        <param-name>quartz:config-file</param-name>
        <param-value>quartz.properties</param-value>
    </context-param>
    <context-param>
        <param-name>quartz:shutdown-on-unload</param-name>
        <param-value>true</param-value>
    </context-param>
    <context-param>
        <param-name>quartz:wait-on-shutdown</param-name>
        <param-value>false</param-value>
    </context-param>
    <context-param>
        <param-name>quartz:start-scheduler-on-load</param-name>
        <param-value>true</param-value>
    </context-param>
    
    <listener>
        <listener-class>org.quartz.ee.servlet.QuartzInitializerListener</listener-class>
    </listener>
    
</web-app>

QUARTZ PROPERTIES

org.quartz.scheduler.instanceName = QuartzScheduler
org.quartz.scheduler.instanceId = AUTO

org.quartz.threadPool.threadCount = 3
org.quartz.threadPool.threadPriority = 5
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool

org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore

org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
org.quartz.plugin.jobInitializer.overWriteExistingJobs = true
org.quartz.plugin.jobInitializer.failOnFileNotFound = false
org.quartz.plugin.jobInitializer.scanInterval = 10
org.quartz.plugin.jobInitializer.validating=false
org.quartz.plugin.jobInitializer.fileName =quartz-jobs.xml

QUARTZ-JOBS.xml

<?xml version="1.0" encoding="UTF-8"?>
<job-scheduling-data
    xmlns="http://www.quartz-scheduler.org/xml/JobSchedulingData"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.quartz-scheduler.org/xml/JobSchedulingData
        http://www.quartz-scheduler.org/xml/job_scheduling_data_1_8.xsd"
    version="1.8">
    <schedule>
        <job>
            <name>JobEncerraChamados</name>
            <group>Grupo01</group>
            <description>Job para encerramento de chamados</description>
            <job-class>Jobs.JobEncerraChamados</job-class>
        </job>
        <trigger>
            <cron>
                <name>TriggerEncerraChamado</name>
                <job-name>JobEncerraChamados</job-name>
                <job-group>Grupo01</job-group>				
                <cron-expression>0/10 * * * * ?</cron-expression>
            </cron>
        </trigger>
    </schedule>
</job-scheduling-data>

Estrutura

ServiceDesk

  • Páginas WEB
    • WEB-INF
      • quartz-jobs.xml
      • quartz.properties
      • faces-config.xml
      • web.xml
    • Minhas Paginas
      • etc…

Classe Java:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Jobs;

import java.text.SimpleDateFormat;
import java.util.Date;
 
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

/**
 *
 * @author lucas.blanco
 */
public class JobEncerraChamados implements Job{
    /**
     * Metodo que é executado quando a tarefa é invocada
     * @throws org.quartz.JobExecutionException
     */
    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        System.out.println("Roda meu filho...");
    }
}

Já fiz varias análises , revisão de código e cai realizando várias tentativas. Já coloquei o arquivo QUARTZ.PROPERTIES e em todas as tentativas o erro é o mesmo. Onde estou errando ?

Muito obrigado pessoal !!!

“lucasblancob:

Boa tarde pessoal,

Já faz um bom tempo que não tenho programado e portanto a minha questão pode parecer ser um pouco básica para muitos de vocês. De qualquer forma, vamos lá:

Estou criando um App para ServiceDesk na empresa onde trabalho usando JSF 2.0 + Primefaces + Eclipelink etc. O Aplicativo está praticamente pronto e resta apenas uma entrega que eu gostaria de implementar. Esta entrega é o envio de E-MAILS diários para alguns chamados que estão abertos a mais de x dias. Para isso, pesquisando , descobri há pouco a LIB Quartz.

Segui a documentação da LIB , mas ainda assim, ao iniciar o servidor TOMCAT , recebo a seguinte mensagem de erro:

org.quartz.SchedulerException: Properties file: ‘quartz.properties’ could not be read. [See nested exception: java.io.FileNotFoundException: quartz.properties (O sistema não pode encontrar o arquivo especificado)]

Vou compartilhar todos os meus arquivos para que vocês possam ver como está a minha estrutura:

WEB.XML

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Production</param-value>
    </context-param>
    <context-param>
        <param-name>primefaces.THEME</param-name>
        <param-value>bluesky</param-value>
    </context-param>    
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            15
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>faces/index.xhtml</welcome-file>
    </welcome-file-list>    
    
    <context-param>
        <param-name>quartz:config-file</param-name>
        <param-value>quartz.properties</param-value>
    </context-param>
    <context-param>
        <param-name>quartz:shutdown-on-unload</param-name>
        <param-value>true</param-value>
    </context-param>
    <context-param>
        <param-name>quartz:wait-on-shutdown</param-name>
        <param-value>false</param-value>
    </context-param>
    <context-param>
        <param-name>quartz:start-scheduler-on-load</param-name>
        <param-value>true</param-value>
    </context-param>
    
    <listener>
        <listener-class>org.quartz.ee.servlet.QuartzInitializerListener</listener-class>
    </listener>
    
</web-app>

QUARTZ PROPERTIES

org.quartz.scheduler.instanceName = QuartzScheduler
org.quartz.scheduler.instanceId = AUTO

org.quartz.threadPool.threadCount = 3
org.quartz.threadPool.threadPriority = 5
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore

org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
org.quartz.plugin.jobInitializer.overWriteExistingJobs = true
org.quartz.plugin.jobInitializer.failOnFileNotFound = false
org.quartz.plugin.jobInitializer.scanInterval = 10
org.quartz.plugin.jobInitializer.validating=false
org.quartz.plugin.jobInitializer.fileName =quartz-jobs.xml

QUARTZ-JOBS.xml

<?xml version="1.0" encoding="UTF-8"?>
    <job-scheduling-data
        xmlns="http://www.quartz-scheduler.org/xml/JobSchedulingData"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.quartz-scheduler.org/xml/JobSchedulingData
            http://www.quartz-scheduler.org/xml/job_scheduling_data_1_8.xsd"
        version="1.8">
        <schedule>
            <job>
                <name>JobEncerraChamados</name>
                <group>Grupo01</group>
                <description>Job para encerramento de chamados</description>
                <job-class>Jobs.JobEncerraChamados</job-class>
            </job>
            <trigger>
                <cron>
                    <name>TriggerEncerraChamado</name>
                    <job-name>JobEncerraChamados</job-name>
                    <job-group>Grupo01</job-group>				
                    <cron-expression>0/10 * * * * ?</cron-expression>
                </cron>
            </trigger>
        </schedule>
    </job-scheduling-data>

Estrutura

ServiceDesk

  • Páginas WEB
    • WEB-INF
      • quartz-jobs.xml
      • quartz.properties
      • faces-config.xml
      • web.xml
    • Minhas Paginas
      • etc…

Classe Java:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Jobs;

import java.text.SimpleDateFormat;
import java.util.Date;
 
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

/**
 *
 * @author lucas.blanco
 */
public class JobEncerraChamados implements Job{
    /**
     * Metodo que é executado quando a tarefa é invocada
     * @throws org.quartz.JobExecutionException
     */
    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        System.out.println("Roda meu filho...");
    }
}

2 Respostas

L

Bom dia turma !
Alguém que já tenha passado por isso, ou conseguiu configurar o QUARTZ ?
Obrigado.

L

Pessoal,

Dei mais um passo na saga :wink:

Analisei o log do tomcat, onde o classpath apontado era outro, então joguei os arquivos de propriedades lá e o erro parou. Contudo, o meu System.out.println não funcionou ainda. Ainda o JOB não foi chamado… mas vamos que vamos. Novidades posto aqui.

Criado 2 de agosto de 2016
Ultima resposta 3 de ago. de 2016
Respostas 2
Participantes 1