2 de dezembro de 2007

Desculpas

Visitantes do Java Anywhere, desculpem por não atualizarmos o blog desde o dia 11/10, estamos agora no final do ano (alunos, profissionais e professores que participam do Java Anywhere) finalizando nossas atividades na faculdade e deixando os projetos de nossas empresas em ordem, já que no final de ano é um inferno, provas, tcc, exames e fora o trabalho do dia-a-dia.
Prometo assim que acabar com todas estas tarefas atualizaremos o blog, populando com o que houve no JustJava 2007, Conexão Java 2007 e É dia de Java 2007.
Disponibilizarei todas as apostilas e códigos fontes.
Desculpem também sobre o link quebrado da palestra de JSF, estou no momento passando por e-mail para quem está me pedindo, mas em breve vou comprar um domínio e colocar lá, sobre o layout do blog, estamos vendo para 2008 melhorá-lo.

Assim que for tudo ajustado todos nós vamos voltar a postar notícias e tutoriais para ampliar os conhecimentos de Java, também estaremos disponibilizando TCC's do pessoal.

Estamos também com mais membros na equipe do blog, que nos ajudarão a trazer mais temas como Engenharia de SW, Avaliação de Desempenho de sistemas, Desenvolvimento Ágil, dentre outras coisas bem legais do nosso dia-a-dia.

Obrigado por entenderem esse corrido fim de ano.


Eduardo Bregaida

11 de outubro de 2007

SOA

SOA – Arquitetura orientada a serviços.

Boa tarde pessoal, o que vou postar aqui não seria bem um tutorial, atualmente estou estudando alguma coisa sobre SOA na faculdade e a maneira de tentar entender melhor é escrever, então ai vai alguns conceitos básicos sobre SOA, posso estar errado em alguns conceitos mas estamos aberto a sugestões e seus comentários serão bem vindo.
Algumas coisas tirei de sites também.

O que é SOA ?

De acordo com alguns artigos que estou lendo SOA é uma evolução da computação distribuída e da programação em módulos.

SOA é uma arquitetura voltada a serviços, a idéia de SOA é fazer com que toda unidade lógica de um sistema se transforme em um serviço, esses serviços devem ser independentes de qualquer outro.

Esses serviços estão organizados em um BUS (Enterprise Service Bus) disponibilizados através de interfaces, que podem ser acessadas via web services, mensageria, etc...

Pela definição SOA pode ser implementado usando um ou mais protocolos como SOAP, CORBA, DCOM, RPC, etc...

O que seria um serviço em SOA ?

De acordo com o site: http://pt.wikipedia.org/wiki/SOA, “é uma função independente e sem estado (stateless), que aceita uma ou mais requisições e devolve uma ou mais respostas através de uma interface bem definida”. Como havia dito antes cada serviço criado usando esta arquitetura deve ser independente de outro serviço não deve depender de estado e nem processos de outro serviço.

Mas o que seria BUS ?

BUS é um barramento que fica a frente dos serviços disponibilizados por sua arquitetura SOA, esse barramento também é conhecido como middleware, um exemplo de middleware seria o JBOSS. Para que SOA seja uma realidade este barramento é fundamental.

Na utilização de mensageria com JMS esses middlewares ficam responsáveis por enviar para a fila as mensagens, ele faz toda a gerencia dessas mensagens.

Requisitos para uma arquitetura orientada a serviços.

Para ser considerado um SOA ele deve ser independente de plataforma a tal de interoperabilidade.

Para que seja usado um serviço a interface disponibilizada deve estar muito bem definida e independente de plataforma.


Princípios Básicos de SOA.

SOA possui alguns princípios como reuso, componentização, interoperabilidade, modularidade.

Outros itens a respeito dos princípios de SOA são:

Serviços bem encapsulados, o baixo acoplamento, contrato, abstração, reusabilidade, componentização, autonomia, otimização.

Porque devo utilizar SOA ?

O ponto principal da utilização de SOA está na reutilização onde uma vez criado um serviço qualquer aplicação pode utiliza-lo.

Você começa a componentizar seu sistema de forma que fique totalmente independente de plataforma, independente de outros serviços, fácil manutenção entre outros aspectos que só alguém que já implementou poderia citá-los, como estou apenas estudando isso é um ponto de vista meu apenas.

[]'s

4 de outubro de 2007

Nota Oficial do Projeto JEDI no IMES

- IMES S.C do Sul e' o primeiro Agente certificador da Iniciativa JEDI no
Estado de Sao Paulo.

Nos dias 12 e 19092007,houve a implantacao da Iniciativa JEDI no IMES-S.C.do
Sul, tornando-se assim o primeiro Agente certificador no Estado de S.P. a
abracar a iniciativa. O Prof.Ms.Aparecido V. de Freitas coordenador dos
cursos de Ciencia da Computacao,Sistemas de Informacao,Tecnologia de Redes e
Tecnologia WEB Design, ficou encantado com a iniciativa JEDI
disponibilizando de inediato seus laboratorios e deixou claro que quer ser
um parceiro na disseminacao da Inclusao Digital e na melhoria da qualidade
de nossos alunos e profissionais, sendo que a linguagem Java e' adotada no
curriculo de nosso cursos e, sempre temos atuado junto a comunidade atraves
de cursos extra curriculares e eventos como o IMES-Java.E assim junto com
Eduardo Bregaida (nosso agente certificador da regiao do ABC de Sao Paulo)
idealizaram as seguintes palestras de abertura onde compareceram em media de
180 pessoas entre alunos e professores por palestras.

Resumo da palestras
- JEDI O ensino de Java, gratuito e com qualidade, com William Silva.

Foi mostrada como foi a criacao da iniciativa JEDi nas Filipinas, o mercado
de trabalho no Brasil a falta de profissionais qualificados para suprir a
demanda de empregos.Como o DFJUGJEDI e seus coordenadores estarao ajudando
na qualificacao desses profissionais colocando a disposicao e de forma
gratuita cursos de Java com qualidade sob a supervisao da Sun, a importancia
do agente certificador para acesso a infra-estrutura e material
didatico(on-line) para os professores e alunos.

- Jedi Material didatico on-line, com Eduardo Bregaida

