Arquivos

Posts Tagged ‘Tutorial’

Criando um projeto Java que conecta no Derby

Segue um breve tutorial sobre como criar uma aplicação Java que se conecta no Derby e o manipula.

1- Baixe a versão mais recende do Derby em http://db.apache.org/derby/derby_downloads.html
Existe a distribuição binária (bin distribution) que além das bibliotecas requeridas, tras documentação, exemplos, etc. Eu costumo baixar a Lib distribution, que contem somente os JARS necessários.

2- Descompacte o arquivo baixado. Veja que existe um diretório LIB nele. Lá estarão as bibliotecas que utilizaremos em seguida.

3- É opcional, mas eu prefiro criar uma pasta em meu projeto chamada Derby e copiar os arquivos do Derby para dentro da mesma, assim, ao levar o projeto para outras máquinas, o banco vai junto. Criada a pasta, os dois arquivos necessários são:

  • derby.jar
  • derbytools.jar

4- Adicione os dois Jars copiados em seu ClassPath, para isso, clique com o botão direito no projeto e vá em propriedades, então em Java Build Path, e na Aba Libraries, clique em Add Jars e apontar o local onde estão os dois arquivos.

Feito isso, vamos para o código. Criei uma classe chamada TesteDerby no pacote br.com.tix11.programs , ele foi baseado na documentação oficial do Derby. A classe tenta se conectar num banco Derby, vê se o db ESCOLA existe, caso não exista o cria e popula e faz um select simples. Segue o conteúdo:

Feito isso, vamos para o código. Criei uma classe chamada TesteDerby no pacote br.com.tix11.programs , ele foi baseado na documentação oficial do Derby. A classe tenta se conectar num banco Derby, vê se o db ESCOLA existe, caso não exista o cria e popula e faz um select simples. Segue o conteúdo:

package br.com.tix11.programs;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import org.apache.derby.tools.ij;

public class TestDerby {

	private static String driver = "org.apache.derby.jdbc.EmbeddedDriver";
	private static String protocol = "jdbc:derby:";

	public static void main(String args[]) {
		if (checkDB())
		{
			System.out.println("BANCO ESTA PRONTO PARA O USO.");
		} else
		{
			System.out.println("BANCO NAO ESTÁ OPERACIONAL.");
		}
	}

	public static boolean checkDB() {
		boolean retorno = false;
		loadDriver();
		Connection conn = null;

		ArrayList statements = new ArrayList(); // list of Statements,
												// PreparedStatements
		Statement s = null;
		ResultSet rs = null;
		try
		{
			String dbName = "ESCOLA"; // the name of the database
			// caso DB não exista, ele cria
			conn = DriverManager.getConnection(protocol + dbName + ";create=true");
			System.out.println("Connected to and created database " + dbName);

			// Imprimindo o conteudo da tabela disciplina
			s = conn.createStatement();
			rs = s.executeQuery("SELECT * FROM ESCOLA.discipline");
			while (rs.next()){
				System.out.println(rs.getInt(1) + " - " + rs.getString(2));
			}

			// Efetuando shutdown no DERBY
			try
			{
				DriverManager.getConnection("jdbc:derby:;shutdown=true");
			} catch (SQLException se)
			{
				if (((se.getErrorCode() == 50000) && ("XJ015".equals(se.getSQLState()))))
				{
					System.out.println("Derby shut down normally");
				} else
				{
					System.err.println("Derby did not shut down normally");
					printSQLException(se);
				}
			}

		} catch (SQLException sqle)
		{
			// Caso eu nao encontre o banco ou a tabela, eu os crio. Deve passar aqui somente na primeira execussao
			printSQLException(sqle);
			if  ( ( sqle.getMessage().equalsIgnoreCase("Table/View 'ESCOLA.discipline' does not exist.")) || (sqle.getMessage().equalsIgnoreCase("Schema 'ESCOLA' does not exist")) )
			{
				System.out.println("Ill create the database.");
				if (createDB(conn))
				{
					System.out.println("Banco Criado");
					System.out.println("Populando Banco");
					if (populateDB(conn))
					{
						System.out.println("Banco nao pode ser populado");
					} else
					{
						System.out.println("Banco populado");
						retorno = true;
					}
				} else
				{
					System.out.println("Banco não pode ser criado");
				}

			}
		} finally
		{
			// release all open resources to avoid unnecessary memory usage
			try
			{
				if (rs != null)
				{
					rs.close();
					rs = null;
				}
			} catch (SQLException sqle)
			{
				printSQLException(sqle);

			}

			// Statements and PreparedStatements
			int i = 0;
			while (!statements.isEmpty())
			{
				// PreparedStatement extend Statement
				Statement st = (Statement) statements.remove(i);
				try
				{
					if (st != null)
					{
						st.close();
						st = null;
					}
				} catch (SQLException sqle)
				{
					printSQLException(sqle);
				}
			}

			// Connection
			try
			{
				if (conn != null)
				{
					conn.close();
					conn = null;
				}
			} catch (SQLException sqle)
			{
				printSQLException(sqle);
			}
		}
		return retorno;
	}

