Quartz Part3

Antes de começar, não deixe de ver os post anterior Post1 e Post 2.

Agora irei falar sobre o framework Quartz para JEE, então irei criar um servlet, no qual será utilizado o Tomcat 6.0, mas poderia utilizar Jboss, Weblogic. Fique alerto para cada Servidor de Aplicação será necessário os respectivos libs. Lembrando estas libs vem junto com a lib do framework. Neste poste irei mostrar passo a passo, como construir um simples exemplo usando essa framework.

Pre-requisito:

Supondo que estes requisitos já esteja na sua máquina. Começando abra o eclipse e segue os passos.

Criar Projeto Novo, “Dynamic Web Project”. New->Other

Defina um nome para Projeto, Add : “ProjectQuartzWeb”, depois confere se o Tomcat foi marcado com o Servidor de Aplicação do Projeto.

Depois de criar o Projeto, vai até o pasta “src”, e cria o pacote “br.com.quartz”, no qual serão adicionados as classes do projetos.

Depois de criar os pacotes, crie os seguinte Serviços (O mesmo dos outros post). Adicione as seguintes classes abaixo:

Esse Classe “EnviarEmail”, nada mais que um serviço que envia um email.

package br.com.quartz;

import org.apache.commons.mail.SimpleEmail;

public class EnviarEmail {

	public static void main(String[] args)
	{
		SimpleEmail email = new SimpleEmail();

		try {
			email.setDebug(true);
			email.setHostName("smtp.gmail.com");
			email.setAuthentication("seu_login", "xxxxxxxxxx");
			email.setSSL(true);
			email.addTo("email_destinatario");
			email.setFrom("seu_email");
			email.setSubject("Testando");
			email.send();

		} catch (Exception e) {
			// TODO: handle exception
			System.out.println(e.getMessage());
		}

	}

}

Aqui a Classe foi criado um JOB

package br.com.quartz;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class EmailJob implements Job {

	public EmailJob() {

	}

	@Override
	public void execute(JobExecutionContext arg0) throws JobExecutionException {
		// TODO Auto-generated method stub
		EnviarEmail teste = new EnviarEmail();
		teste.main(null);

	}

}

A Classe que chama o serviço JOB, e determina o temporizador.

package br.com.quartz;

import static org.quartz.JobBuilder.newJob;
import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
import static org.quartz.TriggerBuilder.newTrigger;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;

public class ExecutarServico implements ServletContextListener{

	@Override
	public void contextDestroyed(ServletContextEvent arg0) {
		// TODO Auto-generated method stub
		  System.out.println("THE APPLICATION STOPPED");

	}

	@Override
	public void contextInitialized(ServletContextEvent arg0) {

		try {

			JobDetail job = newJob(EmailJob.class)
				    .withIdentity("myJob", "myGroup")
				    .storeDurably()
				    .requestRecovery()
				    .usingJobData("someKey", "someValue")
				    .build();

			Trigger trigger = newTrigger()
				      .withIdentity("myTrigger", "group1")
				      .startNow()
				      .withSchedule(simpleSchedule()
				          .withIntervalInSeconds(10)
				          .repeatForever())
				      .build();

			Scheduler sched = new StdSchedulerFactory().getScheduler();

			sched.scheduleJob(job, trigger);

			  sched.start();
		} catch (SchedulerException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		 // Tell quartz to schedule the job using our trigger

    }

}

Aqui, tem que criar um arquivo “quartz.properties”, no próprio “src”.

org.quartz.scheduler.instanceName = MeuApp
org.quartz.scheduler.instanceId = AUTO
org.quartz.scheduler.rmi.export = false
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 3
org.quartz.threadPool.threadPriority = 5
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore

Duplo clik em web.xml, no Web XML Editor, procura “Listeners” -> Add -> “br.com.quartz.ExecutarServico”.

 ...

  br.com.quartz.ExecutarServico