Eduardo explicou a importanca da inciativa Jedi e, como ela esta ajudando na
melhora do ensino e na aprendizagem da Plataforma Java e tambem aumentar a
qualidade dos estudantes do IMES-S.C.do Sul.Posteriormente explicou como
seria a sua funcao como agente certificador no ABC e mostrou detalhadamente
aos alunos como efetuar o cadastro e o acesso aos modulos do curso.

- JavaCard, com Igor Medeiros

Igor Medeiros,deu uma pequena aula de Smart Card(cartao inteligente), sua
arquitetura, interface e explicando a sua utilizacao em varias aplicacoes
mostrando aos ouvintes a importancia do Smart Card em nosso dia-a-dia.Desde
um simples cartao bancario ao complexo chip embutido nos celulares GSM. Na
sequencia ainda teve folego para fazer uma motivacao com os alunos falando
sobre profissao com o titulo de seu livro Campeoes ajudam o proximo, esse
tema foi importante pois mostrou a necessidade e importancia do trabalho
voluntario.

- Introducao ao JavaFX, com Sergio Lopes (CAELUM)

Sergio Lopes,falou sobre JavaFX a nova tecnologia da Sun comparando e
mostrando a sua facilidade de desenvolvimento em relacao ao SwingAWT.Fez
comparacao de codigo entre um Hello World em Swing e em JavaFX,mostrou
tambem que Java nao vive de Hello World dai criou uma loja virtual em 2D,
com binding de componentes,classes,arrays, triggers para os eventos,cesta de
compras e etc.

Bem galera e' isso ai, quero destacar o apoio de nosso grande amigo e agente
certificador-ABC-SP. Eduardo Bregaida por ter acreditado na iniciativa JEDI
desde o inicio. Espero logo mais trazer mais noticias nos proximos boletins.
JEDI em Brasilia, no Festival Software Livre-DF (5 e 6 de Outubro).






Pessoal, cadastrem-se no JEDI e assistam as aulas: http://www.dfjug.org/DFJUG/jedi/index.jsp


Estarei postando com os outros colaboradores do Blog o JustJava 2007, amanhã é minha palestra: Produtividade em JSF, estou fazendo de tudo p/ ser bem d+++++ =)

26 de setembro de 2007

JAVA BRASIL 2007





Nos dias 2, 3 e 4 de novembro de 2007 será realizado o primeiro evento da série JavaBrasil.
O evento contará com palestrantes internacionais, abordando os temas mais importantes e atuais do desenvolvimento Java e técnicas Agile.


Mais informações em: http://www.javabrasil.org

11 de setembro de 2007

Projeto JEDI - IMES - São Caetano do Sul.

É com orgulho que venho anunciar que o projeto JEDI será instalado no IMES - Instituto Municipal de Ensino Superior de São Caetano do Sul.
Acontecerá um evento pequeno nos dias 12/09 e dia 19/09 das 19:20 às 22:40, para abertura oficial.

Abrindo o evento estará o William Silva e o Eduardo Bregaida falarão sobre o projeto JEDI;
Depois com JavaCard com Igor Medeiros;
E Por fim o Sérgio Lopes da CAELUM com JavaFX.



Conto com a presença de vocês.

Valor de entrada: Livre
Local: aqui

Qualquer dúvida só mandar um e-mail para: eduardo.bregaida@gmail.com

30 de agosto de 2007

Vaga na Senior Solution

Agradeço a abertura para divulgação de nossas das vagas e aproveito para lhe encaminhar o perfil que estamos procurando; caso tenha indicações, serão muito bem vindas.

Cargo

Analistas de Desenvolvimento Java PL ou SR

Empresa

Instituição Financeira

Local

São Paulo - SP

Prazo e modalidade de contratação

Indeterminado / PJ

Experiência

No mínimo 3 anos

Requisitos

Linguagens e Tecnologias: Domínio em JAVA (J2EE, TomCat, JBoss, JSP, Servlet, Struts, Spring, Hibernate, Ant, Eclipse, JSTL, Velocity, Xdoclet, Junit).
Bancos de Dados e Metodologias: Sybase, MS SQL Server;
Plataformas: Windows
Desejável: Certificação SUN, foramação superior

Diferencial: Conhecimento em Mercado Financeiro

Caso tenham indicações nos perfis citados, peço que encaminhem para o seguinte e-mail : natalia.ventura@seniorsolution.com.br com o Título: "JAVA "

Enquete: Qual Framework você gosta mais?

Bom essa enquete foi maior que a primeira, teve 87 votos.
Em primeiro lugar ficou JSF com 36%, em segundo lugar por incrível que pareça ficou com Struts 1.X, em terceiro lugar ficou Mentawaii, em quarto colocado outros frameworks, a quinta posição com Struts 2 e a sexta com VRaptor, por incrível que pareça, WebWork não teve votos, particularmente não conheço, será que é tão ruim assim para nenhuma das 87 pessoas gostar dele? rs
Bom vamos para mais enquetes aqui no Java Anywhere.

27 de agosto de 2007

JUST JAVA 2007

Pessoal só pra lembrar a JustJava está chegando e vai ser um evento muito rico em informações e aprendizado. Quem puder ir não pense 2 x, faça a inscrição (descontos especiais para universitários) http://www.sucesusp.org.br/eventos2007/justjava07/. Nós do Java Anywhere estaremos lá presenciando esse maravilhoso evento e fazendo uma matéria completa dos 3 dias para vocês.Um de nossos membros Eduardo Bregaida, estará ministrando a palestra de produtividade com JavaServer Faces.Conto com a presença de todos Javeiros. Prepare seu notebook e sua mochila e vamos nessa. Um grande abraço e fiquem com Deus!

The Developer's Conference 2007

A Globalcode está lançando uma nova conferência totamente focada em Java Enterprise Edition que acontecerá nos dias 14 e 15 de setembro e o SouJava também está apoiando mais esse evento este ano.
Com palestras diferenciadas preparadas por nosso núcleo técnico você poderá se atualizar com o que há de melhor para o desenvolvimento Web e não Web.
A grade foi organizada para compor uma sequencia ideal de assuntos sobre Java EE: UML, design patterns, ferramentas, persistência, EJB, user-interface, JSF, AJAX, integração, segurança e futuro.
Convidado Especial: Ed Burns, um dos maiores especialistas em JavaServer Faces e Ajax do mundo. Engenheiro da Sun dos Estados Unidos, líder da especificação JavaServer Faces no JCP.
http://www.thedevelopersconference.com.br/

