Arquivo da categoria ‘MySQL’
Publicado por serjaumfantin em Setembro 15, 2009
Neste post irei demonstrar a utilização do componente rich:editor que faz parte da biblioteca de componentes RichFaces.
O rich:editor é um componente usado para a criação de um editor em páginas. Seu uso é relativamente simples e o resultado é impressionante.
A aplicação consiste num cadastro de Rascunhos onde o usuário poderá cadastrar e remover seus rascunhos de uma forma prática e simples. Para gerenciar as sessões/transações do Hibernate criei um serlvet filter Open Session In View fazendo papel de um interceptador, que será executado a cada request e response.
Utilizarei Tomcat, Hibernate e MySQL para a persistência de dados e disponilizarei o projeto para download.
Estrutura do projeto

Versões utilizadas
- Eclipse 3.4.1
- JDK 1.6
- Tomcat 6.0.18
- MyFaces 1.2.5
- RichFaces 3.3.1
- Hibernate Annotations 3.4.0
- Hibernate 3.3.1
- MySQL 5
- MySQL Query Browser 1.2
Códigos
Rascunho.java:
package br.com.serjaum.modelo;
@Entity
@Table(name="rascunho")
public class Rascunho implements Serializable{
private static final long serialVersionUID = -6142163109498247473L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="RASCUNHO_ID")
private Long id;
@Column(name="titulo")
private String titulo;
@Temporal(TemporalType.DATE)
@Column(name="data")
private Date data = new Date();
@Lob
@Column(name="conteudo")
private String conteudo;
...
}
Leia o resto deste post »
Enviado em Facelets, Framework, Hibernate, JSF, JUnit, Java, MySQL | 3 Comentários »
Publicado por serjaumfantin em Setembro 3, 2009
Neste post irei fazer a migração da nossa aplicação JSF completa utilizando RichFaces + Hibernate + MySQL na prática para Facelets.
Algumas das características do Facelets:
- Utilização do XHTML como camada de visão da aplicação;
- Permite a criação de componentes reutilizáveis;
- Aumenta a performance da aplicação de 30% até 50% comparado com JSP, pois não usa a compilação para servlet;
- Criação simplificada de templates;
- Uso de código JSF em tags HTML com o atributo jsfc (não é muito recomendado);
- Camada de visão padrão para o JSF 2.0;
Mais informações >>aqui<<.
Versões utilizadas
- Eclipse 3.4.1
- JDK 1.6
- Tomcat 6.0.18
- MyFaces 1.2.5
- RichFaces 3.3.1
- Hibernate Annotations 3.4.0
- Hibernate 3.3.1
- MySQL 5
- JUnit 4.5
- Caelum Stella 1.2
Estrutura do projeto

Leia o resto deste post »
Enviado em Facelets, Framework, Hibernate, JSF, JUnit, Java, MySQL | 8 Comentários »
Publicado por serjaumfantin em Agosto 28, 2009
Neste post irei mostrar uma das implementações de combos aninhados estados/cidades. Percebi nas listas e fóruns que esse é um problema comum, onde desenvolvedores se deparam frequentemente.
Utilizarei Tomcat, Hibernate e MySQL para a persistência de dados e disponilizarei o projeto para download com o script sql contendo a lista completa de estados/cidades brasileiras.
Para gerenciar as sessões/transações do Hibernate criei um serlvet filter Open Session In View fazendo papel de um interceptador, que será executado a cada request e response.
Estrutura do projeto

