terça-feira, 6 de julho de 2010

Introdução ao sistema de controle de versão distribuído Egit/JGit

O Git é um sistema de controle de versão distribuído, desenvolvido originalmente para a plataforma Unix em C, de uso livre e de código fonte aberto foi desenhado para suportar pequenos e grandes projetos como o Kernel do Linux de forma rápida e eficiente.

Os projetos EGit (plugin cliente para Git) e JGit (implementação em Java do Git) foram incorporados pela Eclipse Foundation e passaram ser suportados por todas as plataformas compatíveis com o Java 5 e agora fazem parte da versão Eclipse Helios.

A Eclipse Foundation manteve o projeto aberto para que qualquer um possa criar novos clientes para outras aplicações como NetBeans e clientes web para acesso ao repositório.

A funcionalidade básica de um sistema de controle de versão é criar um histórico em um conjunto de arquivos com a possibilidade de voltar estes arquivos a outro estado.

Em um sistema de controle de versão distribuído cada cópia efetuada é um repositório completo que possui históricos e revisões, não dependendo de acesso a rede e de servidor central.

O Git permite salvar as alterações localmente (commit) e mesclar as alterações com os repositórios remotos (merge). Se você quer uma cópia do repositório você deve efetuar uma cópia do mesmo (clone). Os repositórios podem ser combinados enviando as alterações ao repositório remoto (push) ou obtendo as alterações do repositório remoto (pull).

O repositório distribuído trás uma série de vantagens como:
  • Acesso rápido ao histórico por estar acessando os dados em um disco local.
  • Evita problema com quedas do servidor já que não possui um ponto central de falha.
  • Qualquer cliente pode se tornar um servidor.
  • Permite que parte da equipe execute um trabalho remoto com seu código sincronizado, criando tags, revisões e posteriormente sincronizando com o repositório principal da empresa.
  • O backup se torna trivial.

O Git pode ser gerenciado através de linha de comando, mas neste artigo cobriremos apenas uma das opções de ferramentas gráficas, o EGit.

Instalação
Acesse no Eclipse Helios o menu Help > Eclipse Marketplace.
Pesquisa por EGit no Marketplace.

Clique Install no plugin EGit - Git Team Provider.
Siga o assistente para concluir a instalação do plugin.

Adicionando um projeto ao controle de versão
Crie um novo projeto Java e chame-o de HelloGit.
Clique com o botão direito do mouse em cima do projeto no Project Explorer.
Acesse o menu de contexto Team > Share Project.

Escolha o Git como tipo de repositório e clique no botão Next.

Neste ponto será criado o repositório para o projeto.
Clique em HelloGit, o campo a frente do botão Create Repository será preenchido automaticamente.
Clique no botão Create Repository e em seguida no botão Finish.

Havendo um repositório existente o mesmo será selecionado automaticamente.

Efetuando Commit
Clique com o botão direito do mouse em cima do projeto no Project Explorer.
Acesse o menu de contexto Team > Commit.


Informe um comentário sobre o que está sendo aplicado ao repositório e clique no botão commit.


Na próxima publicação vou falar um pouco mais sobre as operações de controle de versão como commit, branch, tag e consulta ao histórico, até lá.

Referências:

quinta-feira, 1 de julho de 2010

Teste do Tomcat 7

Dia 29/06/10 a Apache Software Foundation lançou a versão 7 do seu famoso Servlet Container, o Tomcat 7, ainda é versão beta mas já deve estar bem estável, neste post pretendo descrever algumas melhorias e novas funcionalidades com foco no desenvolvimento Java e construir alguns exemplos.

Especificação JEE6
O Tomcat 7 implementa completamente a especificação Servlet 3.0, JSP 2.2 e EL 2.2 que fazem parte do JEE6, porém ainda não disponibiliza outras especificações importantes como JSF 2.0, CDI 1.0, MB 1.0 e até mesmo a definição Web Profile existente no Glassfish 3 que possui o EJB Lite, mantendo assim a característica principal de Servlet e JSP Container de suas versões anteriores.

Suporte a Servlet 3.0
Esta especificação traz facilidade de desenvolvimento através de annotations, registro dinâmico de Servlet e Filters em tempo de execução, Servlet assíncrono e melhorias de segurança.

Assim para criar um Servlet basta herdar HttpServlet e utilizar a annotation @WebServlet e definir o nome para requisição do mesmo, sem a necessidade de configurar o arquivo web.xml.

@WebServlet("/TesteServlet")
public class TesteServlet extends HttpServlet {
protected void doGet...
protected void doPost...
}

Autenticação na camada de programação
Está disponível métodos de login e logout na request (especificação JEE6).

Servlet assíncrono
A especificação Servlet 3.0 define suporte a requisições assíncronas, evitando se assim a necessidade de criação de Threads quando não há necessidade da espera do resultado do processamento, como em aplicações Comet, aumentando também a escalabilidade.
O Tomcat 7 da suporte a requisição assíncrona, mas não consegui identificar na documentação o quanto disto está concluído.

Web Fragment
A especificação Servlet 3.0 definiu o Web Fragment para facilitar a plugabilidade entre os componentes, assim ao utilizar um jar como o Struts, Spring ou até mesmo um componente desenvolvido por você não será mais necessário alterar o web.xml para definir as configurações da bibliotecas, estas configurações estarão disponíveis no web-fragment.xml do jar, localizado na pasta META-INF.

Uma consideração é que as configurações básicas de um Servlet poderiam ser feitas por anotações, sem a necessidade de utilização do web.xml ou web-fragment.xml, mas há outras configurações que ainda não são possíveis via annotation.

Interface de administração
Infelizmente ainda não disponibiliza uma interface de administração tão completa como a do Glassfish, mas tem o essencial para gerenciamento da aplicação.
Para habilitar a utilização desta interface é necessário atribuir a role manager-gui a um usuário no arquivo conf/tomcat-users.xml e remover os comentários.

<!-- Remover esta linha
<role rolename="tomcat"/>
<role rolename="role1"/>
<user username="tomcat" password="tomcat" roles="tomcat,manager-gui"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
<user username="role1" password="tomcat" roles="role1"/>
--> Remover esta linha

Nível de compilação 1.6
Utiliza como padrão o nível de compilação 1.6, o que torna o Java 6 requisito para funcionamento.

Otimização de código
Nesta versão houve várias melhorias no código como utilização de generics, remoção de imports não utilizados, atributos, parâmetros e métodos.
Todos os métodos depreciados foram removidos, é importante uma atenção a isto, pois se você possui componentes para versões anteriores do Tomcat eles podem não funcionar corretamente nesta versão.

Prevenção e detecção de vazamento de memória
Ajuda os usuários a identificar estouro de memória em suas aplicações e até mesmo bibliotecas de terceiros, estava previsto para o Tomcat 7, mas acabou sendo implantado no Tomcat 6 devido a sua relevância.

Caminhos para o contexto
Nesta versão é possível definir outros caminhos para o contexto do servidor, permitindo assim que outros diretórios ou arquivos WAR sejam mapeados para o contexto.

Para obter a lista completa de melhorias, correções e novas funcionalidades consulte a documentação do produto.