23 de agosto de 2007

HiberObjects: Plugin do Eclipse para JPA

HiberObjects é um plugin para o Eclipse que permite criar as classes para persistência de dados usando a implementação do Hibernate para a Java Persistence API. Essas classes modelam-se visualmente e o plugin se encarrega de gerar as classes e os arquivos de configurações necessários. Também permite gerar as classes de testes (test units) com JUnit de forma automática.

Fonte: PortalJava

21 de agosto de 2007

Tutorial Facelets

Olá a todos, este é o primeiro tutorial que aborda o assunto de Facelets aqui no JavaWora. Acredito que todos que gostam de Java Server Faces estão super acostumados com a tecnologia, mas aqueles que usavam Struts e html puro, uma vez no mundo do JSF, uma das principais dificuldades (contornáveis é claro) era compreender a lógica das tags que de certa forma se distância do HTML convencional, o que eu até discordo em partes, afinal acho que um <html:text/> não se aproxima tanto de <input type=”text”/>, mas tudo bem, sabemos que da mesma forma aprender Struts não é uma tarefa das mais fáceis. Enfim vamos ao que interessa.

Um dos pontos que mais desagrada empresas que vão utilizar JSF é a distância do HTML convencional, portanto uma dificuldade de que designers possam efetuar atualizações, manutenções e coisas do gênero em uma página, pois bem, para “simplificar” toda essa dificuldade, foi desenvolvido uma tecnologia chamada de Facelets, aqueles que já viram o Tapestry verão muitas semelhanças, apontada como uma das inspiradoras para o Facelets.
No Tapestry utilizávamos a palavra chave jwcid (Java Web Component Id), para que o Framework substituísse aquele conteúdo por um componente desejado, e eis que apresento a palavra mágica do Facelets: jsfc (Java Server Faces Component). Não se engane isso não é uma cópia descarada, mas uma inspiração do primo de JSF, mas qual a mágica de tal palavrinha no caso de Facelets?O que ganhamos com isso?

Imagine o seguinte, você recebe a pagina HTML do designer, e você tem que alterar tudo aquilo, porque é tudo diferente do que você usa. Seus problemas acabaram! Basta você por uma palavrinha mágica em componentes, por exemplo:

<input type=”text”/>
Adicione:

<input type=”text” jsfc=”h:inputText” value=”#{cadastro.nome}”/>

Mágico, não acham? Um reaproveitamento de código maravilhoso e louvável. Outro ponto que nos interessa em reaproveitamento é a criação de um template, tiles é um bom framework mas deixa a desejar em alguns pontos. Com Facelets podemos definir um template declarativamente, de forma que a página sabe em qual template está inserida, reduzindo o esforço para descobrir seus componentes.
Para criar um template apenas devemos assinar os componentes da página por meio de <ui:insert name="menu"> dentre as tags do facelets, caso queiramos inserir o conteúdo de um html naquele tag na página que define o template, utilizamos então: <ui:include src="/templates/menu.xhtml"/>. No momento em que vamos utilizar um determinado template numa página, basta declará-lo: <ui:composition template="/templates/common.xhtml">, e inserir o que estmos sobrescrevendo por meio de <ui:define name="body">conteúdo</ui:define> no espaço delimitado pelas tags em conteúdo. Mais uma vez, simples, muito simples. O Facelets ainda possui componentização, Ájax integrado, dentre outras funcionalidades, mas vamos nos focar no core aqui, que é templates e reaproveitamento de html original.
O suporte de IDES ao Facelets ainda é fraco, o NetBeans possui um suporte, já no universo eclipse, temos o Exadel e agora o novíssimo Red Hat Developer Studio, os melhores na minha opinião. O exemplo deste tutorial foi desenvolvido com a implementação da Sun e no tomcat 5.5, no tomcat 6 algumas mudanças são necessárias. Os jars necessários são:

  • common-annotations.jar
  • commons-beanutils.jar
  • commons-collections.jar
  • commons-digester.jar
  • commons-logging.jar
  • el-api.jar
  • el-ri.jar
  • jsf-api.jar
  • jsf-facelets.jar
  • jsf-impl.jar
  • jsf-tlds.jar
  • jstl.jar
  • standard.jar





O web-xml necessário está na Figura 1. Criaremos três Classes para nossa lógica, são elas:

Listagem 1 – Login.java