Versões utilizadas
- Eclipse 3.4.1
- JDK 1.6
- Tomcat 6.0.18
- MyFaces 1.2.5
- RichFaces 3.3.1
- Hibernate Annotations 3.4.0
- Hibernate 3.3.1
- MySQL 5
- MySQL Query Browser 1.2
Códigos
Estado.java:
package br.com.serjaum.modelo;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import org.hibernate.annotations.Cascade;
@Entity
@Table(name="estados")
public class Estado implements Serializable {
private static final long serialVersionUID = -5582648910303813488L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="ESTADO_ID")
private Long id;
@Column(name="sigla")
private String sigla;
@Column(name="nome")
private String nome;
@OneToMany(mappedBy="estado", fetch=FetchType.LAZY)
@Cascade(org.hibernate.annotations.CascadeType.ALL)
private List<Cidade> cidades = new ArrayList<Cidade>();
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getSigla() {
return sigla;
}
public void setSigla(String sigla) {
this.sigla = sigla;
}
public List<Cidade> getCidades() {
return cidades;
}
public void setCidades(List<Cidade> cidades) {
this.cidades = cidades;
}
public String toString() {
return this.nome;
}
@Override
public boolean equals(Object obj){
if( (obj instanceof Estado) && ( ((Estado)obj).getNome().equals(this.nome))){
return true;
}else {
return false;
}
}
public int hashCode(){
return this.nome.length() * 23;
}
}
Cidade.java:
package br.com.serjaum.modelo;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name="cidades")
public class Cidade implements Serializable{
private static final long serialVersionUID = -2094704997130038211L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="CIDADE_ID")
private Long id;
@Column(name="nome")
private String nome;
@ManyToOne(cascade=javax.persistence.CascadeType.ALL)
@JoinColumn(name="id_cid_est")
private Estado estado;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public Estado getEstado() {
return estado;
}
public void setEstado(Estado estado) {
this.estado = estado;
}
public String toString() {
return this.nome;
}
@Override
public boolean equals(Object obj){
if( (obj instanceof Cidade) && ( ((Cidade)obj).getNome().equals(this.nome))){
return true;
}else {
return false;
}
}
public int hashCode(){
return this.nome.length() * 23;
}
}
Leia o resto deste post »
Enviado em Framework, Hibernate, JSF, Java, MySQL | 2 Comentários »
Publicado por serjaumfantin em Agosto 27, 2009
Este é o último post referente à nossa aplicação JSF completa utilizando RichFaces + Hibernate + MySQL na prática.
Dando continuidade ao desenvolvimento da nossa aplicação, adicionarei a parte de autenticação, pois percebi nas listas e fóruns que esse é um problema comum, onde desenvolvedores se deparam frequentemente, por não se tratar de um problema trivial.
Na implementação usarei um Servlet Filter fazendo papel de um interceptador, que será executado a cada request e response. Ele verificará se o usuário pode se logar no sistema, caso contrário redirecionará o mesmo para uma página de login.
Estrutura do projeto

