20 de abr. de 2007

Certificação "opensource", por que não?








Esses dias me organizando ( contando os $$ ) para certificação, me surgiu uma dúvida. Por que não pode existir uma Certificação "OpenSource"? Não sei se OpenSource é o termo mais adequado, mas acho que representa bem a idéia.

Por que não existe uma Certificação onde a Comunidade de desenvolvedores, analistas, etc.. resolvem o que ser avaliado ??
Já param pra imaginar quantas pessoas com talento, caráter e sem R$ ou sem interesse existem por ai ?

Ou melhor, se você que está lendo isso já fez alguma seleção para alguma vaga. Já pegou alguém certificado que não teinha o seu perfil ??

Isso não é uma crítica às certificações Java. Acho as certificações ótimas! Realmente quem passa não pode se dizer leigo no assunto. E se não for isso que queira avaliar num desenvolvedor ?

A certificação java foca em "atividades críticas no desenvolvimento e arquitetura de aplicações". Mas e o resto ?

Imaginem uma empresa que não se preocupa se ">>" vai deslocar bit para esquerda ou para direita, não utiliza EJB e o interesse é avaliar aqualidade do trabalho (boas práticas) , por exemplo.

Do ponto de vista desta empresa é interessante:
  • Avaliar quanto o indivíduo conhece Spring, Hibernate, Struts, JSF, Ajax, JUnit, Lazlo ou qualquer outro "treco" que eu utilize no projeto.
  • Avaliar se ele utiliza boas práticas no desenvolvimento.
  • Até avaliar se o cara utiliza de forma coerente Exceptions..

Isso existe ?


Imaginem só, quanto mais facilitado o acesso às certificações melhor seria a visão
de todos perante o mercado de trabalho.

Dois pontos de vista diferentes:

Desempregado:
- Para mim me candidatar a vaga X precisor passar por o teste A, B e o C. Bom eu tenho uma meta!!

Empresa:
- Para esta vaga, no mínimo o indivíduo tem que passar pelo teste X, Y e o Z.


Resumindo. A Certificação "OpenSource" seria criada não pelo "criador", mas sim por pessoas (lógico com uma certa experiência e qualificação), que no dia-a-dia convivem com Desenvolvedores de todos os níveis.

O que vocês acham ?? Vai ou não vai ??


14 de abr. de 2007

Ler e gravar arquivos em java

Parece besta, mas já vi algumas pessoas com dúvidas..

Existem diversas formas em java para ler e gravar arquivos. Vou mostrar uma que me parece a mais simples.

Tando para ler ou gravar são utilizados 3 objetos.

- File
- Writer ou Reader
- Objeto para controlar o buffer

Gravar um arquivo:







Ler um arquivo:




Tae uma forma bem simples para trabalhar com arquivos...

Abraço!

13 de abr. de 2007

Ordenar objetos em Java








Hoje tive que ordenar objetos de uma Collection. Essa coleção era resultado de uma consulta muito louca usando a api Criteria do Hibernate, por isso não consegui utilizar um simples ORDER BY.


Para resolver meu problema utilizei as API's
Commons Collection e BeanUtil do Jakarta.

O código ficou assim:


List<BeanComparator> sortFields = new ArrayList();
sortFields.add(new BeanComparator("semestre"));
sortFields.add(new BeanComparator("nome"));

ComparatorChain multiSort = new ComparatorChain(sortFields);
java.util.Collections.sort(disciplinas,multiSort);

Tirei o exemplo do Porta JavaFree, só não achei o link mais

Este código é bem simples.

Primeiro criei uma list de BeanComparator. BeanComparator é utilizado em conjunto pela classe ComparatorChain para ordenar uma list por vários campos. Nome meu caso nome e semestre.

Era isso!

28 de mar. de 2007

Datas em Java - Ainda existe dúvida ?

Esse post está Deprcated! hehehe..

Tenho visto pelos fóruns e listas da vida muitas dúvidas quanto a datas em java, isso me motivou a este post.
A própria JDK já vem com ferramentas para realizar trabalhos simples com datas.
Já ouviu falar na classe Calendar ??
Classe calendar oferece algumas operações básicas com datas.

