Alex Florentino

KISS - Keep It Simple, Stupid

Archive for the ‘Java’ Category

Servlet 3.0

Monday, October 20th, 2008

Quem é acustomado em desenvolver Servlet, deve ficar atento pois a versão 3.0 da API, terá varias mudanças, a principal e mais conceitual é utilização de Annotations para criar suas servlets, olhando os exemplos na web, o esquema parece com Spring Mvc com annotations.

Sem dúvida essa alteração é um progresso, pois irá tornar mais simples o desenvolvimento das aplicações web, mais detalhes em An Introduction To Servlet 3.0 e na JSR.

Google Android

Monday, September 15th, 2008

O Brasileiro  Augusto Ferrarin é premiado por desenvolver aplicação para o ANDROID a aplicação é TerraDesk , o tick tack fez uma entrevista com o Augusto, muito bacana.

O legal deste prêmio é o nome do Brasil aparecendo nas competições internacionais. Também pelo volume do prêmio mostra que o Google Android quer chegar para abalar o mercado mobile.

Android resumidamente é plataforma movel aberta encabeçada pelo google baseada em java. Essa última parte (java) me interessa muito ! isso invariavelmente irá criar novas oportunidades para os desenvolvedores java, ou melhor já esta criando, é melhor como desenvolvedor java acompanhar esta tecnologia.

Java Annotations - bom ou ruim ?

Friday, September 12th, 2008

Você gosta das anotações java ? bom primeiro o que é (anotações)annotations ? anotações são o que eles chamam de metaprogramação, você usa anotações para avisar para o compilador(compile time annotations) ou para JVM (runtime annotations) como sua aplicação deve se comportar.

Anotações vem sendo usada de maneira pesada por conhecidas bibliotecas do mundo java tais como hibernate, web frameworks, etc.

Mais segundo consta no java 7 e também o java EE 6 isso vai mudar, pois nessas versões o java virá de fabrica repleto de anotações que visa desta forma tornar mais facil o desenvolvimento EE nos livrando dos já odiados xmls.

um exmplo de um código anotado :


@Id
@Basic(optional = false)
@Column(name = "id")
private Integer id;

três linhas de meta código para 1 linha de código.

isso é o efeito colateral das annotations, ou seja, uma certa poluição do seu código fonte, mais isso me parece um bom preço a se pagar para se livrar dos xmls.

um preview das novas annotations.

Downaload Tech Days Hands-on Labs 2008

Tuesday, May 13th, 2008

Alguns Tech Days Hands-on Labs 2008 podem ser encontradas aqui

Rápida Introdução a XMLBEANS

Monday, March 3rd, 2008

XMLBeans é uma ótima ferramenta para quem precisa trabalhar com XML, por exemplo, fazer uma integração entre dois sistemas utitlizando troca de arquivos em formato xml , para entender como essa ferramenta funciona é necessário ter algum conhecimento sobre XML Schema.

O que é XML Schema ? resumidamente esta ferramenta foi projetada para substituir as DTD , ou seja, é forma de definir e validar um documento XML.

Aqui um ótimo tutorial sobre XML Schema, neste tutorial iremos trabalhar com XML BEANS.

O que vamos fazer : Nosso sistema de comércio online deverá permitir o envio de pedido em formato XML este arquivo recebido deverá ser transformado em java bean com os seus respectivos dados.

Existem várias formas de se fazer essa tarefa mas com certeza usar xmlbeans é realmente uma forma elegante de resolver o problema.

A Seguir um passo a passo , antes de prosseguir é necessário instalar xml beans, instruções aqui.

Nosso arquivo que representa um novo pedido:

Pedido.xml


<?xml version="1.0">
<Pedido cliente_id="1">
<Item produto_id="10" quantidade="10" />
<Item produto_id="10" quantidade="10" />
</Pedido>

Nosso pequeno arquivo xsd(XML Schema):

Pedido.xsd


<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:pedido="http://www.alexflorentino.com/pedido"
targetNamespace="http://www.alexflorentino.com/pedido"
elementFormDefault="qualified">

<xs:element name="Pedido">
<xs:complexType>
<xs:sequence>
<xs:element name="Item" type="pedido:Item" />
</xs:sequence>
<xs:attribute name="client_id" type="xs:int" use="required"/>
</xs:complexType>
</xs:element>

<xs:complexType name="Item">
<xs:attribute name="produto_id" type="xs:int" use="required"/>
<xs:attribute name="quantidade" type="xs:int" use="required"/>
</xs:complexType>