package br.com.facelets.bean;
public class Login {
private String userName;
private String senha;
public Login() {
}
//sets e gets omitidos
@Override
public int hashCode() {
final int PRIME = 31;
int result = 1;
result = PRIME * result + ((senha == null) ? 0 : senha.hashCode());
result = PRIME * result + ((userName == null) ? 0 : userName.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final Login other = (Login) obj;
if (senha == null) {
if (other.senha != null)
return false;
} else if (!senha.equals(other.senha))
return false;
if (userName == null) {
if (other.userName != null)
return false;
} else if (!userName.equals(other.userName))
return false;
return true;
}
}



Listagem 2 – Cadastro.java

package br.com.facelets.bean;
import javax.faces.context.FacesContext;
import br.com.facelets.business.CadastroSaver;
public class Cadastro {
private String nome;
private String senha;
private String userName;
public String getLogin() {
return userName;
}
public void setLogin(String login) {
this.userName = login;
}
//sets e gets omitidos
public String salvar(){
Login login = new Login();
login.setUserName(userName);
login.setSenha(senha);
CadastroSaver.salvar(login, this);
return "ok";
}
public String logar(){
Login login = new Login();
login.setUserName(userName);
login.setSenha(senha);
Cadastro cadastro = CadastroSaver.busca(login);
if(cadastro!=null){
FacesContext.getCurrentInstance().getExternalContext()
.getSessionMap().put("user", cadastro);
return "ok";
}else{
FacesContext.getCurrentInstance().getExternalContext()
.getRequestMap().put("erro", "login/senha inválidos");
return "erro";
}
}
}



Listagem 3 – CadastroSaver.java

package br.com.facelets.business;
import java.util.Hashtable;
import br.com.facelets.bean.Cadastro;
import br.com.facelets.bean.Login;
public class CadastroSaver {
private static final Hashtable saver = new Hashtable();
public static void salvar(Login login,Cadastro cadastro){
saver.put(login, cadastro);
}
public static Cadastro busca(Login login){
return saver.get(login);
}
}


E agora o faces-config e as páginas propriamente ditas.
Listagem 4- faces-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
<managed-bean>
<managed-bean-name>cadastro</managed-bean-name>
<managed-bean-class>br.com.facelets.bean.Cadastro</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>nome</property-name>
<property-class>java.lang.String</property-class>
<value/>
</managed-property>
<managed-property>
<property-name>login</property-name>
<property-class>java.lang.String</property-class>
<value/>
</managed-property>
</managed-bean>
<navigation-rule>
<from-view-id>/pages/dados.xhtml</from-view-id>
<navigation-case>
<from-outcome>ok</from-outcome>
<to-view-id>/pages/inputname.xhtml</to-view-id>
<redirect/>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/pages/login.xhtml</from-view-id>
<navigation-case>
<from-outcome>ok</from-outcome>
<to-view-id>/pages/greeting.xhtml</to-view-id>
<redirect/>
</navigation-case>
<navigation-case>
<from-outcome>erro</from-outcome>
<to-view-id>/pages/login.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
<application>
<view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
<resource-bundle>
<base-name>resources</base-name>
<var>msg</var>
</resource-bundle>
<message-bundle>resources</message-bundle>
</application>
</faces-config>





Listagem 5 – menu.xhtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<body bgcolor="#ffffff">
<table style="border:1px solid #CAD6E0" align="center" cellpadding="0" cellspacing="0" border="0">
<tbody>
<tr>
<td colspan="2" valign="bottom" height="1" bgcolor="#CAD6E0">
<table>
<tr>
<td>
<a href="dados.jsf">Incluir dados</a>
</td>
</tr>
<tr>
<td>
<a href="login.jsf">Login</a>
</td>
</tr>
</table>
</td>
</tr>
</tbody>
</table>
</body>
</html>



Listagem 6 – common.xhtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<span jsfc="f:loadBundle" basename="resources" var="msg"/>
<head>
<title>
<ui:insert name="pageTitle">JavaWora</ui:insert>
</title>
<style type="text/css">
body {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 14px;
}
.header {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 18px;
}
.bottom {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 9px;
text-align: center;
vertical-align: middle;
color: #8E969D;
}
</style>
</head>
<body bgcolor="#ffffff">
<table style="border:1px solid #CAD6E0" align="center" cellpadding="0" cellspacing="0" border="0" width="400">
<tbody>
<tr>
<td class="header" align="center" valign="middle" width="100%" bgcolor="#E4EBEB">
<ui:insert name="pageHeader">JavaWora Facelets</ui:insert>
</td>
</tr>
<tr>
<td height="1" width="100%" bgcolor="#CAD6E0"></td>
</tr>
<tr>
<td width="100%">
<table width="100%" style="height:150px" align="left" cellpadding="0"
cellspacing="0" border="0">
<tbody>
<tr>
<td align="center" width="10%" valign="middle">
<ui:insert name="menu">
<ui:include src="/templates/menu.xhtml"/>
</ui:insert>
</td>
<td align="center" width="75%" valign="middle">
<ui:insert name="body">Page Body</ui:insert>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td colspan="2" valign="bottom" height="1" width="100%" bgcolor="#CAD6E0"></td>
</tr>
</tbody>
</table>
</body>
</html>



Listagem 7 – cadastro.xhtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
template="/templates/common.xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Cadastro</title>
</head>
<ui:define name="body">
<form jsfc="h:form" id="cadastro">
<table>
<tr>
<td>Nome*:</td>
<td>
<input type="text" jsfc="h:inputText" value="#{cadastro.nome}" id="nome" label="#{msg.lbl.nome}" required="true" requiredMessage="#{msg.erroRequired}"/>
</td>
<td><h:message for="nome" id="erroNome"></h:message> </td>
</tr>
<tr>
<td>login*:</td>
<td>
<input type="text" jsfc="h:inputText" value="#{cadastro.login}" id="login" label="#{msg.lbl.login}" required="true" requiredMessage="#{msg.erroRequired}"/>
</td>
<td><h:message for="login" id="erroLogin"></h:message> </td>
</tr>
<tr>
<td>senha*:</td>
<td>
<input type="text" jsfc="h:inputSecret" value="#{cadastro.senha}" id="senha" label="${msg.lbl.senha}" required="true" requiredMessage="#{msg.erroRequired}"/>
</td>
<td><h:message for="senha" id="erroSenha"></h:message> </td>
</tr>
<tr>
<td>Estado Civil:</td>
<td>
<select jsfc="h:selectOneMenu" value="#{cadastro.idEstado}" id="eCivil" label="#{msg.lbl.estadoCivil}">
<option jsfc="f:selectItem" itemValue="1" itemLabel="Casado"></option>
<option jsfc="f:selectItem" itemValue="2" itemLabel="Solteiro"></option>
<option jsfc="f:selectItem" itemValue="3" itemLabel="Divorciado"></option>
</select>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="Salvar" jsfc="h:commandButton" action="#{cadastro.salvar}"/>
</td>
</tr>
</table>
</form>
</ui:define>
</ui:composition>



Listagem 8 – inputname.xhtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jstl/core">
<ui:composition template="/templates/common.xhtml">
<ui:define name="pageTitle">
Bem Vindo
</ui:define>
<ui:define name="pageHeader">
Home
</ui:define>
<ui:define name="body">
${msg.prompt}
</ui:define>
</ui:composition>
</html>



Listagem 9 – greeting.xhtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<f:loadBundle basename="resources" var="msg" />
<ui:composition template="/templates/common.xhtml">
<ui:define name="body">
#{msg.greeting} <span jsfc="h:outputLabel" value="#{sessionScope.user.nome}"/>!
</ui:define>
</ui:composition>
</html>



Listagem 10 – login.xhtml



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
template="/templates/common.xhtml">
<ui:define name="body">
#{erro}
<form jsfc="h:form" id="login">
<table>
<tr>
<td>Login:</td><td><input jsfc="h:inputText" value="#{cadastro.login}" type="text"/></td>
</tr>
<tr>
<td>Senha:</td><td><input jsfc="h:inputSecret" value="#{cadastro.senha}" type="password"/></td>
</tr>
<tr>
<td colspan="2" align="center">
<input jsfc="h:commandButton" action="#{cadastro.logar}" type="submit" value="OK"/>
</td>
</tr>
</table>
</form>
</ui:define>
</ui:composition>



Experimente abrir a pagina de login no firefox, ie, ou qualquer ferramenta WYSIWYG (acho q é isso) e veja que os parametros estão lá, até a pagina, mas como isso é possível? Ora como eu disse trata-se de uma página simples xhml, a propósito podemos trabalhar com xhtml diretamente em facelets, ou mesmo jsps, mas xhtml é mais legal. A aplicação consiste em efetuar um cadastro e logo após um login para verificar se os dados foram armazenados.
Agora vamos as curiosidades. Conforme observado no web.xml, há dois listeners registrados, eles são necessários para o Tomcat 5.5, pois o compilador utilizado no facelets não é o Jasper que vêm nele, mas um próprio.
No web.xml observe a sentença:


<context-param>
<param-name>facelets.DEVELOPMENT</param-name>
<param-value>true</param-value>
</context-param>

Cause um erro em uma página e observe o que ocorre, figura 2:






O compilador descreve o erro e lhe auxilia com a arvores de componentes gerada e os dados do que estavam presentes. Legal né! Pois agora troque a sentença para false. Você verá que o erro agora é apresentado como na figura 3. Bonito não?!







Obrigado e até mais!

Projeto Lumpa



O Lumpa é um sistema de relacionamento semelhante ao Orkut ou o Via6, o que o torna diferente é que é um sistema 100% profissional.
Um sistema que você cadastra seu currículo, e adiciona pessoas, as pessoas podem recomendar você.
Foi criado pelo pessoal da Caelum, tem uma idéia bem legal, ainda está na versão beta, está com alguns bugs, mas muitas pessoas e empresas estão cadastrados.
Vale a pena dar uma conferida.

Site de Empregos Grátis

O projeto WayJobs é um site para anúncio de vagas e CVs de TI 100% gratuíto.
Muito bom para se cadastrarem.

Desenvolvido por um programador que participa do GUJ vale a pena ser visitado.

Vaga na BR Express

A empresa BR express está contratando DESENVOLVEDORES JAVA em todos os níveis: estagiários, recém-formados e com experiência.
A empresa A BR express é uma empresa de desenvolvimento de software altamente inovadora, líder em seu segmento no Brasil, e possui escritórios em São Carlos e São Paulo.

Requisitos
========
– Conhecimento de pelo menos uma linguagem de programação orientada a objeto;
– Conhecimento em desenvolvimento de software para internet .

Desejável (não obrigatório)
====================
– Experiência com projetos em Java para a internet;
–Certificação emitida pela Sun Microsystems .

Benefícios
=======
– Horário flexível
- Contratação imediata
– Plano de Carreira
– Remuneração acima da média de mercado

Os estudantes que se interessarem pelas oportunidades deverão enviar curriculum-vitae para rh@brexpress.com.br até 30/08/2007.

20 de agosto de 2007

5 anos de GUJ - Grupo de Usuários Java




Este mês o GUJ - Grupo de Usuários Java, o maior fórum em português de Java completará 5 anos de existência, participo do GUJ desde o dia 13/11/2003 e é com muito carinho que vejo aquele fórum crescendo cada dia mais.
Os membros do Java Anywhere também são membros do GUJ ajudando pessoas e também tirando dúvidas.

Hoje o GUJ conta com 350 mil mensagens e quase 30 mil usuários.

Nós do Java
Anywhere esperamos que o GUJ continue crescendo e ampliando sua rica fonte de conhecimento.

O GUJ sofreu algumas alterações entre o JForum 1 e 2, atualmente sofrerá outra que tornará possível o uso do Hibernate, VRaptor, JSP e Lucene. Também um novo sistema de gerenciamento de artigos.

O tópico do aniversário do GUJ pode ser encontrado aqui.

Desejamos um feliz aniversário para o GUJ e muito mais usuários para os próximos anos.

16 de agosto de 2007

Oportunidade - Estágio

A WBA Informática Ltda. -- conceituada no segmento de factoring -- está contratando desenvolvedores Delphi. Há também oportunidade para estágio na área de TI para atuar em suporte à família Windows.Para desenvolvedores delphi encaminhar e-mail com o curriculum para alex@wba.com.br. Para estágio enviar curriculum para paledzki@wba.com.br .

Vagas de emprego na Computeasy

Oportunidade Profissional
A empresa Computeasy está oferecendo as seguintes oportunidades profissionais:
Técnico de Cabeamento=================Para trabalhar Externo – Masculino – Ensino Médio Completo. Com experiência em elétrica baixa tensão, cabeamento estruturado, experiência em manuseio de ramais PABX, fibras ópticas.
Auxiliar Técnico de Cabeamento======================Para trabalhar Externo – Masculino – Ensino Médio. Com experiência em elétrica baixa tensão, conhecimento em cabeamento estruturado, manuseio de ramais PABX e fibras ópticas.
Analista de Sistemas================Profissional com experiência em Programação VB e/ ou Delphi. Experiência em querys de SQL e implantação de sistemas. Desejável conhecimento em Folha de Pagamento, sistema ERP. Para trabalhar no interior de São Paulo e outros estados.
Os estudantes interessados devem enviar currículo para:
smadruga@computeasy.com.br e arianne.vieira@computeasy.com.br
Colocar no título o nome da vaga.

15 de agosto de 2007

Tata Consultancy Services - Empregos

A TCS do Brasil está abrindo 334 Vagas na área de desenvolvimento no qual poderão ser vistas aqui.

Cadastre seu Currículo no site da Tata Consultancy Services.

Quando EJB é apropriado.

Estava lendo um artigo no site www.theserverside.com e achei bem interessante um artigo explicava quando usar EJB e alguns benefícios comparado a utilização de classes Java.

Em resumo:

* EJB é bom se utilizar quando você quer uma aplicação totalmente distribuída.
* Há um grande proveito dos serviços oferecido pelos middlewares como: pool, transações, segurança, persistência gerenciada pelo container, cache entre outros.
* Utilizar o mesmo EJB em diferentes sistemas através do reuso, chamando remotamente.
* Se você precisa da proteção da sua lógica de negócios você pode fazer o deploy do seu web-server e do seu aplication server em máquinas separadas e colocar um firewall no meio.

Maiores informações você pode encontrar no link citado acima, vale a penas ler, pois, citei algumas coisas e tem também o porque de não usar no artigo.

[]'s

Vagas para Programadores

Bom dia a todos, estou com 3 oportunidades em Santo André para trabalhar em uma empresa grande, mas, não é com Java.

Requisitos: Saber lógica de programação apenas.

Vagas: 3
Salário: 3.000,00 PJ

Descrição: Os programadores vão aprender a trabalhar com Clarify, não precisam conhecer a tecnologia.

meu e-mail: albertopneto@gmail.com
Assunto: CV Clarify

[]'s

13 de agosto de 2007

The best of the best practices - Java EE aplications.

A Big Blue divulgou em Janeiro passado um documento falando sobre as melhores práticas de mercado para aplicações Java EE.

Segue abaixo a lista com as 19 top best practices elencadas por eles

A materia completa está disponível em

http://www.ibm.com/developerworks/websphere/techjournal/0701_botzum/0701_botzum.html


The best of the best practices
1. Always use MVC.
2. Don't reinvent the wheel.
3. Apply automated unit tests and test harnesses at every layer.
4. Develop to the specifications, not the application server.
5. Plan for using Java EE security from Day One.
6. Build what you know.
7. Always use session facades whenever you use EJB components.
8. Use stateless session beans instead of stateful session beans.
9. Use container-managed transactions.
10. Prefer JSPs as your first choice of presentation technology.
11. When using HttpSessions, store only as much state as you need for
the current business transaction and no more.
12. Take advantage of application server features that do not require
your code to be modified.
13. Play nice within existing environments.
14. Embrace the qualities of service provided by the application server
environment.
15. Embrace Java EE, don't fake it.
16. Plan for version updates.
17. At all points of interest in your code, log your program state using a
standard logging framework.
18. Always clean up after yourself.
19. Follow rigorous procedures for development and testing.

Hibernate Composite ID

Bom dia galera, depois de algum tempo hoje irei postar um exemplo de hibernate usando chave composta....

Primeiramente vamos a tabela:

Permissoes
usuario #
grupo #
centro_de_custo #

# chaves compostas

Agora vamos mapear isso usando hibernate annotations com jpa.

Classe Permissoes:

@Entity
@Table(name = "permissoes")
@IdClass(PermissoesPk.class)
public class Permissoes implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@Column(name = "usuario")
private String usuario;

@Id
@Column(name = "grupo")
private String grupo;

@Id
@Column(name = "centro_de_custo")
private int centroDeCusto;

// gets e sets

}