 ...

Lembre-se que tem que adicionar os jar, na lib do projeto.

Caso você não consegui abaixar todas as libs, deixe um comentário com seu email e twitte este post, que irei encaminar os jar’s.

Quartz Parte2

No primeiro post, deu um pequeno exemplo de temporizador que roda em tempos em tempos, digo segundos em segundos. Mas se eu quero agendar que o meu sistema lança um job, em um determinado hora de cada dia do mês? É possível?

Sim, não muda quase nada, o que precisamos é do CronTrigger, e dos parametros de que controla do time. Seja abaixo os parametros que VOCÊ deve saber:

Expressão Significado
“0 0 12 * * ?” Dispara do meio dia de cada dia
“0 15 10 ? * *” Dispara 10:15 da manhã de cada dia
“0 15 10 * * ?” Dispara 10:15 da manhã de cada dia
“0 15 10 * * ? *” Dispara 10:15 da manhã de cada dia
“0 15 10 * * ? 2005” Dispara 10:15 da manhã de cada dia durante ano de 2005
“0 * 14 * * ?” Dispara a cada minuto a partir das 02:00 e terminando às 2:59 pm, todos os dias
“0 0/5 14 * * ?” Dispara a cada 5 minuto a partir das 02:00 e terminando às 2:55 pm, todos os dias
“0 0/5 14,18 * * ?” Dispara a cada 5 minutos a partir de duas horas e terminando às 2:55 pm, e disparar a cada 5 minutos a partir de 18:00 e terminando às 6:55 pm, todos os dias
“0 0-5 14 * * ?” Dispara a cada minuto a partir das 02:00 e terminando às 2:05 pm, todos os dias
“0 10,44 14 ? 3 WED” Dispara em 2:10 da tarde até 02:44 da tarde,isso toda quarta-feira no mês de março
“0 15 10 ? * MON-FRI” Dispara às 10:15 de toda segunda-feira, terça, quarta, quinta e sexta-feira
“0 15 10 15 * ?” Dispara às 10:15 horas do dia 15 de cada mês
“0 15 10 L * ?” Dispara às 10:15 no último dia de cada mês
“0 15 10 ? * 6L” Dispara às 10:15 na última sexta-feira de cada mês
“0 15 10 ? * 6L 2002-2005” Dispara às 10:15 em cada última sexta-feira de cada mês durante os anos 2002, 2003, 2004 e 2005
“0 15 10 ? * 6#3” às 10:15 na terceira sexta-feira de cada mês

Neste post não irei tratar como instalar o framework Quartz,isso pode ser visto no post anterior.O códigos abaixo é referente a parte1, aproveitando a idéia do serviço, mas mostrando um jeito diferente de disparo do serviço.


package br.com.chikasawa.teste;

import org.apache.commons.mail.SimpleEmail;

public class EnviarEmail {

	public static void main(String[] args)
	{
		SimpleEmail email = new SimpleEmail();

		try {
			email.setDebug(true);
			email.setHostName("smtp.gmail.com");
			email.setAuthentication("seu_login", "sua_senha");
			email.setSSL(true);
			email.addTo("email_destinatario@gmail.com");
			email.setFrom("seu_email@gmail.com");
			email.setSubject("Testando");
			email.send();

		} catch (Exception e) {
			// TODO: handle exception
			System.out.println(e.getMessage());
		}

	}

}

Essa Classe, cria-se um Job.

package br.com.chikasawa.teste;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class EmailJob implements Job {

	public EmailJob() {

	}

	@Override
	public void execute(JobExecutionContext arg0) throws JobExecutionException {
		// TODO Auto-generated method stub
		EnviarEmail teste = new EnviarEmail();
		teste.main(null);

	}

}

Criei um job que despara todos os dias 31 de cada mês no horário 9:32 da manhã.

package br.com.chikasawa.teste;

import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.impl.StdSchedulerFactory;
import static org.quartz.TriggerBuilder.*;
import static org.quartz.JobBuilder.*;
import static org.quartz.CronScheduleBuilder.*;

public class ExecTarefa {