1º) Desmembrar data
Você já deve ter visto que métods da classe java.utill.Date como: getHour() , getMonth() , getYear() e muitos outros estão
Deprecated.
Que faz esse trabalho é a classe java.util.Calendar.
Pra não esquecer sempre que você cria um objeto java.util.Date ele pega por padrão a data e hora atual da máquina. A mesma coisa acontece quando se cria uma instancia de Calendar. Continuando...
Abaixo vai um exemplo de código que pega dia, mês, ano, minutos e segundos da data atual.

public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();

int dia = calendar.get(Calendar.DATE);
int mes = calendar.get(Calendar.MONTH);
int ano = calendar.get(Calendar.YEAR);

System.out.println("Dia: " + dia);
System.out.println("Mês: " + mes);
System.out.println("Ano: " + ano);
}

Atenção: o mês inicia com zero, ou seja, Janeiro = 0, fevereiro = 1, etc...
2º) Acrescentar e remover dias, mes, anos, horas, minutos...
Através do método add(), você pode acrescentar ou remover datas.
Mas como?? não existe o método remove()!!!
Para remover é só passar o int negativo, conforme exemplos:

public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
calendar.add( Calendar.DAY_OF_MONTH , 5); //adicionar 5 dias do mês
calendar.add( Calendar.HOUR , -2);//diminuir 2 horas
calendar.add( Calendar.YEAR, -18); //diminuir 18 anos

int dia = calendar.get(Calendar.DATE);
int mes = calendar.get(Calendar.MONTH);
int ano = calendar.get(Calendar.YEAR);

System.out.println("Dia: " + dia);
System.out.println("Mês: " + mes);
System.out.println("Ano: " + ano);
}

3º) Comparar datas
Outra possibilidade é saber se uma data é maior ou menor que outra.
Para isto existe o método comparTo().
Exemplo:
public static void main(String[] args) {

//eu
java.util.Date dataAtual = new java.util.Date();

java.util.Calendar calendar = java.util.Calendar.getInstance();
calendar.add(Calendar.YEAR , -18);

// ele
java.util.Date data18AnosAtras= calendar.getTime();

int result = dataAtual.compareTo( data18AnosAtras );

System.out.println(result);

}


O que eu fiz?!
Criei uma data atual com new Date(). Após removi 18 anos (
calendar.add(Calendar.YEAR , -18) ) e peguei outra data.
Depois chamei o métod compareTo() para saber se o objeto
data18AnosAtras era maior ou mernor que dataAtual.
O resultado no console foi 1. (?????)

Veja que chamei a data atual de EU e a outra data de ELE. Isso é para facilitar o entendimento.
O que o métod compareTo() faz?? ele faz a seguinte pergunta:

Eu sou maior ou menor que ele ?
Resposta: 1

-1 = "eu sou menorl"
0 = "eu sou igual"
1 = "eu sou maior"

Era isso...
Espero ter tirado algumas dúvidas.

LEMBRANDO: CRÍTICAS SEMPRE SÃO BEM VINDAS!!!

Abraço!

19 de mar. de 2007

JPA/Hibernate com Postgresql








Utilizo hibernate com postgresql há alguns anos. Uma dificuldade que sempre tive nas ferramentas para geração dos antigos XML’s e, agora, as classes anotadas é a sequence.

Nenhuma ferramenta que utilizei até hoje trouxe solução para isso.
O resultado disso é alterar o tipo do id.

Sendo assim segue exemplo do XML e de um classe anotada utilizando as sequences do postgres.

No postgres foi criada a seguinte tabela:










PESSOA

id serial

nome varchar(50)

SEQUENCE
pessoa_id_seq


Na aplicação a seguinte classe:









Exemplo do mapemento desta classe com XML:










Exemplo do mapemento com ANNOTATIONS:








No hibernate toda classe persistente deve ter o atributo id, que será utilizado para garantir a integridade dos objetos.

Esse id pode ser gerado de diversas formas, exemplo:

  • sequence
  • native
  • increment
  • identity
  • native

Para obter os detalhes desses tipos de geradores de id, acesse o site do
Hibernate

No exemplo acima utilizamos a sequence. o parâmetro generator, utilizado no XML e com Annotations identifica qual será o gerador do id que o hibernate deverá utilizar., mas para isso é necessário informar o nome da sequence que será utilizada para a respectiva classe.

Espero ter ajudado de alguma forma.

Abraço à todos!