Java — Blog do PV

Archive for the ‘Java’ Category

Posted by paulovittor23 at 7 Fevereiro 2012

Category: Git, Java, Ruby

Tags:, , , , ,

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.

Bom, a principal intenção deste post é demonstrar uma das possibilidades de aplicação deste recurso do Git, a efetivação de commits que não quebrem os testes unitários (JUnit, no caso do Java, e RSpec, no caso do Ruby). Isso é muito útil pois evita que builds nos servidores de Integração Contínua (como o Jenkins) sejam quebrados, pois qualquer commit local dos desenvolvedores estará sendo, mesmo que forçadamente, validados. É, eu sei, no mundo ideal isso não deveria ser necessário, pois todos os desenvolvedores deveriam ter noção de que mesmo alterações ínfimas no código podem ter resultados catastróficos e, por livre e espontânea vontade, deveriam executar com frequência os testes unitários, mesmo porque são rápidos e não causam qualquer tipo de overhead no dia-a-dia do desenvolvedor, aliás, muito pelo contrário!

Bom, recentemente escrevi dois hooks para validação dos commits, um para projetos Java que rodem os testes através do Maven e outro para projetos Ruby que utilizem o RSpec. Ombos os scripts são muito simples e podem ser facilmente adaptados para projetos que usam Gradle, Test-Unit, TestNG, Shoulda etc.

A listagem abaixo mostra o Git hook pre-commit para validação da integridade dos testes unitários para projetos Java com Maven:

#!/usr/bin/env ruby

puts "Git hook pre-commit: #{__FILE__}"
puts "Executing maven tests: mvn clean test"

output_filename="#{Time.now.strftime("%Y-%m-%d_%H-%M")}_git_precommit_tests_result.log"
output=`mvn clean test > /tmp/#{output_filename}`  

if $?.success?
  puts "#################################################################"
  puts "No errors were found o/"
  puts "#################################################################"
else
  puts "#################################################################"
  puts "Commit aborted!"
  puts "WTF are you doing? Sorry, but some errors were found, dude!"
  puts "For more informations, read the file: #{output_filename}"
  puts "#################################################################"
  exit 1
end

Download Git hook pre-commit para Java

A listagem abaixo mostra o Git hook pre-commit para validação da integridade dos testes unitários para projetos Ruby com RSpec:

#!/usr/bin/env ruby

puts "Git hook pre-commit: #{__FILE__}"
puts "Executing RSpec tests..."

html_path = "tmp/spec_results.html"
`spec -f h:#{html_path} -f l spec` # run the spec. save html results to html_path

# find out how many errors were found
html = open(html_path).read
examples = html.match(/(d+) example/)[0].to_i rescue 0
failures = html.match(/(d+) failure/)[0].to_i rescue 0
pending = html.match(/(d+) pending/)[0].to_i rescue 0  

if failures.zero?
  puts "#################################################################"
  puts "No errors were found o/"
  puts "0 failures! #{examples} run, #{pending} pending"
  puts "#################################################################"
else
  puts "#################################################################"
  puts "Commit aborted!"
  puts "WTF are you doing? Sorry, but some errors were found, dude!"
  puts "#{failures} failures! #{examples} run, #{pending} pending"
  puts "View tests results at #{File.expand_path(html_path)}"
  puts "#################################################################"
  exit 1
end

Download Git hook pre-commit para Ruby

Bom é isso, para quem quiser conhecer mais sobre o recurso de Hooks do Git, vale a leitura do Capítulo 5 do Git Community Book, exclusivamente dedicado aos Hooks.

Posted by paulovittor23 at 21 Março 2010

Category: Certificação

A preparação…
Estudei aproximadamente 4 meses, em um ritmo não muito acelerado. Minha experiência profissional com EJB’s era razoável, porém quase inteira com EJB 2.X.
(mais…)

Posted by paulovittor23 at 28 Fevereiro 2010

Category: Java, Segurança

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. (mais…)

Posted by paulovittor23 at 13 Novembro 2009

Category: Java, JBoss

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).

(mais…)

Posted by paulovittor23 at 25 Setembro 2009

Category: Java, Project-Shiva

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;

(mais…)