Anderson Silva

Tecnologia da informação pra quem gosta de TI

JSF – Configurando a data e hora no contexto da aplicação — 21/02/2015

JSF – Configurando a data e hora no contexto da aplicação

Vejam só! Hoje tive a brilhante ideia de adicionar um campo em meu cadastro que atualiza a data que houve a atualização no registro e para minha surpresa a exibição dessa data apareceu com 3 horas de acréscimo, embora no banco de dados estivesse correto.

Pesquisando na Net descobri que isso não era tão absurdo assim pois várias posts relatavam problema semelhante.

Como resolvi:

Adicionei no arquivo web.xml o contexto ativando o recurso de timeZone correto.

<context-param>
<param-name>javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE</param-name>
<param-value>true</param-value>
</context-param>

Após a adição desta configuração a data e hora foram exibidas corretamente.

Exemplo de código JSF indicando o timeZone
<h:outputText value=”#{mBean.dataUltimaAlteracao}”>
<f:convertDateTime dateStyle=”long” pattern=”dd/MM/yyyy HH:mm” timeZone=”America/Recife”/>
</h:outputText>

Espero que seja útil e boa implementação a todos.

Instalando aplicativo no linux — 13/02/2015

Instalando aplicativo no linux

Essa duas pequenas dicas foram passados por um colega de trabalho e que ao meu ver irá facilitar para todos aqueles que precisarem por algum motivo baixar um programa e realizar uma instalação manual posteriormente.
Dica 01: Instalando o programa:
Explicação do comando:
#sudo update-alternatives –install /usr/bin/[nome do arquivo .sh] [nome ou link para o programa] [caminho completo até o programa baixado] [número para referência a instalação do programa]

Exemplo do comando para instalação do maven após ter sido realizado o download e descompactado o arquivo.
#sudo update-alternatives –install /usr/bin/mvn mvn /home/anderson/dev/apache-maven-3.2.5/bin/mvn 1

Dica 02: Configurando as versões de um software instalado
Para o caso de ter duas versões de um mesmo programa instalado.
#sudo update-alternatives –config mvn

Espero que seja útil.

Boa implementação a todos.

Esta dica chegou até mim por @joaocarlos86

JPA + Hibernate: Criando massa de dados ao iniciar o sistema — 14/07/2014

JPA + Hibernate: Criando massa de dados ao iniciar o sistema

Boa tarde a todos,

Em alguns momentos durante o desenvolvimento de sistemas, precisamos ter o total controle dos dados inseridos em nosso sistema para que possamos por exemplo realizar teste.
Neste post irei demonstrar um recurso disponível a partir da versão 2.1 do JPA que permite que o sistema ao ser iniciado, limpe todas as tabelas do banco e execute um script sql.
O grande segredo está na execução deste script, pois a partir dele teremos o controle dos dados persistidos na base.

Primeiro passo: A linha no arquivo persistence.xml que indica ao Hibernate que deve limpar a base de dados ao iniciar o sistema é:
<property name=”hibernate.hbm2ddl.auto” value=”create”/>

Segundo passo: A linha no arquivo persistence.xml que indica o script que deverá ser executado após a criação do banco e iniciação do sistema é :
<property name=”hibernate.hbm2ddl.import_files” value=”/META-INF/sql/carregar-dados.sql” />

Obs.: O valor “/META-INF/sql/carregar-dados.sql” representa o caminho onde o script está presente.

Considerações importantes:
1. A pasta META-INF é a que fica dentro da estrutura da App.
Exemplo se for no padrão maven: /src/main/webapp/META-INF/..

2. O arquivo SQL somente será executado se o schema informado em [hibernate.hbm2ddl.auto ] for [create or create-drop]

Exemplo de script:
insert into pessoa(codigo, nome) values(1, “Anderson Silva);

Boa implementação a todos.

Formatando Calendar em String — 25/06/2014

Formatando Calendar em String

Este pequeno trecho de código converte uma variável ou propriedade de objeto que esteja configurada como Calendar para String. Segue código:

SimpleDateFormat sdf = new SimpleDateFormat(“dd/MM/yyyy”);
String data = sdf.format( contato.getDataNascimento().getTime() );
System.out.println(data);

Lembrar de importar a classe java.text.SimpleDateFormat

Boa implementação a todos.

JPA+Hibernate: Mapeando Muitos para Muitos – manyToMany — 31/01/2014

JPA+Hibernate: Mapeando Muitos para Muitos – manyToMany

Pequenos e úteis trechos de código.

O código abaixo implementa um relacionamento muitos para muitos, o que no banco de dados será convertido em mais uma tabela para expressar este relacionamento.

No caso abaixo é um relacionamento entre professor e turma, onde um professor pode estar em várias turmas e uma turma pode ter vários professores.

O código abaixo deve ser implementados na classe de turma.

@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name=”turma_professor”,
joinColumns = @JoinColumn(name=”turma_id”),
inverseJoinColumns = @JoinColumn(name=”professor_id”))
private Collection<Professor> professor;

O código abaixo deverá ser implementado na classe de professor

@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(name=”turma_professor”,
joinColumns = @JoinColumn(name=”professor_id”),
inverseJoinColumns = @JoinColumn(name=”turma_id”))
private Collection<Turma> turmas;

O resultado desta implementação no banco de dados será uma tabela chamada turma_professor com dois campos: professor_id e turma_id.

JPA+Hibernate: Mapeamento Um para Muitos – OneToMany —

JPA+Hibernate: Mapeamento Um para Muitos – OneToMany

Pequenos e úteis trechos de código

Este mapeamento representa uma associação entre as classes de turma e matricula de forma que uma turma possa ter várias matrículas associadas.

O código abaixo deverá estar na tabela de turma:

@OneToMany(mappedBy=”turma”)    /* o nome turma precisa ser o nome do atributo

na classe matrícula que representa o objeto turma*/
Collection<Matricula> matriculas;         /* Acesso a uma collection de matrículas para pesquisa*/

O código abaixo deverá estar na tabela de matrícula:

@ManyToOne
@JoinColumn(name=”turma_id”)       /* turma_id será o nome do campo no banco de dados que irá

representar a chave estrangeira na tabela de matrícula que fará

a união com a tabela de turma */
private Turma turma;

JPA+Hibernate: Anotação para campo data —
JPA+Hibernate: Mapeamento de Chave primária simples utilizando SEQUENCE —

JPA+Hibernate: Mapeamento de Chave primária simples utilizando SEQUENCE

Pequenos e úteis trechos de código.

No trecho abaixo você está criando uma sequence que vai iniciar com 1 e incrementar em 1 a cada novo registro para ser utilizada como chave primária simples ou não composta.

@Id
@SequenceGenerator(name=”nome_da_sequencia”,initialValue=1,
allocationSize=1,sequenceName=”nome_da_sequencia”)
@GeneratedValue(strategy=GenerationType.AUTO,generator=”nome_da_sequencia”)
private Long id;

JPA+Hibernate: Mapeamento entre Classe e tabela —
JPA+Hibernate: Implementando singleton para classe de conexão ao banco de dados —

JPA+Hibernate: Implementando singleton para classe de conexão ao banco de dados

Este post descreve uma classe para conexão a uma base de dados utilizando JPA.

Padrão de projeto: Singleton

Eis o código completo da classe:

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class EntityManagerSingleton {

private static EntityManager em;

private EntityManagerSingleton(){

}

public static EntityManager getInstance(){
if(em == null){
EntityManagerFactory emf = Persistence.createEntityManagerFactory(“ConexaoDB”);
em = emf.createEntityManager();
}
return em;
}

}

Boa implementação a todos.