Criaremos então uma nova classe que contém essas chaves:

@Embeddable
public class PermissoesPk implements Serializable {

private static final long serialVersionUID = 1L;

private String grupo;

private String usuario;

private int centroDeCusto;

// gets e sets

}

De acordo com a documentação para fazer um mapeamento de chaves compostas a classe que contém o nome com final PK deve sobreescrever o método equals e hascode e também implementar Serializable.

Na documentação do hibernate tem outras duas formas de mapeamento usando @Id ou @EmbeddedId.

Veja este exemplo usando @Id:

@Entity
public class RegionalArticle implements Serializable {

@Id
public RegionalArticlePk getPk() { ... }
}

@Embeddable
public class RegionalArticlePk implements Serializable { ... }

Veja este exemplo usando @EmbeddedId:

@Entity
public class RegionalArticle implements Serializable {

@EmbeddedId
public RegionalArticlePk getPk() { ... }
}

public class RegionalArticlePk implements Serializable { ... }


esses exemplos são para guardar, futuramentem precisarei com ctz.

mais exemplos siga:
http://www.hibernate.org/hib_docs/annotations/reference/en/html_single/#d0e1659

[]'s

Factory Method

Bom dia, hoje postarei algo sobre o padrão Factory Method, vamos lá...

Design Pattern: São uma coleção de padrões de desenho de software, que são soluções de problemas ocorridos no dia a dia de desenvolvimento de um software (são boas idéias).

