Archive

Posts Tagged ‘WebSphere’

Utilizando o Startup Order no WebSphere

Muitas vezes vamos fazer o deploy de um novo release de uma aplicação em um servidor de aplicações, e para fazer isso, simplesmente sobrescrevemos a aplicação anterior (update). Isso não é muito interessante do ponto de vista de um rollback. Se você precisar voltar para a antiga versão, pode demorar um pouco mais.

Uma forma interessante para contornar isso é utilizar o Startup Order.

Eu sugiro uma boa prática em nossos processos de deploy: Ao fazer o deploy de um novo release para sua aplicação, você deve dar um nome diferente a ela, por exemplo: “Aplicacao_X_release_2”, e setar o Startup Order (stating weight em versões antigas) para 1, como na figura (screen de versão Antiga do WAX – 7):

Utilizando o Starting Weight no WebSphere

Versão mais recente (8 e 8.5):

Selection_385

Após isso, devemos ir no release anterior, e setar o starting weight/startup order para algo maior que um.

Assim, reiniciamos o servidor de aplicação, e quando ele iniciar, vai levantar a aplicação com o menor peso, pois ao tentar levantar a aplicação com o peso maior, o servidor vai verificar que o context root já está em uso por outra aplicação.

Esta é uma ótima prática para evitarmos operações de rollback demoradas. Se tivermos algum problema no novo release, podemos simplesmente fazer a troca de pesos, ou seja, colocar 1 no release mais antigo e 100 no novo release, assim, reiniciar o servidor de aplicação, e o mesmo, iniciará o antigo release, sem problemas!

Enjoy!

Criando um Web Service Restful com Jersey

Criei um conjunto de slides bem simples e objetivo com o passo a passo para se criar um Web Service RESTful utilizando a API Jersey. Para quem quer conhecer esse mundo, acredito que vá ajudar bastante.

Tenha em mente que implementar um Web Service é relativamente simples, porém, preocupe-se sempre com a segurança e volumetria (carga, stress, usuários, etc), pois isso tende a derrubar muito servidor por ai!

Enjoy!

Imprimindo Statements no log do WebSphere

Uma necessidade comum é imprimir statemens e prepared statements no console do Websphere. Isso é facil!

Habilitando o trace no arquivo trace.log (normalmente localizado na pasta appServer01/profiles/server1/logs ) você irão ver os statements como no exemplo:

[8/4/14 14:16:40:328 GMT] 0000002b WSJccPrepared >  <init> Entry
com.ibm.db2.jcc.c.uf@58d858d8
com.ibm.ws.rsadapter.jdbc.WSJccSQLJConnection@453c453c
CLOSE CURSORS AT COMMIT (2)
PSTMT: INSERT INTO DB2PRD.THIST_OPER_FUTUR (CINDCD_CATEG_OPER, CINDCD_MCADO_LELAO, CINDCD_NEGOC_DIFRD, CINDCD_NEGOC_OPER, CINDCD_PARTC_LIQDC, CINDCD_TRNSF_PTFOL, CMCADO_FUTUR_CONTR, CMEIO_NEGOC_TESOU, CMERCD_FINCR, CTPO_MANUT_REG, CTPO_MERCD_TESOU, CUSUAR_MANUT, HINCL_REG_HIST, NCRRET_VLRS, NORIGE_NEGOC_TESOU, NSEQ_OPER_TESOU, NTPO_RISCO_TESOU, NVCTO_MCADO_FUTUR, QDIA_CORRI_OPER, QDIA_UTIL_OPER, QNEGOC_OPER, RJUSTF_TRNSF_PTFOL, VAJUST_DOLAR_INTL, VBASE_CURTO_OPER, VPRECO_UNTAR_OPER, VTX_NEGOC_OPER, VEMOLU_NORML_OPER, VEMOLU_DIA_OPER, NSEQ_OPER_DSBTO) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) 1003 1007 2 0 4
[8/4/14 14:16:40:328 GMT] 0000002b WSJccPrepared ... 

A configuração é bem extensível, dá pra brincar bastante.

Para habilitar, vá no Admin console do Websphere -> Resolução de Problemas -> Logs e Rastreios  e selecione seu servidor.

Vá em Rastreio de Diagnostico

Alterar Niveis de Detalhes do Log

Adicione as informações abaixo:

WAS.database=finest: com.ibm.ws.rsadapter.jdbc.WSJdbcCallableStatement=finer: com.ibm.ws.rsadapter.jdbc.WSJdbcStatement=finer: com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement=finer: com.ibm.ws.rsadapter.jdbc.WSJccCallableStatement=finer: com.ibm.ws.rsadapter.jdbc.WSJccStatement=finer: com.ibm.ws.rsadapter.jdbc.WSJccPreparedStatement=finer

Salve, reinicie o servidor e voa lá!

Claro que o arquivo tende a ficar gigantesco conforme uso!

Recomendo utilizar uma ferramenta como o TAIL para ver o Log.

Veja também que temos milhares de outros parâmetros para logar e nos ajudar.

Enjoy!

Problema ao instalar WebSphere 6.1 no Windows 7

Muitas pessoas ainda precisam instalar o WebSphere 6.1 para efeitos de testes e suporte a legado. O Instalador do WebSphere 6.1 é incompatível por padrão com o Windows 7, e não irá seguir com o processo de instalação normalmente.

Isso pode ser facilmente driblado clicando no install.exe do WebSphere e selecionando “rodar em modo de compatibilidade”, e marcando Windows 2008 R2.

Fonte: http://www-01.ibm.com/support/docview.wss?uid=swg21408390

Eclipse Market Place

Eclipse Market Place

Muitas pessoas não conhecem o Market Place do Eclipse. Nele é possível encontrar plugins muito úteis, tais como o plugin do WebSphere 7.0 para Eclipse. Enjoy!

Categorias:JAVA Tags:, ,

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/

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!

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

Junte-se a 477 outros seguidores