</xs:schema>

Este arquivo resumidamente descreve como um arquivo de pedido deve ser formatado.

Agora precisamos inserir em nosso arquivo de pedido uma referência ao nosso Arquivo XSD.

Pedido.xml


<?xml version="1.0" encoding="UTF-8"?>
<Pedido cliente_id="1"  xmlns="http://www.alexflorentino.com/pedido"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="pedido.xsd">

<Item produto_id="10" quantidade="10" />

<Item produto_id="10" quantidade="10" />

</Pedido>

Pronto! com esses artefatos criados precisamos agora rodar um comando mágico, no diretório onde você criou os arquivos pedido.xml e pedido.xsd, execute:

scomp -out pedido.jar pedido.xsd

lembre-se para este comando funcionar você precisa ter xml beans devidamente instalado.

Basicamente este comando irá criar um monte de código para você, código que trata todo o trabalho que você poderia ter ao trabalhar com arquivo xml em java.
Para isso basta inserir o arquivo pedido.jar(gerado com o comando anterior) na sua aplicação junto com as bibliotecas do xml beans.

exemplo o trecho de código abaixo ilustra o processamento do arquivo de pedido.


PedidoDocument pedidoDoc = PedidoDocument.Factory.parse(new File("pedido.xml"));

Pedido pedido = pedidoDoc.getPedido();

System.out.println("Client_id:"+pedido.getClientId());
System.out.println("XMLLIDO \n:"+pedidoDoc.toString());

repare neste código você acabou de ler o arquivo pedido.xml diretamente para o seu objeto java Pedido, sem qualquer preocupação com detalhes de leitura do arquivo xml.

Para finalizar, xmlbeans é uma ferramenta poderoza para o trabalho com arquivo xml quando você já tem xsd já definidos, um exemplo real : você quer integrar com sistema .Net e certamente o dono do sistema em .Net tem os arquivos xsd e lhe fornecerá com isso o tempo de integração cai drasticamente, né ?.

O XML Beans também evita a famosa programação orienta a String :) já que você não precisa ficar lendo este arquivo xml, dentre muitas outras vantagens.
Baixe aqui os arquivos deste tutorial.

Android - Google, Linux, Java e outros

Tuesday, November 13th, 2007

O Google junto com um variado e respeitável grupo de grandes empresas lançaram na última segunda-feira o Android que é uma plataforma aberta para o desenvolvimento de aplicativos móveis.

Detalhe, essa plataforma é baseada em Linux Kernel e Java(misto Java SE e outras bibliotecas como HttpClient, etc.).

Na verdade o Android inclui o Android SDK que é uma caixa de ferramenta para desenvolver aplicativos para rodar na plataforma, que é java, inclusive com um plugin para o Eclipse.

O impressionante Desta iniciativa é quantidade de participantes de peso enquanto o J2ME(CLDC) da Sun evolui a passos de tartaruga ;)

Visite o hello world Android! para testar e aproveite deixe seus comentários!

Aplicação Simples com Hibernate

Sunday, September 2nd, 2007

A seguir segue um código de uma aplicação usando Hibernate a moda antiga, usando xml, é bem simples mais para marinheiros de primeira viagem será util. Você ira precisar do hibernate e suas libs e também do driver jdbc do MySQL.

Basicamente esta aplicação salva o objeto aluno no banco de dados.

A estrutura de arquivos do nosso exemplo:

Estrutura de arquivos

hibernate.cfg.xml


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration SYSTEM
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="hibernate.connection.url">
jdbc:mysql://localhost:3306/test
</property>
<property name="hibernate.connection.username">
root
</property>
<property name="hibernate.connection.password">
alex
</property>
<property name="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="show_sql">
true
</property>
<property name="format_sql">
true
</property>
<property name="current_session_context_class">
thread
</property>
<property name="hbm2ddl.auto">
update
</property>
<mapping resource="hibernate/Aluno.hbm.xml" />
</session-factory>
</hibernate-configuration>

Aluno.hbm.xml


<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="hibernate.Aluno" table="ALUNO">
<id name="id" column="ID">
<generator class="native" />
</id>
<property name="nome" column="NOME"  />
<property name="rg" column="RG" />
<property name="cpf" column="CPF" />
<property name="idade" column="IDADE" />
<property name="endereco" column="ENDERECO" />
<property name="cidade" column="CIDADE" />
</class>
</hibernate-mapping>

vamos ao código java:

Aluno.java