	/**
	 * Cria a tabela
	 * @param conn
	 * @return
	 */
	private static boolean createDB(Connection conn) {
		FileInputStream fileStream = null;
		try
		{
			fileStream = new FileInputStream("./scripts/create.sql");
			int result = ij.runScript(conn, fileStream, "UTF-8", System.out, "UTF-8");
			System.out.println("Result code is: " + result);
			if (result == 1)
			{
				return true;
			} else
			{
				return false;
			}
		} catch (FileNotFoundException e)
		{
			return false;
		} catch (UnsupportedEncodingException e)
		{
			return false;
		} finally
		{
			if (fileStream != null)
			{
				try
				{
					fileStream.close();
				} catch (IOException e)
				{
				}
			}
		}
	}

	/**
	 * Popula a tabela
	 * @param conn
	 * @return
	 */
	private static boolean populateDB(Connection conn) {
		FileInputStream fileStream = null;
		try
		{
			fileStream = new FileInputStream("./scripts/populate.sql");
			int result = ij.runScript(conn, fileStream, "UTF-8", System.out, "UTF-8");
			System.out.println("Result code is: " + result);
			if (result == 1)
			{
				return true;
			} else
			{
				return false;
			}
		} catch (FileNotFoundException e)
		{
			return false;
		} catch (UnsupportedEncodingException e)
		{
			return false;
		} finally
		{
			if (fileStream != null)
			{
				try
				{
					fileStream.close();
				} catch (IOException e)
				{
				}
			}
		}
	}

	private static void loadDriver() {
		try
		{
			Class.forName(driver).newInstance();
			System.out.println("Loaded the appropriate driver");
		} catch (ClassNotFoundException cnfe)
		{
			System.err.println("\nUnable to load the JDBC driver " + driver);
			System.err.println("Please check your CLASSPATH.");
			cnfe.printStackTrace(System.err);
		} catch (InstantiationException ie)
		{
			System.err.println("\nUnable to instantiate the JDBC driver " + driver);
			ie.printStackTrace(System.err);
		} catch (IllegalAccessException iae)
		{
			System.err.println("\nNot allowed to access the JDBC driver " + driver);
			iae.printStackTrace(System.err);
		}
	}

	private static void reportFailure(String message) {
		System.err.println('\t' + message);
	}

	public static void printSQLException(SQLException e) {
		while (e != null)
		{
			System.err.println("\n----- SQLException -----");
			System.err.println("  SQL State:  " + e.getSQLState());
			System.err.println("  Error Code: " + e.getErrorCode());
			System.err.println("  Message:    " + e.getMessage());
			e = e.getNextException();
		}
	}

}

Repare que eu criei dois scripts SQL, um que cria a tabela que utilizaremos para teste e outro que a popula. Então, no exemplo JAVA você verá dois métodos sendo invocados caso necessário, para chamar respectivamente os scripts que criam e populam a tabela. Dentro do projeto tem uma pasta chamada scripts, e nela, os dois scripts.

create.sql

CREATE TABLE "ESCOLA".discipline
(
  id numeric(10) NOT NULL,
  "NAME" character varying(100) NOT NULL
);

populate.sql

INSERT INTO "ESCOLA".discipline (id, name) VALUES (1, 'Module 1');
INSERT INTO "ESCOLA".discipline (id, name) VALUES (2, 'Module 2');
INSERT INTO "ESCOLA".discipline (id, name) VALUES (3, 'Module 3');
CategoriasJAVA 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!

Tutorial de Spring

Galera, encontrei um tutorial de Spring fantástico na Internet: http://maestric.com/doc/java/spring

Vale a pena dar uma olhada, tanto para quem vai aprender quanto para os já iniciados, pois existe uma parte na qual o autor fala sobre injeção de dependência, e isso não é um conhecimento muito comum entre os “javeiros” de plantão.

Para quem está interessado em Maven e Spring, um ótimo post é este http://blog.springsource.com/2011/01/17/green-beans-getting-started-with-maven-and-spring/.

E finalmente, um ótimo post sobre Spring MVC: http://blog.springsource.com/2011/01/04/green-beans-getting-started-with-spring-mvc/.

Enjoy!

Instalando e configurando o PostgreSQL 8.4 no Ubuntu

Instalando e configurando o PostgreSQL 8.4 no UbuntuNo meu ambiente de desenvolvimento, eu sempre utilizo dois bancos: o Postgres e o DB2. Basicamente devido ao fato de minha instalação de DB2 ser pesada pois tenho várias configurações de Data Warehouse e um banco muito carregado, o que torna o banco mais pesado para meu simples desktop. Então, para debugar meus softwares, vou com meu postgres levinho mesmo.