	public static void main(String[] args) throws SchedulerException
	{
		JobDetail job = newJob(EmailJob.class)
			    .withIdentity("myJob", "myGroup")
			    .storeDurably()
			    .requestRecovery()
			    .usingJobData("someKey", "someValue")
			    .build();

		CronTrigger trigger = newTrigger()
			    .withIdentity("trigger1", "group1")
			    .withSchedule(cronSchedule("0 32 9 31 * ?"))
			    .build();

		Scheduler sched = new StdSchedulerFactory().getScheduler();
		 // Tell quartz to schedule the job using our trigger
		  sched.scheduleJob(job, trigger);

		  sched.start();

	}

}

Procurei mostra neste post, um forma diferente em agendar suas tarefas, serviços.

Mais informações, nada melhor que o site do framework.

Quartz

Olá pessoal, hoje escreverei um mini exemplo, utilizando o framework Quartz, open source. Essa ferramenta permite você agendar(scheduler) um tipo de tarefas. Objetivo deste post não é ensinar instalar o framework, além do que o google existe vários tutoriais. Mas sim, mostrar um serviço que enviará email’s , em tempos em tempos. Concordo que não é um melhor exemplo para mostrar para vocês. Mas irá ajudar muitos a dar um ponta pé nos seus estudos.

Jar necessário para alguns jar

JavaMail API 1.4.5
Commons Email 1.X

Este serviço abaixo, envia um email.


package br.com.chikasawa.teste;

import org.apache.commons.mail.SimpleEmail;

public class EnviarEmail {
	
	public static void main(String[] args)
	{
		SimpleEmail email = new SimpleEmail();
		
		try {
			email.setDebug(true);
			email.setHostName("smtp.gmail.com");
			email.setAuthentication("seu_login", "sua_senha");
			email.setSSL(true);
			email.addTo("email_destinatario@gmail.com");
			email.setFrom("seu_email@gmail.com");
			email.setSubject("Testando");
			email.send();
			
		} catch (Exception e) {
			// TODO: handle exception
			System.out.println(e.getMessage());
		}
		
	}

}

Essa Classe, cria-se um Job.

package br.com.chikasawa.teste;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class EmailJob implements Job {

	public EmailJob() {
	
	}
	
	@Override
	public void execute(JobExecutionContext arg0) throws JobExecutionException {
		// TODO Auto-generated method stub
		EnviarEmail teste = new EnviarEmail();
		teste.main(null);
		
	}		

}

Criamos uma trigger que em 40 segundos ele dispara um job, ou seja, em tempo em tempos o sistema envia um email para o destinatário.

package br.com.chikasawa.teste;

import org.quartz.JobDetail;  
import org.quartz.Scheduler;  
import org.quartz.SchedulerException;  
import org.quartz.Trigger;  
import org.quartz.impl.StdSchedulerFactory;  
import static org.quartz.TriggerBuilder.*;
import static org.quartz.JobBuilder.*;
import static org.quartz.SimpleScheduleBuilder.*;

public class ExecTarefa {

