Java — Blog do PV

Archive for the ‘Java’ Category

Posted by paulovittor23 at 6 Fevereiro 2008

Category: Java

Process.waitFor(), corrigindo o deadlock no Windows

Há um tempo atrás eu estava desenvolvendo uma mini biblioteca para trabalhar a execução de comandos no SO de uma forma mais amigável, uma espécie de DSL. Criada a biblioteca realizei alguns testes em ambiente Linux. Tudo funcionamento dentro do planejado, hora de utilizá-la…

Bom, na primeira real utilização da biblioteca, em ambiente Win32 executei um “ipconfig /all”, e para minha surpresa, após todos os testes que havia realizado o comando simplesmente não respondeu.

Voltei ao Linux, mudei o comando para “ifconfig” e o comando executou sem problemas…

Comecei a debugar a biblioteca afim de descobrir o que estava causando o congelamento na execução do comando no SO… Após alguns minutos, cheguei finalmente ao método “waitFor()” da classe “Process”… pela definição esse método faz com que a thread corrente espere, caso necessário, até o processo representado pelo objeto Process terminar.

A questão é que o método “Runtime.exec()” (que devolve a instância do processo criado) cria um pipe para a saída padrão e quando um processo filho escreve uma quantidade grande de dados neste pipe, de modo a deixar o buffer cheio, o pipe é bloqueado pelo Windows até que o processo pai leia esse buffer. Logo, caso o processo pai nunca leia a saída padrão do processo filho teremos um deadlock.

(mais…)

Posted by paulovittor23 at 1 Fevereiro 2008

Category: Java

Pegando o Mac Address antes e depois do Mustang (Java 6)

Recentemente tive a necessidade de automatizar o preenchimento de um arquivo de configurações. Nesse arquivo, um dos valores que eram preenchidos era o Mac Address.
Logo me veio na cabeça a necessidade de executar o “ipconfig /all” (win) / “ifconfig” (linux) / “?” (mac)… capturar a saída, tratar o retorno, etc. Sem falar nas dificuldades de se fazer um parser independente do SO, do idioma do SO, ou seja, muitas variáveis que ao qualquer descuido fariam o parser falhar. =/
Bom, uma das novidades do Mustang é que a classe “java.net.NetworkInterface” traz um novo método para pegar o Mac Address de forma transparente. O método se chama “getHardwareAddress”. A seguir vou mostrar um exemplo de como pegar o Mac Address antes e depois do Java 6. Acredito que vá ficar claro a simplicidade e confiabilidade do novo método.

(mais…)

Posted by paulovittor23 at 27 Janeiro 2008

Category: Java, LDAP

JDBC-LDAP Bridge Driver

Com a finalidade de facilitar a utilização do serviço de diretórios LDAP a Novell desenvolveu uma ponte JDBC-LDAP. Essa ponte permite a utilização de SQL para fazer consultas ou atualizações em uma árvore de diretórios através de aplicações Java.

O site do projeto é o http://www.openldap.org/jdbcldap/

Eu não encontrei nenhum release do projeto já compilado (se alguém encontrar me avise XD), mas os arquivos fontes podem ser baixados por qualquer cliente CVS. No meu caso utilizei o TortoiseCVS ( http://www.tortoisecvs.org/ ).

(mais…)

Posted by paulovittor23 at 19 Janeiro 2008

Category: Java, JBoss Seam

Gerando código com JBoss Seam

Neste artigo vou tentar mostrar um pouco do gerador de aplicações JEE do JBoss Seam, que após algum tempo de estudo e prática pode ajudar bastante os desenvolvedores.
Não é meu intuito aqui explicar o funcionamento do framework em si (escreverei sobre o mesmo mais pra frente), neste artigo abordarei APENAS a ferramenta de geração de código.
A geração de código sempre foi algo muito polêmico entre os desenvolvedores, alguns repudiam por completo essa prática alegando que o código gerado não é muito limpo, etc..
Por outro lado, não há como negar que praticidade em certos momentos é fundamental. Enfim, venho trabalhando com esse framework há aproximadamente 4 meses e já pude mapear alguns momentos em que a utilização do gerador de código pode colaborar ou dificultar o desenvolvimento. Geralmente, nas ditas aplicações comerciais, utilizamos banco de dados que são formados por “tabelas básicas” e “tabelas de movimentação”. Bom, tabelas básicas são aquelas onde geralmente armazenamos dados que serão apenas consultados, como por exemplo “statuspedido”, que armazenará um determinado número de status de pedidos, que serão praticamente imutáveis. Tabelas de movimentação, por sua vez, são aquelas que sofrem muitas atualizações(Create, Update, Delete) e onde geralmente relacionamos um determinado número de tabelas básicas. O ponto onde quero chegar é: o gerador de código do Seam é muito interessante quando estamos falando de tabelas báscias, onde o CRUD gerado é realmente aproveitável. (mais…)

Posted by paulovittor23 at 31 Dezembro 2007

Category: Certificação

A certificação de Desenvolvedor Java Web
Sun Certified Web Component Developer, Standard Edition 1.4

certificado_scwcd_14.jpg

Removendo as teias e poeira do blog, e em meio a correria de final de ano resolvi finalmente postar um pouco sobre a certificação SCWCD 1.4.

A preparação…
Estudei aproximadamente 4 meses, em um ritmo bem mais tranqüilo do que quando estudei pra SCJP 5, pos dois motivos, a prova é menos exigente em detalhes e também porque meu foco de desenvolvimento em Java sempre foi web o que me ajudou em muitos momentos.
Meus estudos foram baseados unicamente no livro Head First Servlets & JSP que, diga-se de passagem, é uma literatura bem amigável.

A escolha do idioma da prova…
Na verdade não há muita escolha, a prova não é disponibilizada no idioma Português restando praticamente apenas o Inglês como opção. O que não é nada ruim, se você for pensar na má qualidade da tradução da prova de programador.

(mais…)