Minha idéia aqui é mostrar como instalar e configurar o PostgreSQL 8.4 no Ubuntu 9.04. As configurações são as mesmas para a instalação em Windows, a única diferença obvia é que você irá ter que ir ao site do postgres e baixar o Installer do Windows.

Vamos lá, iniciamos a instalação com o comando:

$ sudo apt-get install postgresql-8.4 postgresql-client-8.4

Recomendo também instalar o pgAdmin, que é uma ferramenta para administrar o postgres:
$ sudo apt-get install pgadmin3 pgadmin3-data

Algo que aconteceu comigo na migração para o Ubuntu 9.04, foi que tive que remover o Postgres 8.3 (apt-get purge postgresql-8.3) para conseguir iniciar o 8.4 corretamente. Se você concluir meus passos aqui e mesmo assim não conseguir conectar no Postgres, recebendo algum erro, provavelmente terá que dar o purge. (talvez com mais tempo de pesquisa eu poderia descobrir qual era o problema… se alguem passar por isso me diga please).

O próximo passo é setar uma senha para o usuário postgres com os seguintes comandos:

sudo su postgres -c psql postgres
ALTER USER postgres WITH PASSWORD ‘password';
\q

O primeiro comando chama o utilitário psql com o usuário postgres e conecta no postgres especificamente no database postgres.
O segundo comando altera a senha do usuário postgres.
O terceiro comando finaliza o psql.
Note que a palavra password deve ser substituida pela password que você desejar.

Feito a instalação e mudança de senha do usuário postgres, você estará apto a desenvolver um trabalho no seu computador conectando normalmente ao postgres, porém, se a idéia é disponibilizar o acesso ao banco para receber conexões de outras máquinas, você vai ter que alterar dois arquivos para isso. Para isso, vá para o diretório /etc/postgres/8.4/main

Edite o arquivo postgresql.conf

Na linha listen_addresses, troque o localhost por *, ficando a linha assim:

listen_addresses = ‘*’

Dessa forma seu postgres vai “escutar” não só conexoes provenientes da sua própria máquina.

A próxima configuração no mesmo arquivo é habilitar a encriptação de passwords, para fazer isso descomente a linha abaixo simplesmente removendo o # da frente dela:

password_encryption = on

Finalmente a próxima configuração é no arquivo pg_hba.conf. Neste arquivo você consegue restringir o acesso ao seu banco de dados por IP. Normalmente queremos liberar o acesso para todos os IPs em uma faixa, no meu exeplo, quero liberar para todas as máquinas da rede 10.5.2.*, então eu adiciono a seguinte linha no meu pg_hba.conf:

host all all 10.5.2.0 255.255.0.0 md5

Feito isso, basta reiniciar o postgres com o comando:

sudo /etc/init.d/postgresql-8.4 restart

Enjoy!

Recompilando o Kernel do Ubuntu

A muito tempo eu não recompilava um Kernel, e para falar a verdade, acabei até esquecendo algumas etapas (no Ubuntu)…

Fui fazer isso hoje e refresquei a memória lendo um ótimo post do Alexandro Silva, o post pode ser encontrado aqui: http://penguim.wordpress.com/2006/11/14/compilando-o-kernel-no-ubuntu-linux/

Enjoy!

Testes unitários com JUnit

Meu aluno Luiz Gustavo, da pós em Engenharia de Componentes JAVA, na TNT em Lins, escreveu um ótimo artigo sobre testes unitário com JUnit.

Vale a pena dar uma lida e praticar.

O Artigo encontra-se aqui.

Relacionado ao tema, saibam o que é TDD – Test Driven Development, aqui!

Enjoy!

CategoriasJAVA Tags:, , , , ,

Desenvolvimento de aplicações para IPhone com Eclipse

Pessoal, publicamos um bom artigo sobre o desenvolvimento de aplicações para IPhone com Eclipse no Blog do Academic Initiative, para quem gosta de desenvolver e quer conhecer mais um paradigma, vale a pena dar uma olhada aqui.

Enjoy!

Instalando o OpenOffice.org 3 no Ubuntu

fevereiro 28, 2009 1 comentário

Encontrei um guia prático sobre como instalar o OpenOffice.org 3 no Ubuntu no Blog do LeonardoMarcelino, meu companheiro de IBM.

Eis o link: http://leonardom.wordpress.com/2008/10/25/instaling-openofficeorg-3-on-ubuntu/

Criando um datasource no WebSphere utilizando o RAD/RSA 7

Criei um breve tutorial sobre como criar um datasource no WebSphere Application Server (WAS) utilizando o Rational Software Architect (RSA) ou o Rational Application Developer (RAD) para conectar em uma base de dados DB2.

Passo pela criação do provedor JDBC (JDBC Provider) e do Mecanismo de autenticação

Finalmente mostro como chamar o datasource na classe Java.

Download: Tutorial em PDF

Enjoy.

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

Junte-se a 151 outros seguidores