Quartz + Tomcat ou Qualquer Servidor de App
Este é um passo a passo de como criar uma aplicação Web que tem uma tarefa agendada. Por exemplo, vamos supor que você tem uma aplicação Web, que eventualmente deve efetuar uma limpeza de dados em uma base. Você pode utilizar o quartz para isso (outra alternativa seria Ejb timer). Vamos la:
1- Baixe o Quartz (http://www.quartz-scheduler.org/)
2- Crie um projeto Web Dinâmico no Eclipse e nas dependencias do mesmo, coloque todas as bibliotecas do Quartz baixadas no passo anterior.
3- Crie as classes abaixo:
3.1- Tarefa
package com.br.infoserver.quartz;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
/**
* Esta classe demonstra uma tarefa que ira ser invocada pelo Quartz
* Tem que implementar a interface Job do Quartz
* @author julianom
*/
public class TarefaExemplo implements Job{
/**
* Metodo que é executado quando a tarefa é invocada
*/
public void execute(JobExecutionContext context)
throws JobExecutionException {
// aqui vai a lógica da tarefa a ser chamada,
// por exemplo, fazer um select no banco e enviar algum dado para uma fila MQ
// Neste exemplo, vai somente imprimir no console a data de hoje no intervalo de 5 segundos
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy – hh:mm:ss");
System.err.println("Rodou: " + dateFormat.format( new Date() ));
}
}
3.2- Agendador, esta classe será invocada por um servlet na inicialização da aplicação WEB
package com.br.infoserver.quartz;
import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
/**
* Esta é a classe que deve ser invocada e irá disparar a tarefa nos momentos
* determinados
*
* @author julianom
*
*/
public class Agendador {
public static void inicia() throws Exception {
// Detalhes da tarefa
JobDetail job = JobBuilder.newJob(TarefaExemplo.class).withIdentity(
"tarefaAloMundo", "group1").build();
// Gatilho - ou seja, quando irá chamar, neste caso, a cada 5 segundos
Trigger trigger = TriggerBuilder.newTrigger().withIdentity(
"gatilhoAloMundo", "group1").withSchedule(
CronScheduleBuilder.cronSchedule("0/5 * * * * ?")).build();
// Agenda e voa lá!
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(job, trigger);
}
}
4- Crie um servlet, este Servlet deverá ser configurado para ser carregado na inicialização da aplicação, eu fiz isso utilizando annotation, dependendo de sua versão de Java, Apache, WebSphere, etc… vai ter que tirar do Servlet e colocar no arquivo web.xml
package com.br.infoserver.quartz.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.br.infoserver.quartz.Agendador;
/**
* Servlet implementation class QuartzServlet
*/
@WebServlet(
urlPatterns = { "/QuartzServlet" },
initParams = {
@WebInitParam(name = "load-on-startup", value = "2")
})
public class QuartzServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public QuartzServlet() {
super();
try {
Agendador.inicia();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
}
Pronto, simples e fácil. Basta efetuar o deploy de sua aplicação em seu servidor, e verá que neste exemplo ele ficará escrevendo a data no SystemOut do mesmo!
Enjoy!
Criando uma tarefa Agendada no Java com Quartz
Eventualmente temos a necessidade de ter um aplicativo Java que irá rodar seguindo uma determinada agenda, por exemplo, de 10 em 10 minutos, todos dia as 18 horas, etc…
Quartz é um componente que nos permite fazer isso com facilidade. Para criar uma aplicação simples, basta baixar o mesmo de quartz-scheduler.org , e criar uma aplicação com as libs do quartz no classpath da mesma, e ter pelo menos duas classes, uma que representa a TAREFA, e outra que representa a AGENDA. Seguem os exemplos:
- Tarefa
package com.br.infoserver.quartz;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
/**
* Esta classe demonstra uma tarefa que ira ser invocada pelo Quartz
* Tem que implementar a interface Job do Quartz
* @author julianom
*
*/
public class TarefaExemplo implements Job{
/**
* Metodo que é executado quando a tarefa é invocada
*/
public void execute(JobExecutionContext context)
throws JobExecutionException {
// Obviamente, aqui vai a lógica da tarefa a ser chamada, nesta caso, vai imprimir no console
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy – hh:mm:ss");
System.out.println("Rodou: " + dateFormat.format( new Date() ));
}
}
- Agenda
package com.br.infoserver.quartz;
import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
/**
* Esta é a classe que deve ser invocada e irá disparar a tarefa nos momentos
* determinados
*
* @author julianom
*
*/
public class Agendador {
public static void inicia() throws Exception {
// Detalhes da tarefa
JobDetail job = JobBuilder.newJob(TarefaExemplo.class).withIdentity(
"tarefaAloMundo", "group1").build();
// Gatilho - ou seja, quando irá chamar, neste caso, a cada 5 segundos
Trigger trigger = TriggerBuilder.newTrigger().withIdentity(
"gatilhoAloMundo", "group1").withSchedule(
CronScheduleBuilder.cronSchedule("0/5 * * * * ?")).build();
// Agenda e voa lá!
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(job, trigger);
}
}
Finalmente, a classe principal que invoca a agenda:
package com.br.infoserver.quartz;
/**
* Classe principal da aplicação que dispara as agendas
* @author julianom
*
*/
public class IniciaAgenda {
public static void main(String[] args) {
try {
Agendador.inicia();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Enjoy!
Iniciando um processo no C# com outro usuário
Estava precisando executar um comando no Windows utilizando rundll32 como um usuário diferente do ligado na estação, e encontramos dois ótimos links bem direto ao ponto. Aí vão :
http://stackoverflow.com/questions/4624113/how-to-process-start-with-impersonated-domain-user
http://weblogs.asp.net/hernandl/archive/2005/12/02/startprocessasuser.aspx
Enjoy
No supported Browsers Found – instalando RAD 7.5 no ubuntu
Nas ultimas versões do Ubuntu (11 e 12), ao tentar instalar o RAD 7.5, ao executar o launchpad.sh, obtemos o erro “No Supported Browsers”. Isso ocorre pois a versão do Firefox é mais recente do que as especificadas no script browser.sh, que é chamado pelo launchpad.
Para burlar isso e conseguir instalar o RAD, basta ir neste arquivo browser e remover esta checagem ou ainda adicionar a versão do seu navegador no mesmo.
No meu caso, limpei o browser.sh e o mesmo ficou assim:
whichBrowser=firefox BROWSER=firefox; export BROWSER; LaunchPadBrowserPath=$PATH; export LaunchPadBrowserPath LaunchPadDefaultBrowser=$BROWSER; export LaunchPadDefaultBrowser export whichBrowser if [ "$LaunchPadTest" ]; then echo $LaunchPadBrowserPath echo $BROWSER fi
Feito isso, basta salvar o mesmo e chamar o launchpad e tudo ocorrerá normalmente.
Não se esqueça de executar este passo, senão irá ocorrer falha na criação do profile do WebSphere.
Enjoy!
Instalando o Microsoft Office no Linux
Todos sabem que eu sou usuário Linux desde 1999, porém, não sou Xiita. Sei das necessidades de se utilizar o Microsoft Office, no meu caso, preciso rodar algumas planilhas com Macros complexas e VB Script, que simplesmente não funcionam no Open Office.
Sem “saco” para fazer isso em uma máquina virtual, resolvi instalar o Office no Ubuntu rodando a partir do Wine (emulador Windows)! E funciona Perfeitamente.
Para instalar, basta instalar o Wine (apt-get install wine) e ir na seguinte página – http://www.playonlinux.com/en/ – e instalar o Play on Linux. Ele instala o Office para você (e muitas outras coisas, tais como o IE).
Claro, para isso você precisa ter o CD do office. No meu caso tenho.
Enjoy!
CLT x PJ Atualizado – 2012
Hoje em dia no mercado de TI (nem só TI, mas TI principalmente), existem várias maneiras de contratação, das quais eu destaco as mais utilizadas:
* CLT: Registrado com carteira de trabalho assinada, férias, etc
* PJ: Pessoa Jurídica, na qual o profissional tem que abrir uma empresa e vira um prestador de serviço.
Existem variações da CLT, como a tal de CLT Flex, na qual o funcionário é registrado por um valor menor e recebe o resto legalmente “por fora”. Outra variação é o registro CLT por um valor baixo e recebimento de participação nos lucros na empresa bimestralmente. No meu ponto de vista, estas variações são piadas de mal gosto e nem comento aqui, mas infelizmente essas são as saídas de muitos profissionais que estão ingressando no mercado de trabalho e tem que se “submeter” a tal modalidade.
O objetivo deste post é comparar brevemente CLT e PJ, mostrar minha opinião pessoal, e deixar que o leitor tire suas conclusões.
Em síntese, um profissional registrado como CLT tem todos os direitos previstos na legislação brasileira, tais como: 13, férias, FGTS, etc. Porém ele paga uma alta carga tributária e o valor líquido que ele recebe é menor que o valor bruto, ou seja, o valor registrado em carteira. Um profissional registrado por 4500 reais, recebe aproximadamente 3600 ao final do mês, um desconto de quase mil reais!
Um profissional que presta serviço através de sua empresa (PJ), tem por características pagar menos impostos e ter menos benefícios, portanto, o valor líquido que ele pega em mãos, é muito maior, além disso, as empresas que contratam um profissional PJ, tem um custo menor para manter o “funcionário”, portanto, podem pagar mais pelo seu trabalho.
Colocando isso em números para podermos comparar as duas modalidades de contratação, vamos a um exemplo abaixo:
- Profissional CLT registrado por 4500 reais.
- Profissional PJ com o valor hora de 50 reais calculando um mês de 168 horas. (50 * 168 = 8400) – Este valor hora é de um programador Java Sênior, mas podem haver variações.
Para calcularmos o real salário do funcionário CLT, não basta verificar o valor que ele recebe líquido, temos que colocar todos os benefícios na equação, alguns exemplos são:
3600 – Valor líquido ao fim do mês
400 – INSS (este valor retorna algum dia na aposentadoria)
300 – 13 (décimo terceiro – paga-se o valor do mesmo e divide por 12)
300 – 14 (décimo quarto – algumas empresas tem 14/Participação nos lucros, é a mesma conta que para o 13)
1000 – Plano de saúde executivo familiar (profissional + esposa + filho – eu cotei o plano executivo da Amil)
250 – Ticket refeição
250 – Vale transporte
…
Os benefícios variam de empresa para empresa, então esta conta é bem pessoal, acima eu citei alguns exemplos comuns, baseado nestes exemplos, podemos dizer que o salario do profissional CLT é então:
3600 + 2500 = 6100
Nunca coloque valores que podem não vir a se realizar, tais como bonus, participação em projetos, etc. Estes são eventualidades.
Agora, calculando o valor do profissional PJ, temos 50 * 168 = 8400.
Os valores do CLT e do PJ podem variar com adição de horas extras, mas NUNCA se deve levar em consideração este fator, visto que é algo que pode não existir. Já vi muitos profissionais quebrarem a cara ao optarem por trabalho PJ sob alegação que a empresa permitiria horas abertas. Isso é bem específico de cada projeto. Dá sim para ganhar muito dinheiro com isso, mas é um risco que cada um tem que saber medir.
Em cima do valor de 8400, o profissional PJ vai pagar aproximadamente 15% de impostos/escritório/etc, é um valor alto, mas a média é entre 10 a 15% mesmo, para fazermos estas contas, sempre devemos chutar alto.
Descontados os 15%, o PJ tem ao final do mês 7140 reais na mão. Agora veja que o PJ não tem NENHUM dos benefícios do CLT, então este valor dos benefícios deve ser descontado do PJ:
7140 – 2500(benefícios do CLT) = 4640
Agora destes 4640, descontamos o salário líquido do CLT (3600), que vai dar uma diferença de 1040.
Aí vamos para a conclusão:
Existem N fatores que podem entrar nesta equação, o CLT pode ter mais ou menos benefícios, o PJ pode ter algum benefício também, porém em geral, O CLT tem que considerar que tem férias, licenças (maternidade, doença, seguro desemprego, etc)FGTS, etc.. enquanto o PJ não tem NADA disso, se ele quiser o benefício, vai ter que pagar de seu próprio bolso.
Outro fator que muitas pessoas consideram é a estabilidade do CLT. Para uma empresa mandar um profissional PJ “embora”, é muito mais prático e não tem custo algum, no máximo tem um contrato assinado que normalmente dá até este direito para a empresa, ai o PJ vai embora sem receber nada! Para mandar um CLT para a rua, é caro! Uma empresa sempre vai preferir mandar o PJ para a rua! Eu particularmente, não levo em consideração este fator na área de TI (estabilidade) se você for um bom profissional (bom CV, falar inglês, etc), pois o mercado é aquecido e não faltam vagas.
O PJ normalmente não tem plano de carreira, o CLT costuma ter. Algumas empresas também pagam cursos para os profissionais CLT, e isso tem seu valor e tem que entrar na conta.
Por outro lado, o PJ pode trabalhar muito, fazer horas extras irreais, e recebera por isso, um CLT, esta limitado legalmente em seu numero de horas (40 horas mês).
Para abrir uma empresa para prestar serviço como PJ, você vai ter um custo, e para fechar a empresa vai ter um custo maior ainda, o CLT não tem custo algum (só o da foto 3×4
).
Se um PJ falta do trabalho, o problema é dele, até com atestado médico, e não vai receber por isso, então ele não pode nem pensar em ficar doente! Se o CLT falta, com atestado, ele recebe normalmente, se fica doente, tem amparo legal!
Legalmente, uma empresa (PJ) deve gastar o lucro da empresa com A empresa, o que a maioria das pessoas faz é simplesmente pegar esse dinheiro e torrar com gastos pessoais, casas, carros, etc. Se a empresa cai em um pente fino da Receita Federal, irá pagar uma multa sobre tudo que não for comprovado como gasto da empresa PJ, ou seja, sobre TODA sua retirada! Tenho amigos que cairam nessa e demoraram mais que 5 anos para se “levantar” financeiramente.
Agora, se perguntarem qual minha preferencia, eu digo categoricamente: CLT.
O valor PJ tem que ser muito alto para justificar uma migração para o mesmo. Tem que dar dinheiro para pagar todos os benefícios do CLT e sobrar. As vezes as pessoas só olham o valor direto que o PJ rende e não olham os outros valores que o CLT propicia e caem em ilusões! Acabem pensando no presente.
Ao analisar uma proposta, coloque TODOS os fatores na ponta do lápis e não tome uma decisão precipitada.
Espero que este tópico tenha sido útil para você.
Abraços
Um grande amigo (Marcelo Quadros) descobriu como habilitar o “Desligar” no menu superior do Gnome-Shell no Ubuntu 12.04.