public class Aluno {

private int id;
private String nome = "";
private String rg = "";
private String cpf = "";
private int idade;
private String endereco = "";
private String cidade = "";

//gets and setters

}

a classe principal:

Main.java


package hibernate;

import hibernate.HibernateUtil;
import org.hibernate.Session;

public class Main {

public static void main(String[] args) {

Aluno aluno = new Aluno();

aluno.setNome("Alex");
aluno.setEndereco("Brasil");
aluno.setIdade(23);

Session session = HibernateUtil.getSessionFactory().getCurrentSession();

session.beginTransaction();

session.save(aluno);
session.getTransaction().commit();

}

}

e por último mais não menos importante nosso

HibernateUtil.java:


package hibernate;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {

private static SessionFactory sessionFactory;

static {

try {

sessionFactory = new Configuration().configure().buildSessionFactory();

} catch(Exception ex) {

ex.printStackTrace();

}
}

public static SessionFactory getSessionFactory() {

return sessionFactory;

}

}

Hibernate + Annotations = Simplicidade

Sunday, August 12th, 2007

Hoje resolvi testar este tal de Hibernate com já famosas annotations e para minha surpresa é extremamente simples e eficiente :) .

Para ter isso rodando em sua maquina você primeiro precisa baixar o hibernate core e Hibernate Annotations que podem ser encontrados aqui, mais cuidado com as versões das bibliotecas, eu tive problemas em rodar hibernate com annotations mais o erro foi utilizar hibernate core 3.1 na verdade isso nunca daria certo, pois o hibernate annotations não é compativel com a versão 3.1 do Hibernate.

Você também precisa do driver jdbc do seu banco de dados, no caso utilizo o MySQL.

Pronto! com dezenas de megas baixados vamos para parte legal, o seguinte código tem um exemplo bem simples de ter isso rodando.

Basta criar um projeto java no fantástico eclipse adicionar os jars ao projeto(ou criar uma biblioteca com os jars) depois criar um pacote chamado test e por o seguintes os códigos:

O Java Bean :


package test;

import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.*;

@Entity
@Table(name="Address")
public class Address {

@Id @GeneratedValue
@Column(name="Address_ID")
private int id;

@Column(name="street")
private String street;

@Column(name="state")
private String state;

@Column(name="zipCode")
private String zipCode;

@Column(name="city")
private String city;

@Column(name="aptNumber")
private String aptNumber;

//get and setters, aqui :) 

Nossa classe Main:


package test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

public class Main {

public static void main(String args[]) {

new Main().addAddress();

}

public void addAddress() {

AnnotationConfiguration cfg = new AnnotationConfiguration();

cfg.setProperty("hibernate.dialect","org.hibernate.dialect.MySQLDialect");
cfg.setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver");
cfg.setProperty("hibernate.connection.url", "jdbc:mysql://localhost/test");
cfg.setProperty("hibernate.current_session_context_class", "thread");
cfg.setProperty("hibernate.connection.username", "root");
cfg.setProperty("hibernate.connection.password", "senhaaqui");
cfg.setProperty("hibernate.show_sql", "true");
cfg.setProperty("hibernate.hbm2ddl.auto", "create");

cfg.addAnnotatedClass(test.Address.class);

SessionFactory sessionFactory = cfg.buildSessionFactory();

Session session = sessionFactory.getCurrentSession();

session.beginTransaction();
test.Address address = new test.Address();

address.setAptNumber("15");
address.setCity("ALA");
address.setState("SP");
address.setZipCode("1700000");
address.setStreet("Ola teste");

session.save(address);

session.getTransaction().commit();

sessionFactory.close();

}

}

execute a classe e se tudo correr bem, pronto você já tem hibernate + annotations rodando e pode continuar seus estudos.

Apache tomcat e SSL

Sunday, January 28th, 2007

Ótima documentação sobre apache tomcat e ssl.

http://tomcat.apache.org/tomcat-5.5-doc/ssl-howto.html

Java 6 lançado

Monday, December 11th, 2006

Hoje a Sun anunciou que já esta disponível para download Java 6

Nesta nova versão do Java os esforços foram concentrados em melhoramentos de performace, segundo a Sun o aumento pode chegar na casa dos 2 digitos.

No Java para desktop foram adicionados suporte para: System tray, splash screen dentre outros.

No Java mustang como é conhecido esta nova versão também foram adicionado Dynamic language, com suporte Ruby, Python, etc.

para saber mais sobre as novidades: http://jcp.org/en/jsr/detail?id=270