Hospedagem Profissional

Hospedagem Profissional
Clique aqui e ganhe US$ 10,00 para testar durante 1 mês a melhor hospedagem: Digital Ocean!

quarta-feira, 30 de outubro de 2013

Melhores formas de atualizar números de versão de módulos de um projeto Maven

A divisão de um projeto Maven em módulos é considerada uma boa prática e é muito utilizada no mercado em geral.

Segundo a documentação oficial (Maven by Example - Chapter 6. A Multi-module Project), é indicado que a versão seja definida somente no projeto Pai (parent) e que os módulos do projeto herdem a versão, dessa forma facilitando e centralizando o processo de alteração da versão.

No projeto "parent":

 <project xmlns="http://maven.apache.org/POM/4.0.0"  
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0  
                http://maven.apache.org/maven-v4_0_0.xsd">  
   <modelVersion>4.0.0</modelVersion>  
   <groupId>org.sonatype.mavenbook.optimize</groupId>  
   <artifactId>simple-parent</artifactId>  
   <packaging>pom</packaging>  
   <version>1.0</version>  
   <name>Chapter 8 Simple Parent Project</name>  
   <modules>  
     <module>simple-command</module>  
     <module>simple-model</module>  
     <module>simple-weather</module>  
     <module>simple-persist</module>  
     <module>simple-webapp</module>  
   </modules>  
   ...  
 </project>  

E no módulo :

 <project xmlns="http://maven.apache.org/POM/4.0.0"  
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0  
                http://maven.apache.org/maven-v4_0_0.xsd">  
   <modelVersion>4.0.0</modelVersion>  
   <parent>  
     <groupId>org.sonatype.mavenbook.optimize</groupId>  
     <artifactId>simple-parent</artifactId>  
     <version>1.0</version>  
   </parent>  
   <artifactId>simple-command</artifactId>  
   <packaging>jar</packaging>  
   <name>Chapter 8 Simple Command Line Tool</name>  
   ...  
 </project>  

Perceba que não existe definição de versão para o módulo em si e sim uma referência à qual versão do "parent" este módulo deve herdar.

Mesmo utilizando essa estratégia, nos momentos em que é necessário gerar uma nova versão o processo de atualização da mesma nos arquivos pom.xml dos módulos se torna uma tarefa desagradável e passível de erro. Uma alternativa para facilitar a vida é utilizar o plugin Versions-Maven, mais especificamente o "goal" versions:set.

Por exemplo:

 mvn versions:set -DnewVersion=2.0  

O comando acima irá atualizar a versão do "parent" e as referências à essa versão em todos os módulos do projeto de 1.0 para 2.0

Se por um acaso desejar reverter as alterações realizadas, o comando a seguir pode ser executado:

 mvn versions:revert  

Caso tudo esteja de acordo, as alterações podem ser confirmadas :

 mvn versions:commit  

Em tempo: Por padrão, esse plugin realiza um backup das versões anteriores dos arquivos pom.xml.
Se você estiver seguro o bastante,  você pode desativar esta opção utilizando o parâmetro -DgenerateBackupPoms=false

Para a documentação detalhada, acesse  o link http://mojo.codehaus.org/versions-maven-plugin/set-mojo.html

Não deixe de dar uma olhada também no "goal" versions:update-child-modules :

"versions:update-child-modules: updates the parent section of the child modules of a project so the version matches the version of the current project. For example, if you have an aggregator pom that is also the parent for the projects that it aggregates and the children and parent versions get out of sync, this mojo can help fix the versions of the child modules. (Note you may need to invoke Maven with the -N option in order to run this goal if your project is broken so badly that it cannot build because of the version mis-match)."

Em um próximo post falarei sobre o plugin Maven Release Plugin, o qual possui um "goal" com função semelhante, o release:update-versions, porém agrega uma série de outras atividades auxiliares no processo de release de uma versão de um projeto Maven.

quarta-feira, 23 de outubro de 2013

Como visualizar as diferenças entre um branch local e um remoto do Git

Geralmente, antes de atualizarmos nosso branch local com as alterações realizadas no repositório remoto, é necessário e prudente que vejamos quais alterações foram realizadas e qual será o impacto dessa atualização.

Quando usamos o git pull diretamente, é o equivalente a utilizar o git fetch e depois o git merge.

Sendo assim, entre o git fetch e o git merge podemos utilizar o git diff, git cherry ou git log para visualizarmos as alterações realizadas no brach remoto que não foram atualizadas no branch local.