Códigos
AuthFilter.jsp:
package br.com.serjaum.filtro;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class AuthFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest rq = (HttpServletRequest) request;
HttpServletResponse rp = (HttpServletResponse) response;
boolean auth = rq.getSession().getAttribute("user") != null;
if (!auth && !rq.getRequestURL().toString().contains("login.jsf")) {
rp.sendRedirect(rq.getContextPath() + "/pages/login/login.jsf");
} else {
try {
chain.doFilter(request, response);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void destroy() {
}
public void init(FilterConfig config) throws ServletException {
}
}
Leia o resto deste post »
Enviado em Framework, Hibernate, JSF, JUnit, Java, MySQL | 2 Comentários »
Publicado por serjaumfantin em Agosto 25, 2009
Este é o quinto post referente à nossa aplicação JSF completa utilizando RichFaces + Hibernate + MySQL na prática.
Dando continuidade ao desenvolvimento da parte visual da nossa aplicação, adicionarei as regras de navegação, CSS, máscaras para os campos, validadores, conversores e Ajax.
Estrutura do projeto
Códigos
index.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="StyleSheet" type="text/css" href="/jsf/style/estilos.css" media="screen" />
<script type="text/javascript" src="/jsf/resources/jquery.maskedinput-1.2.1.js"></script>
</head>
<body>
<f:view>
<h:form>
<h:messages />
<fieldset>
<legend>Cadastro de Pessoas Físicas</legend>
<h:panelGrid>
<h:commandLink value="Adicionar pessoa" action="toCadastraPessoa" />
<h:commandLink value="Pesquisar pessoa" action="toPesquisaPessoa" />
<h:commandLink value="Remover pessoa" action="toRemovePessoa" />
<h:commandLink value="Atualizar pessoa" action="toAtualizaPessoa" />
</h:panelGrid>
</fieldset>
</h:form>
</f:view>
</body>
</html>
Leia o resto deste post »
Enviado em Framework, Hibernate, JSF, JUnit, Java, MySQL | Deixar um comentário »
Publicado por serjaumfantin em Agosto 19, 2009
Este é o quarto post referente à nossa aplicação JSF completa utilizando RichFaces + Hibernate + MySQL na prática.
Dando continuidade ao desenvolvimento da nossa aplicação, codificarei o Managed Bean, que é a classe que receberá as solicitações da camada de visão (JSP), e as encaminhará para a camada de Façade. Nesta etapa o sistema já entrará em funcionamento com suas operações CRUD básicas.
Estrutura do projeto

Códigos
PessoaMB.java:
package br.com.serjaum.mb;
import java.io.Serializable;
import java.util.List;
import br.com.serjaum.facade.PessoaFacade;
import br.com.serjaum.facade.PessoaFacadeImpl;
import br.com.serjaum.modelo.Pessoa;
public class PessoaMB implements Serializable {
private static final long serialVersionUID = -333995781063775201L;
private Pessoa pessoa = new Pessoa();
private Long id;
public PessoaMB(){
System.out.println(" >>>>>>>>>>>>>>>>>>>> Contrutor do PESSOA_MB <<<<<<<<<<<<<<<<<<");
if(this.pessoa == null){
this.pessoa = new Pessoa();
}
}
public String save(){
PessoaFacade pessoaService = new PessoaFacadeImpl();
pessoaService.salva(this.pessoa);
this.pessoa = new Pessoa();
return "cadastraSucesso";
}
public String delete(){
PessoaFacade pessoaService = new PessoaFacadeImpl();
this.pessoa.setId(id);
pessoaService.remove(this.pessoa);
this.pessoa = new Pessoa();
return "removeSucesso";
}
public String merge(){
PessoaFacade pessoaService = new PessoaFacadeImpl();
pessoaService.atualiza(this.pessoa);
this.pessoa = new Pessoa();
return "atualizaSucesso";
}
public String load(){
PessoaFacade pessoaService = new PessoaFacadeImpl();
this.pessoa = pessoaService.procura(this.id);
return "pesquisaSucesso";
}
public String pesquisaByNome(){
PessoaFacadeImpl pessoaService = new PessoaFacadeImpl();
this.pessoa = pessoaService.procuraByNome(this.pessoa.getNome());
return "pesquisaByNomeSucesso";
}
public List<Pessoa> getPessoas(){
PessoaFacade pessoaService = new PessoaFacadeImpl();
return pessoaService.lista();
}
public List<Pessoa> getPessoasByNome(){
PessoaFacade pessoaService = new PessoaFacadeImpl();
List<Pessoa> lista = pessoaService.pesquisaPessoasByNome(this.pessoa.getNome());
return lista;
}
public Pessoa getPessoa() {
return pessoa;
}
public void setPessoa(Pessoa pessoa) {
this.pessoa = pessoa;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}
atualizaPessoa.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<%@ taglib prefix="rich" uri="http://richfaces.ajax4jsf.org/rich"%>
<%@ taglib prefix="a4j" uri="http://richfaces.org/a4j"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<f:view>
<h:form>
<a4j:keepAlive beanName="pessoaMB" />
<fieldset><legend>Atualização de Dados</legend>
<rich:dataTable value="#{pessoaMB.pessoas}" var="fisica" rows="10" id="fisicas" width="100%" cellspacing="0" cellpadding="0" border="1">
<h:column>
<f:facet name="header">
<h:outputText value="NOME" />
</f:facet>
<h:outputText value="#{fisica.nome}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="E-MAIL" />
</f:facet>
<h:outputText value="#{fisica.email}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="CPF" />
</f:facet>
<h:outputText value="#{fisica.cpf}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="DATA NASC." />
</f:facet>
<h:outputText value="#{fisica.dataNascimento}">
<f:convertDateTime pattern="dd/MM/yyyy" />
</h:outputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="CELULAR" />
</f:facet>
<h:outputText value="#{fisica.telefoneCelular}" />
</h:column>
<h:column>
<a4j:commandLink reRender="panelGridInputs">
<h:outputText value="Atualiza"/>
<f:setPropertyActionListener value="#{fisica}" target="#{pessoaMB.pessoa}"/>
</a4j:commandLink>
</h:column>
<f:facet name="footer">
<rich:datascroller />
</f:facet>
</rich:dataTable>
<h:panelGrid columns="2" id="panelGridInputs">
<h:outputLabel for="nome" value="Nome " />
<h:inputText id="nome" value="#{pessoaMB.pessoa.nome}" style=" width : 254px;"/>
<h:outputLabel for="email" value="E-mail " />
<h:inputText id="email" value="#{pessoaMB.pessoa.email}" style=" width : 249px;"/>
<h:outputLabel for="cpf" value="CPF " />
<h:inputText id="cpf" validatorMessage="CPF inválido!" value="#{pessoaMB.pessoa.cpf}" size="60" style=" width : 106px;"/>
<h:outputLabel for="dataNasc" value="Data Nascimento: " />
<h:inputText id="dataNasc" validatorMessage="Data de nascimento com formato inválido!" value="#{pessoaMB.pessoa.dataNascimento}" size="60" style=" width : 75px;">
<f:convertDateTime pattern="dd/MM/yyyy" />
</h:inputText>
<h:outputLabel for="telCel" value="Tel. Celular " />
<h:inputText id="telCel" value="#{pessoaMB.pessoa.telefoneCelular}" />
<h:commandButton value="Salvar modificações" action="#{pessoaMB.merge}"/>
</h:panelGrid>
</fieldset>
</h:form>
</f:view>
</body>
</html>
Leia o resto deste post »
Enviado em Framework, Hibernate, JSF, JUnit, Java, MySQL | 1 Comentário »
Publicado por serjaumfantin em Agosto 18, 2009
Este é o terceiro post referente à nossa aplicação JSF completa utilizando RichFaces + Hibernate + MySQL na prática.
Dando continuidade ao desenvolvimento da nossa aplicação, codificarei a camada de Façade que é responsável por abstrair a camada de negócios, que contribuirá para a redução do acoplamento entre as camadas da aplicação. Essa camada tem a função de receber solicitações de operações e repassá-las para os métodos de negócio/persistência que estão em outras camadas, mantendo a arquitetura coerente e aumentando a manutenabilidade da aplicação.
Obs: por se tratar de um tutorial prático, preferi simplificar a aplicação adicionando a camada de Façade de uma maneira simples, por isso fiz o gerenciamento de sessões/transações dentro da classe PessoaFacadeImpl.java. O ideal seria retirar esse código de abertura/fechamento de sessões/transações e colocá-lo em um filtro, por exemplo: Open Session In View. Isso é aplicado quando utilizamos um Servlet Contêiner como o Tomcat ou Jetty, mas se o deploy for feito em um Servidor de Aplicação (JBoss, GlassFish, etc) o gerenciamento fica por conta do mesmo, daí é só alegria (ou não?!).
Estrutura do projeto

Códigos
BaseFacade.java:
package br.com.serjaum.facade;
import java.io.Serializable;
import java.util.List;
public interface BaseFacade<T> extends Serializable {
public abstract void salva(T t);
public abstract void remove(T t);
public abstract T procura(Long id);
public abstract void atualiza(T t);
public abstract List<T> lista();
}
PessoaFacade.java:
package br.com.serjaum.facade;
import java.util.List;
import br.com.serjaum.modelo.Pessoa;
public interface PessoaFacade extends BaseFacade<Pessoa>{
public void salva(Pessoa p);
public void remove(Pessoa p);
public Pessoa procura(Long id);
public void atualiza(Pessoa p);
public List<Pessoa> pesquisaPessoasByNome(String nome);
}
Leia o resto deste post »
Enviado em Framework, Hibernate, JSF, JUnit, Java, MySQL | Deixar um comentário »
Publicado por serjaumfantin em Agosto 1, 2009
Este é o segundo post referente à nossa aplicação JSF completa utilizando RichFaces + Hibernate + MySQL na prática.
Dando continuidade ao desenvolvimento da nossa aplicação, codificarei a camada DAO (Data Access Object) que é responsável por isolar a camada superior do acesso aos dados. Na maioria dos casos teremos uma classe DAO para cada classe do domínio do sistema. Na classe DAO estão os métodos fundamentais para persistência e na classe PessoaDAO temos os métodos específicos de manipulação de dados referente à classe Pessoa mais os métodos da classe DAO que são obtidos por herança.
Estrutura do projeto

Códigos
DAO.java:
package br.com.serjaum.dao;
import java.util.List;
import org.apache.log4j.Logger;
import org.hibernate.Session;
public class DAO {
private static Logger logger = Logger.getLogger(DAO.class);
private Class persistentClass;
protected Session session;
public DAO(Session session, Class persistentClass) {
this.session = session;
this.persistentClass = persistentClass;
}
@SuppressWarnings("unchecked")
public T load(Long id) {
logger.info("lendo " + persistentClass + " com id " + id);
return (T) session.load(persistentClass, id);
}
public void save(T t) {
logger.info("salvando " + t);
session.save(t);
}
public void delete(T t) {
logger.info("Deletando " + t);
session.delete(t);
}
@SuppressWarnings("unchecked")
public List list() {
logger.info("Listando todos");
return session.createCriteria(persistentClass).list();
}
public void merge(T t) {
logger.info("Salvando ou atualizando " + t);
session.merge(t);
}
}
Leia o resto deste post »
Enviado em Framework, Hibernate, JSF, JUnit, Java, MySQL | 3 Comentários »
Publicado por serjaumfantin em Julho 31, 2009
Esta é a primeira parte da nossa aplicação JSF completa utilizando RichFaces + Hibernate + MySQL na prática. Pretendo criar uma aplicação simples e ao mesmo tempo prática ilustrando situações do dia-a-dia. Utilizarei o Eclipse e o servlet contêiner Tomcat.
A aplicação é baseada em um cadastro de pessoas onde o usuário terá acesso a operações de Create/Retrieve/Update/Delete. Utilizarei máscaras, conversores, validadores e componentes com suporte a AJAX(RichFaces), CSS entre outros.
Versões utilizadas
- Eclipse 3.4.1
- JDK 1.6
- Tomcat 6.0.18
- MyFaces 1.2.5
- RichFaces 3.3.1
- Hibernate Annotations 3.4.0
- Hibernate 3.3.1
- MySQL 5
- JUnit 4.5
- Caelum Stella 1.2
- MySQL Query Browser 1.2
Estrutura inicial do projeto

Importando o projeto
- Baixe o projeto >>aqui<<;
- Descompacte o projeto no seu workspace;
- No Eclipse vá em: File –> Import –> General – Existing Projects into Workspace –> Next –> Selecione o projeto descompactado no workspace –> Finish.
Resultado

Continuarei o próximo post desenvolvendo a camada de persistência da aplicação. Até o próximo post!
Enviado em Framework, Hibernate, JSF, JUnit, Java, MySQL | 2 Comentários »