Factory Method: este padrão é bem recomendado como por exemplo quando você utiliza vários tipos de bancos de dados em seu projeto, ele é uma fábrica que retorna uma das várias fábricas.


Vamos para um exemplo prático: Criarei uma factory para retornar um dos vários objetos DAO's do meu projeto, considere o seguinte diagrama:










Segue a implementação no código deste diagrama:

Esta classe abstrata é a Factory que retorna instancia de outras factories:

public abstract class DAOFactory {

public abstract UserDAO getUserDAO();

public static DAOFactory getInstance(int whichFactory) {
switch (whichFactory) {
case 1:
return new MySqlUserDAOFactory();
case 2:
return new PostgresUserDAOFactory();
default:
return null;
}
}
}

Factory para MySql
public class MySqlUserDAOFactory extends DAOFactory {

@Override
public UserDAO getUserDAO() {
return new MySqlUserDAO();
}
}

Factory para Postgres
public class PostgresUserDAOFactory extends DAOFactory {
@Override
public UserDAO getUserDAO() {
return new PostgresUserDAO();
}
}

Interface UserDAO, contém os métodos que os DAO's devem implementar.
public interface UserDAO {
public void save(Object o);
}

DAO para MySQL
public class MySqlUserDAO implements UserDAO {
public void save(Object o) {
// TODO Auto-generated method stub
}
}

DAO para Postgres
public class PostgresUserDAO implements UserDAO {
public void save(Object o) {
// TODO Auto-generated method stub
}
}

Vamos ver como chamariamos as nossas classes:

public static void main(String[] args) {
DAOFactory daoFactory = DAOFactory.getInstance(1);
// retorna a factory para MySql
UserDAO userDAO = daoFactory.getUserDAO();
userDAO.save(new Object());

DAOFactory daoFactory2 = DAOFactory.getInstance(2);
// retorna a factory para Postgres
UserDAO userDAO2 = daoFactory2.getUserDAO();
userDAO2.save(new Object());
}

Com isso a nossa implementação termina, um detalhe importante que deve-se notar é que se por um acaso um dia sua empresa decicidir incluir o oracle basta apenas criar uma nova factory OracleUserDAOFactory e estender a classe DAOFactory e pronto, com esse padrão fica muito flexível incluir e excluir qualquer nova implementação.