Vejamos um exemplo:

 git fetch origin
 
 remote: Counting objects: 37, done.  
 remote: Compressing objects: 100% (15/15), done.  
 remote: Total 20 (delta 9), reused 0 (delta 0)  
 Unpacking objects: 100% (20/20), done.  
 From ssh://mygitserver.com/myrepo  
   d10975d..de50252 master   -> origin/master  

Feito isso, agora podemos inspecionar as diferenças.

Por exemplo, para visualizarmos a lista de commits que foram feitos no branch remoto e que não estão no brach local:

  git cherry master origin/master
  
 + de50252fa7bbefd7326a514c0e5f46b2b98a197e  

Na saída acima, identificamos que existe um commit realizado a ser mesclado com nosso branch local, porém somente com o "hash" fica difícil extrair informações sobre esse commit, sendo assim, podemos usar o próximo comando para obter mais detalhes.

 git log origin/master ^master
  
 commit de50252fa7bbefd7326a514c0e5f46b2b98a197e  
 Author: Fulano de Tal   
 Date:  Thu Oct 10 11:36:09 2013 -0400  
   Atualização do Menu e lista de clientes  

Agora melhorou, já podemos saber quem foi o autor, qual o dia e hora que o código foi submetido e também conseguimos visualizar a mensagem que o autor informou ao realizar esse commit.

Porém, se ainda assim você precisar saber quais foram os arquivos alterados e quais as alterações realizadas, podemos utilizar o próximo comando:

 git diff master origin/master
  
 diff --git a/myrepo/src/main/java/br/com/mycompany/myproject/action/ClienteList.java
 new file mode 100644  
 index 0000000..a758bf7  
 --- /dev/null  
 +++ b/myrepo/src/main/java/br/com/mycompany/myproject/action/ClienteList.java  
 @@ -0,0 +1,30 @@  
 +package br.com.mycompany.myproject.action;  
 +  
 +import java.util.List;  
 +  
 +import javax.persistence.EntityManager;  
 +import javax.persistence.Query;  
 +  
 +import org.jboss.seam.annotations.In;  
 +import org.jboss.seam.annotations.Name;  
 +  
 +import br.com.mycompany.myproject.entity.Usuario;  
 +  
 +  
 +@Name("clienteList")  
 +public class ClienteList {  
 +  
 +    @In  
 +    EntityManager entityManager;  
 +      
 +    public List findClientes() {  
 +  
 +            Query q = entityManager.createQuery("select object(o) from Usuario as o Order by o.nome");  
 +            q.setParameter("setor", 2);  
 +            q.setParameter("situacao", 1);  
 +            return q.getResultList();  
 +    }  
 +      
 +      
 +      
 +}  

Tendo visto agora todos os commits a serem mesclados no branch local detalhadamente, e estando de acordo com essas alterações, podemos finalmente aplicar as alterações.

 git merge origin/master
  
 Updating d10975d..de50252  
 Fast-forward  
  .../br/com/mycompany/myproject/action/ClienteList.java   |  30 ++++++++++++  
  1 file changed, 30 insertions(+), 0 deletions(-)  
  create mode 100644 myrepo/src/main/java/br/com/mycompany/myproject/action/ClienteList.java  

Pronto, nosso branch local está sincronizado com o branch remoto.

domingo, 20 de outubro de 2013

Amazon WS - Arquiteturas de Alta Disponibilidade na AWS


terça-feira, 15 de outubro de 2013

Novidades do Sencha Touch 2.3


Sencha Touch 2.3 now with iOS7 support, Touch Grid, Cordova support and more!



domingo, 6 de outubro de 2013

Amazon WS - Tutorial Mão na Massa sobre o banco de dados como serviço Amazon RDS

Este tutorial irá abordar o lançamento de uma instância de banco de dados relacional RDS e a configuração de uma EC2 para usar o RDS para as necessidades de bancos de dados.

Caso queira uma explicação completa e um vídeo mão na massa sobre o tema, recomendamos também que assista ao vídeo Introdução EC2 e RDS Mão na Massa – Instalando uma aplicação Web na nuvem da AWS .


Os pontos a seguir serão abordados neste tutorial:
  • Iniciar um banco de dados RDS
  • Modificar nossos web servers para usar esse novo serviço de banco de dados relacional
  • Backup e recuperação de um banco de dados RDS


01

Tutorial desenvolvido por José Papo (AWS Tech Evangelist para a América Latina) e evangelistas AWS com revisão e editoração da iMasters.

Clique aqui para visualizar o conteúdo completo.

Amazon WS - Tutorial Mão na Massa sobre Auto Scaling

