Arquivos
Criando um projeto WEB com Jetty
Segue um breve how to cujo objetivo é mostrar como embutir o Jetty no seu projeto e criar um Servlet exemplo.
1- Baixe o Jetty e o jar javax.servlet. Verifique pelas ultimas versões disponíveis, no momento que escrevia este How To, eram os abaixo:
2- Iniciei um projeto Java normal no eclipse e adicione as duas libs como dependencia.
3- Crie uma classe para ser a classe principal que iniciará o Jetty:
package br.com.infoserver.exemplo;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.AbstractHandler;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import br.com.infoserver.servlets.DummyServlet;
import br.com.infoserver.servlets.DummyServlet2;
public class ExemploJetty extends AbstractHandler{
public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
response.setContentType("text/html;charset=utf-8");
response.setStatus(HttpServletResponse.SC_OK);
baseRequest.setHandled(true);
response.getWriter().println("<h1>Hello World</h1>");
}
public static void main(String[] args) throws Exception
{
Server server = new Server(8080);
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
server.setHandler(context);
context.addServlet(new ServletHolder(new DummyServlet()),"/*");
context.addServlet(new ServletHolder(new DummyServlet("Servlet 1")),"/servlet1/*");
server.start();
server.join();
}
}
4- Crie o Servlet:
package br.com.infoserver.servlets;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DummyServlet extends HttpServlet
{
private static final long serialVersionUID = -7433379500358268888L;
public DummyServlet(){}
public DummyServlet(String greeting)
{
this.greeting=greeting;
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
response.setContentType("text/html");
response.setStatus(HttpServletResponse.SC_OK);
response.getWriter().println("session=" + request.getSession(true).getId());
}
}
5- Execute a classe principal, e no seu navegador aponte para localhost:8080/servlet1
Voa lá!
Criando uma aplicação Java conversando com Filas MQ
Galera, achei uma fonte muito legal sobre o tema Java e WebSphere MQ, segue ai:
http://www.angusyoung.org/2011/10/23/tutorial-sobre-websphere-mq/
Validar um usuário no Active Directory no C#
Tive a necessidade de autenticar um usuário em um Active Directory a partir de uma aplicação Web C#. Meu código ficou assim:
bool valid = false;
try
{
// create a "principal context" - e.g. your domain (could be machine, too)
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, "SEU DOMINIO"))
{
// validate the credentials
valid = pc.ValidateCredentials(username, password);
}
}
catch (Exception ex)
{
WriteLog("Erro de acesso ao DB: " + ex.Message);
}
return valid;
Simples e funcional.
Fazendo submit de um form com Ajax
Para quem quer fazer um submit de um form, sem reload de página, eis um link interessante:
http://net.tutsplus.com/tutorials/javascript-ajax/submit-a-form-without-page-refresh-using-jquery/
Enjoy!
Fazendo um forward para um JSP de um Servlet
Eu sempre esqueço isso!!! Como efetuar um forward, ou seja, invocar uma página, a partir de um Servlet. Segue o código:
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/meetingsearch.jsp");
dispatcher.forward(request, response);
Enjoy!
Removendo acentuação com Java
Segue código exemplo para referência utilizando replaceAll:
public static String removerAcentos(String s) {
s = s.replaceAll("[èéêëÈÉÊË]","E");
s = s.replaceAll("[ûùúÛÙÚ]","U");
s = s.replaceAll("[ïîíìÏÎÍÌ]","I");
s = s.replaceAll("[àâáãÀÂÁÃ]","A");
s = s.replaceAll("[óòÒÓôÔõÕ]","A");
s = s.replaceAll("[ç,Ç]","C");
return s;
}
A tempo, no Java 6 dá pra se utilizar o Normalizer, mais eficiente e simples. Segue Exemplo abaixo:
package br.com.infoserver.tests;
import java.text.Normalizer;
public class TestString {
public static void main(String[] args) {
System.out.println(removerAcentos("REALIZÁVEL LONGO PRAZO"));
System.out.println(removerAcentos("ATIVO NÃO CIRCULANTE"));
System.out.println(removerAcentos("AC -Aplicações interf de liquidez"));
System.out.println(removerAcentos("Títulos e vals mobs"));
System.out.println(removerAcentos("RL -Aplicações interf de liquidez"));
System.out.println(removerAcentos("RL - Títulos e vals mobs"));
System.out.println(removerAcentos("PASSIVO NÃO CIRCULANTE"));
System.out.println(removerAcentos("EXIGÍVEL LONGO PRAZO"));
System.out.println(removerAcentos("RES.EXERC.FUTURO"));
System.out.println(removerAcentos("PARTICIP.MINORITÁRIOS"));
System.out.println(removerAcentos("PATRIMÔNIO LÍQUIDO"));
System.out.println(removerAcentos("PC - Total de depósitos"));
System.out.println(removerAcentos("PC - Captações no mercado"));
System.out.println(removerAcentos("EXIGÍVEL A LONGO PRAZO"));
System.out.println(removerAcentos("EX.LP - Total de depósitos"));
System.out.println(removerAcentos("EX.LP - Captações no mercado"));
System.out.println(removerAcentos("EX.LP - Empréstimos e repasses"));
System.out.println(removerAcentos("DEMONSTRATIVO DE RESULTADOS"));
}
public static String removerAcentos(String str) {
str = Normalizer.normalize(str, Normalizer.Form.NFD);
str = str.replaceAll("[^\\p{ASCII}]", "");
return str;
}
}
Enjoy!
Spooler caindo no Windows 7
Sim… eu também posto coisas sobre Windows
Afinal, eu trabalho em TI e eventualmente, desenvolvo soluções para tal plataforma.
Encontrei um problema em um cliente, no qual eu não conseguia instalar uma impressora, verifiquei que o spooler de impressão CAIA quando eu adicionava o driver, e isso, gerava uma falha ao adicionar o mesmo, não permitindo que a instalação funcione.
Resolvi seguindo as dicas a seguir:
1. Go to Programs and Features in Control panel > click Turn Windows features on or off
2. click + sign of Print services
3. Select LPD and LPR. You should remove Internet Printing Client. > restart your PC to ensure there is no error of spooler service.
4. Add your printer driver again.
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
