Categories: Git, Java, Ruby

Git hooks pre-commit para projetos Java e Ruby

Logo GitHooks, que podem ser traduzidos como “ganchos”, são pequenos scripts que podem ser adicionados dentro do diretório “.git/hooks/”, existente em todo projeto que utilize o Git como ferramenta de controle de versão, para efetuar ações disparadas por alguns eventos, como pre-commit, post-commit etc (para conhecer todos os eventos visite o Git Community Book).

Quando executamos o comando “git init”, alguns scripts são copiados no diretório de hooks do projeto, porém por padrão ficam desabilitados. Para ativar um script de hook basta remover o sufixo “.sample” do nome dos scripts. Obviamente, não basta apenas ativar o script, é necessário que o desenvolvedor customize o script para realizar alguma ação desejada.


Categories: Java, Segurança

Validação de certificados digitais para hosts confiáveis (bypass)

O erro abaixo ocorre quando tentamos chamar uma url HTTPS cujo Web Server não possui um certificado digital assinado por uma Autoridade Certificadora.

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1611)
…  (omitindo linhas do trace)
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:285)
at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:191)
…  (omitindo linhas do trace)
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:174)
at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:238)
…  (omitindo linhas do trace)

Quando isto ocorre, existem duas abordagens possíveis para que o cliente do Web Server possa realizar a chamada HTTPS sem receber o erro acima apresentado.


Categories: Java, JBoss

Configurando duas instâncias no JBoss para rodar na mesma máquina

Configurando duas instâncias no JBoss para rodar na mesma máquina

Quem já precisou rodar mais de uma instância no Jboss certamente já teve problemas como:

java.rmi.server.ExportException: Port already in use: 8080; nested exception is:
java.net.BindException: Address already in use: JVM_Bind

Este problema é muito comum para as portas padrões do JBoss, como por exemplo: 1098,1099,8009,8080,8083 e 4444.

Para resolver este problema, existe uma receita de bolo fácil de seguir!

1. Na instalação do JBoss, duplique a configuração all fazendo uma cópia do diretório. A cópia terá o nome all2.

2. Dentro do diretório $JBOSS_HOME/docs/examples/binding-manager do JBoss existe um arquivo chamado sample-bindings.xml. Este arquivo pode ser carregado na inicialização do JBoss para definir quais são as portas utilizadas pelo container. Vamos ver como fazer isto.

3. Para carregar o arquivo sample-bindings.xml, você deve habilitar o MBean que está dentro do arquivo jboss-service.xml de cada um das instancias (independente de ser minimal, default, all ou alguma customizada).


Categories: Java, Project-Shiva

Shiva – Um framework para mapeamento objeto-diretório

Shiva – Um framework para mapeamento objeto-diretório

O projeto

O objetivo do projeto foi desenvolver um framework Open Source em Java capaz de mapear classes POJO para diretórios LDAP, provendo desta forma funcionalidades de persistência e validação dos objetos destas classes. Algo semelhante ao Hibernate (dadas as devidas proporções), porém, tendo como backend um serviço de diretórios (OpenLdap, Active Directory).

As principais features

• Mapeamento objeto-diretório: assim como o mapeamento objeto relacional temos um mapeamento relacionando as classes a diretórios e atributos da classe Java com atributos do diretório;


Categories: Java

Process.waitFor(), corrigindo o deadlock no Windows

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.