É isso ae...

[]'s

Hibernate


Eae galera.....

Vou começar com um breve tutorial de Hibernate:

Primeiramente estarei explicando alguns conceitos que estão relacionados com frameworks de persistência:

Um framework de persistência deve prover algumas funcionalidades e serviços para ser considerável a utilização do mesmo, citarei alguns seviços e funcionalidades referente a framework de persistência, em nosso exemplo do Hibernate.

· Controle transacional: o framework deve permitir rollback quando ocorrer algum erro e commit quando o objeto for persistido com sucesso.
· Identificadores de objeto: cada objeto de ter um identificador único para ser relacionado com o registro correspondente. Um OID (Object Identifier) garante que o objeto não se duplicará.
· Mapeamento O-R: se não utilizar um banco de dados orientado a objetos deve existir um mapeamento de objeto relacional entre a classe e a tabela do banco de dados isso é um dos requisitos principais de um framework de persistência de objetos é responsável por transformar uma representação de dados não orientada a objetos em um objeto e por armazenar um objeto persistente no seu mecanismo de persistência como um banco de dados, por exemplo.
· Cache: com o uso do cache o objeto é colocado em uma memória local para obter um maior desempenho, quando for necessário o uso desse objeto basta apenas buscá-lo na memória local que ele foi colocado agilizando todo o processo.
· Consultas sob demanda: os objetos são carregados apenas quando necessário evitando que registros sejam recuperados, todos de uma vez só. Com isso reduz a carga de informações na rede, se sua aplicação for utilizada através de internet este recurso garante um melhor desempenho.
· Proxy: é um objeto proxy de forma que o usuário e o serviço de persistência conseguem identificar. Assim quando um objeto for carregado apenas as informações definidas pelo objeto proxy serão recuperadas.
· Queries: utilizado para consultas mais complexas, isto pode ser feito através de OQL (Object Query Language) que é uma linguagem de consulta a banco de dados orientados a objetos ou também embutindo código SQL (Structure Query Language) na aplicação, pois isto não é muito recomendado porque acopla a estrutura do banco de dados com a sua aplicação.
. Portabilidade: um framework de persistência deve ser compatível com vários tipos de mecanismos de persistência de dados e também disponibilizar diversas maneiras de conexão, sendo isso muito importante porque quando for necessário trocar de mecanismo de persistência de dados não é necessário mudar toda sua aplicação.


Então o que é Hibernate ? Quais as vantagens de utilizar ? Quais desvantagens ?

Hibernate é um framework de persistência que permite a utilização de banco de dados relacional, porém, trabalhando com objetos, falar isso apenas é muito pouco
para o que o Hibernate pode fazer...
Uma das vantagens de utilizá-lo é que o desenvolvimento de aplicação se torna mais rápido, por não ter que escrever códigos e mais códigos SQL da vida... A idéia do
hibernate é encapsular todo o código SQL Jdbc por tráz de sua implementação, ficando transparente para o desenvolvedor.
Uma das desvantagens do hibernate é que para criar algumas queries bem complexas deve-se perder um tempo maior estudando as Criterias da vida!!!! São um pouco
complexas...
Outra desvantagen que eu considero é colocar milhões de jar's em sua aplicação, porém uma vez configurado não é preciso mexer novamente.


Exemplo:

Tudo isso:
INSERT INTO agendaadmissao (codigoagenda, nomecandidato, matriculacoordenador, codigocurso, data, status)
VALUES("1", "João da Silva Dias", "p100", "2", "2007-06-28 19:40:00", "P");

por isso:
session.save(objeto); // uau em uma linha!!!!

O hibernate permite ainda ir mais além, com apenas essa linha citada acima ele salva também todos os relacionamentos, para isso basta apenas configurar
uma propriedade chamada de Cascade, temos alguns tipos de cascade como:
ALL = persiste o objeto pai mais todos os filhos, cuidado ao utilizar pois se você deletar um objeto pai e tiver com essa propriedade tudo vai pro espaço...
None = este é o default, as operações relacionadas ao objeto pai apenas sofrerão alguma mudança nele mesmo em mais ninguém.
Save Update = onde o objeto pai pode salvar ou atualizar os filhos.
Persist = Apenas para operações de save.
All delete orphan = a partir do objeto pai ele deleta os filhos.


O Hibernate possui algumas interfaces importantes que vale a pena ser descrito, então vamos lá:


1º Interface de sessão (Session): Sessão (Session) é a interface primária do Hibernate, é de peso leve e mais fácil de criar e destruir. O objeto Session, por ser leve, ajudará na sua aplicação porque há uma grande necessidade de criar e destruir objetos Session há quase todo instante. As sessões não são Threadsafe, ou seja, uma Sessão do Hibernate é algo entre conexão e transação. Pode ser um armazenamento ou coleção de objetos numa única unidade de trabalho, podendo ser chamada de gerente de persistência, que faz a interface com operações relacionadas com a persistência, armazenando e recuperando objetos.

2º Interface SessionFactory: a interface SessionFactory não é considerada peso leve, sendo compartilhada entre muitas threads. Para a SessionFactory há um único aplicativo, criado na inicialização. Se seu aplicativo for acessar bancos de dados múltiplos usando Hibernate, é necessário uma SessionFactory para cada banco de dados. Esta interface controla dados armazenados e que foram lidos em uma unidade de trabalho, podendo ser reutilizados em uma unidade futura. Isso se o mapeamento de classe especificar o armazenamento do segundo nível. Geralmente a SessionFactory armazena instruções SQL (Structured Query Language), e outros metadados que são executados em tempo de execução.

3º Interface de Configuração: Segundo Bauer, King (2005, p. 39), a interface de configuração vai ser a primeira a ser encontrada quando você usar o Hibernate. Essa interface é muito importante porque depois de configurada, o Hibernate vai criar o SessionFactory.

4º Interface de Transação: é uma API (Application Programming Interface) opcional do Hibernate uma transação permite controlar os limites das transações usando uma API consistente com isso tornam-se portáveis os aplicativos do Hibernate com ambientes diferentes de execução.