	public static void main(String[] args) throws SchedulerException
	{
		JobDetail job = newJob(EmailJob.class)
			    .withIdentity("myJob", "myGroup")
			    .storeDurably()
			    .requestRecovery()
			    .usingJobData("someKey", "someValue")
			    .build();
		
		Trigger trigger = newTrigger()
			      .withIdentity("myTrigger", "group1")
			      .startNow()
			      .withSchedule(simpleSchedule()
			          .withIntervalInSeconds(40)
			          .repeatForever())            
			      .build();
		
		Scheduler sched = new StdSchedulerFactory().getScheduler();  
		 // Tell quartz to schedule the job using our trigger
		  sched.scheduleJob(job, trigger);		  
		  sched.start(); 		
	}
}

Este exemplo demostrado aqui é para Java SE, em outro post, irei falar sobre Quartz para JEE. Eu aberto a sugestões e críticas.

Extensão Virtualbox

Esse Mini Post ajudar para instalar uma extensão no VirtualBox. Estou utilizando virtual 4.1, porém você poderá abaixar a versão mais atual aqui. Não focaremos a instalação aqui do Virtualbox.

Abaixando a extensão do Virtualbox, para USB.

Abre o VirtualBox, segue os passos abaixo:

File -> Extensions -> Add Package

Agora as Imagens do seu Virtualbox, terão o usb, facilitará o backup por exemplo. Se você gostou deste post indique para seus colegas.

Básico – Começando com Github

Github é um repositório de controle de versão, bastante útil para projeto open-source. Este Mini Post, aborarei como dar o primeiro passe com github.

Debian e Ubuntu

$ sudo apt-get install git-core

// Add seu nome que você cadastrou no git. Caso você não não tenha uma conta, faça aqui.

$ git config --global user.name "ADD seu nome"
$ git config --global user.email "seu email@youremail.com"

Configurando Onpenssh para Github

Certifique se o opessh foi instalado. Caso não tenha segue o comando abaixo:

$ sudo apt-get install openssh-server

Agora vamos verificar onde se encontra as chaves de segurança do ssh.

// Primeiro Caso
$ cd ~/.ssh
//obs: por acaso nao aparecer este diretorio, com as chaves.Tente esse:
// Segundo Caso
$ cd /etc/ssh
/***Continuação Primeiro Caso***/
$ls
# config id_rsa id_rsa.pub known_hosts

//Fazer backup das chaves
$ mkdir key_backup
$ cp id_rsa* key_backup

// remove todos as chaves nesse diretório
$ rm id_rsa*

//criando novas chaves
$ ssh-keygen -t rsa -C "seu email@youremail.com"

//Aparecerá, [Enter]
#Enter passphrase (empty for no passphrase): [senha]
# Enter same passphrase again: [senha]

//Se deu certo aparecerá algo parecido:</em>
#Your identification has been saved in /home/you/.ssh/id_rsa.
# Your public key has been saved in /home/you/.ssh/id_rsa.pub.
# The key fingerprint is:
# 01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db your_email@youremail.com
#The key's randomart image is:
/***Continuação Segundo Caso***/
$ ls
#moduli sshd_config ssh_host_dsa_key.pub ssh_host_rsa_key.pub
#ssh_config ssh_host_dsa_key ssh_host_rsa_key

//Fazer backup das chaves
$ mkdir key_backup
$ cp ssh_host_rsa_key* key_backup

// remove todos as chaves nesse diretório
$ rm ssh_host_rsa_key*

$ ssh-keygen -t rsa -C "add seu email"
#enerating public/private rsa key pair.
#Enter file in which to save the key (/home/[name]/.ssh/id_rsa): [Enter]
#Enter passphrase (empty for no passphrase): [senha]
#Enter same passphrase again:[senha]

Feito isso temos que passar os dados da sua máquina para o servidor Github.

  1. Acesse o site Github, e vai até o Account Settings
  2. Acesse a opção SSH KEY
  3. Add SSH KEY
  4. Adiciona a chave no campo (Pega os dados por aqui $  sudo gedit  ~/.ssh/id_rsa.pub )

Para finalizar

$ssh -T git@github.com</strong>

//Aparecerá uma janela pedindo sua senha, e digite sua senha

//Se deu certo, aparecerá essa mensagem abaix
 #Hi username! You've successfully authenticated, but GitHub does not
 # provide shell access.

fontes: https://help.github.com/articles/generating-ssh-keys

fontes:https://help.github.com/articles/set-up-git

Carregar vale Refeição Sodexo usando o VirtualBox

Para quem tem interesse em carregar seu próprio vale refeição, no meu caso é o sodexo, para evitar indo ao estabelecimento cadastrado no site.Já aproveitando, se alguém dessa empresa estiver lendo este post, por favor, por gentileza atualize o site dos estabelecimento que aceite o cartão.

Já começando com os problemas, foram realizado alguns  testes no Ubuntu e a operação funcionou no Sistema Operacional Windows (XP), no browser firefox. No linux ao carregar o applets aparece algum erro referente a alguns “dll” do windows, que não foram possíveis serem encontrados. Por esse motivo instalei no linux, o virtualbox. Veja o post de instalação da extensão do Virtualbox no ubuntu, aqui.

OBS: Vale apena reforçar que o VirtualBox a ser instaldo deve ser que suporta o USB e estou supondo que esteja instalado o mesmo, e que foi criado a imagem Windows XP.

Requisitos para Ubuntu.

  1. Virtualbox 4.x.x , download
  2. plugin Virtualbox , download
  3. GemPC Twin , da Gemalto

Requisitos para Windows.

  1. JDK e JRE para Window , download
  2. Browser no Windows XP, Firefox , download
  3. Driver do GemPC Twin, download

Depois de  instanciado o Windows XP no Virtualbox, com o leitor smartcard ,abre o browser e navegue até o site do sodexo. Caso você perceber não abertura da applet em Java, é porque você não instalou corretamente o plugin do JRE nos browser. Caso você tiver com dúvida  de como instalar JRE no seu browser firefox, segue aqui.
Compartilhe para quem tem o cartão Sodexo. Se você gostou, indique para seu amigo.