Auto Scaling representa mais do que uma forma de adicionar e remover servidores. É também um mecanismo de monitorar falhas de uma maneira similar à forma como os Load Balancers monitoram servidores que não respondem. Este tutorial irá guiar o usuário sobre como configurar um Auto Scaling para se lançar automaticamente, monitorar, e atualizar um ELB associado com suas instancias EC2.

Recomendamos fortemente que você assista ao vídeo mão na massa que explica o Auto Scaling e o demonstra passo a passo antes de realizar esse tutorial.


Importante! Tenha certeza que você apagou o Auto Scaling no final do dia ou dos tutoriais. Como você verá neste tutorial, o serviço faz exatamente o que você manda ele fazer, e se você simplesmente terminar os servidores, ele será notificado e irá iniciá-los novamente. 30 dias depois você irá se perguntar porque recebeu uma cobrança da AWS. Instruções de como finalizar todos esses serviços da forma correta você encontra no final deste tutorial.

Tutorial desenvolvido por José Papo (AWS Tech Evangelist para a América Latina) e evangelistas/arquitetos AWS com revisão e editoração da iMasters.

Clique aqui para visualizar o conteúdo completo.

Amazon WS - Tutorial Mão na Massa sobre Elastic Load Balancer

Este tutorial ira abordar como criar um ELB para fazer balanceamento da carga de tráfego através de várias intancias (servidores Cloud) EC2 em uma mesma Availability Zone. Iremos abordar os seguintes tópicos:
  • Lançar multiplos web servers em um bloco
  • Criar um Elastic Load Balancer
  • Configurar o ELB para servir de frente aos web servers

301.bmp

Tutorial desenvolvido por José Papo (AWS Tech Evangelist para a América Latina) e evangelistas AWS com revisão e editoração da iMasters.

Clique aqui para visualizar o conteúdo completo.

sexta-feira, 4 de outubro de 2013

PrimeFaces 4.0 Released


PrimeFaces Team is pleased to announce the 4.0 Final Release. After months of development and hard work, 4.0 is now available, free as a community release (fully featured suite under apache license). There are close to 350 improvements over 3.5, please see full changelog for details.

JSF 2.2 Support
PrimeFaces 4.0 brings first-class support for JSF 2.2. Important features like pass through attributes, reset values, servlet 3.x uploads are supported. Thanks to internal runtime detection, 4.0 can also run on 2.0 and 2.1 implementations.

Client Side Validation Framework
CSV is one of the highlights of 4.0, bringing JSF validations to the client side using a lightweight approach with HTML5. Bean validation is supported out of the box in addition to the features like custom events, APIs for extension, localization and more.

Dialog Framework
Dialog Framework is an alternative approach to using declarative dialogs, using DF it is easy to reuse external xhtml views in dialogs thanks to the dynamic approach of DF. Advanced features like customization and communication between host-dialog are also provided.

Search Expressions
Search Expressions goes beyond the basic keyword support of JSF by providing new keywords, improves PFS with jQuery selector integration and more. It has never been easier to find components.

Deferred Loading
OutputPanel is equipped with handy deferred loading mechanism, using this feature you are able to load content after page load or when a certain area becomes visible after scrolling.

HTML5 FileUpload
FileUpload has been rewritten from scratch to fix the problems of old one. Powered by HTML5, new fileupload adds new features and has been improved greatly in terms of quality.

Component Features
There are new components like fragment, multiSelectListbox, sticky and existing components have been improved with new features such as sticky datatable headers, dragdrop for tree, grid layout for checkbox-radio and many more.

Maintenance
Until 4.0, there has been 16 Elite Maintenance releases. Thanks to PrimeFaces Elite, quality has been improved drastically in 4.0 and will be much better with the frequent 4.0.x Elite Releases.

Documentation
User’s Guide is updated to cover 4.0 and has reached 530 pages. It is available at documentation page.

Maven Central
PrimeFaces 4.0 is in maven central repository available for download, snapshots will also be deployed to oss snapshots repository.

Elite Discount
For a limited perioud until 4.0.1, we are now offering %20 discount for 1 year Elite Subscription that reduces the fee from 249$ to 199$.

Roadmap
We’ll now focus on releasing PrimeFaces Mobile 1.0 which was on hold due to 4.0 dependencies and the PrimeUI 1.0. PrimeFaces 4.1 will be available in Q1 of 2014 and  Elite Development for 4.0.x will start as of today whereas Elite for 3.5.x will be available until the end of 2013.

Always bet on Prime!

Infos: 
  • www.primefaces.org
  • blog.primefaces.org

Arquiteturas de Software para o Século XXI


By Jose Papo