5º Consulta e critérios de interfaces: a interface de consulta e critério serve para executar consultas no banco de dados. As consultas são feitas “escritas” em SQL(Structured Query Language) de seu banco de dados, para ligar parâmetros de consultas e limitar o número de resultados devolvidos pela consulta.

Vamos para o que interessa, criar um exemplo simples:

Vamos supor que estamos desenvolvendo um cadastro de cliente, (por enquanto, sem relacionamento):

Temos então:

Tabelas:

DROP TABLE IF EXISTS `cliente`;
CREATE TABLE `cliente` (
`nome` varchar(30) default NULL,
`id_cliente` int(9) NOT NULL auto_increment,
PRIMARY KEY (`id_cliente`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Para cada tabela dessa temos um Objeto chamado de Objeto ORM (Mapeamento de Objeto Relacional), ou seja o mapeamento das suas classes.

Essa é uma classe simples JavaBean com método get e set, a partir desta classe que faremos o mapeamento:



/**
* @author alberto ribeiro
*/
public class Cliente {
private int id;
private String nome;
get's e set's
}

Para a criação da aplicação alguns jar's terão que ser incluidos no classpath do projeto:

Hibernate3.jar: core do Hibernate.
c3p0-0.8.4.5.jar: Pool de conexão básico para executar testes unitários.
cglib-full-2.0.2.jar: biblioteca geradora de código para criação de proxies para classes persitentes.
dom4j-1.4.jar: biblioteca XML para parse de arquivos de configuração e mapeamento.
ecache-0.9.jar: cachê puro em Java, cachê padrão do Hibernate.
jta.jar: Java Transaction API.
commons-loging-1.0.4.jar: base para o mapeamento de produtos objeto relacional
commons-collections-2.1.1: contém as listas como bag, array list entre outros tipos de listas.
ojdbc.jar: jar do fabricante do bando de dados

Abaixo o mapeamento ORM, da classe Cliente, chamaremos de ClienteORM.hbm.xml:




Neste mapeamento vale ressaltar algumas propridades:

class name = é o relacionamento da tabela com a classe, sendo que o atributo name deve conter o nome completo do objeto incluindo o pacote e o atributo table deve conter o nome da tabela.

table = nome da tabela referente a classe.

id = nome do campo id dentro da classe cliente

column = "id_cliente" = referente ao nome da coluna no banco de dados.

type = o tipo da propriedade no caso id_cliente é um int.

generator = referente ao esquema de geração de ID no banco de dados, o native indica que o banco se encarregará de gerar este número sequencial.

property = a propriedade da classe, exemplo: nome e seu tipo string.


Depois de ter as classes mapeadas em um arquivo xml, temos então que configurar o hibernate.cfg.xml que será responsável
por algumas propiedades importantes de configuração:



Vale ressaltar as seguintes propridades:

dialect = responsável pela geração das intruções SQL de acordo com cada Bando de Dados, ele representa a linguagem que será gerada as queries da aplicação para o banco.

connection.url = a url é específica ao banco de dados utilizado, na url passamos como parâmetros o IP da máquina ou o nome do servidor, porta e o nome da base de dados. Usuário e senha são do banco de dados

connection.driver_class = O nome do driver que estamos utilizando no caso MySQL.

connection.username = username no banco de dados.

connection.password = senha no banco de dados.

show_sql = se estiver marcado como true, todas as queries geradas serão impressas no console.

mapping resource = local onde estão os mapeamentos XML referente as classes.


Criaremos agora uma classe utilitária responsável por criar as famosas Session's do hibernate:


public class HibernateUtil {

private static SessionFactory sessionFactory;

private static Session session;

private static Logger logger = Logger.getLogger(HibernateUtil.class);

static {
sessionFactory = new Configuration().configure().buildSessionFactory();
// obs o arquivo hibernate.cfg.xml deve estar na pasta src, o hibernate procura ela la dentro
// caso queira ficar em outro lugar deve mudar aqui: new Configuration().configure("nome do pacote onde está o //arquivo").buildSessionFactory();


if (logger.isDebugEnabled()) {
logger.info("Criando a session factory");
}
}

public static Session getCurrentSession() {
if (session == null || !session.isOpen() || !session.isConnected()) {
session = ((SessionFactory) sessionFactory).openSession();
}
return session;
}

public static void closeSession() {
session.close();
}

}


Criando nosso DAO, mas antes uma breve explicação: DAO é um padrão de projetos que veio para separar a camada de modelos de dados referente a banco de dados dos modelos de objetos, caso o mecanismo de persistencia troque, modifica-se a camada DAO.
Dentro desse DAO ficará os métodos CRUD, ou seja, create, retrieve, update e delete.

ClienteDAO:

public class ClienteDAO{

public void save(Object object) throws AcessoBaseDeDadosException {
if (object == null) {
throw new AcessoBaseDeDadosException(
"O objeto à ser salvo está nulo.");
}

try {
HibernateUtil.getCurrentSession().save(object);
} catch (HibernateException e) {
throw new AcessoBaseDeDadosException("Erro persistindo o objeto: "
+ object.getClass().toString(), e);
} catch (Exception e) {
throw new AcessoBaseDeDadosException("Erro persistindo o objeto: "
+ object.getClass().toString(), e);
}
}
}

A estrutura do projeto ficou assim:

Persistencia
src
br/edu/persistencia/common/
Cliente.java
ClienteORM.hbm.xml
br/edu/persistencia/dao/
ClienteDAO.java
br/edu/persistencia/util/
HibernateUtil.java
hibernate.cfg.xml
lib
Todos os jar's citados acima.

Podemos agora fazer o teste:

public class Teste {

public static void main(String[] args) throws Exception {
ClienteDAO dao = new ClienteDAO();

Cliente cliente = new Cliente();
cliente.setNome("Alberto");

Session session = HibernateUtil.getCurrentSession(); // Pegando uma sessão, caso esteja em aberto ele apenas //retorna uma sessão corrente
Transaction tx = session.begintransaction(); // iniciando uma transação para poder inserir no banco de dados
dao.save(cliente); // chamando o método save da classe DAO
tx.commit(); // finalizando a transação.
session.close(); // fechando a sessão com o banco.
}
}

É isso ai então, depois testar, mas, acredito que esteja correto, qualquer dúvida mande!!!! Este foi o primeiro, não sei se está bom mas com o tempo isso melhora...


[]'s