0

Guia de Referência Rápida para Comandos Maven

maven

O Maven possui uma vasta lista de comandos para facilitar a sua vida e a minha também imaginei: por que não criar uma página de referência com os principais comandos existentes? Assim podemos acessá-la sempre que for necessário para lembrar de alguns comandos até que todos estejam “decorados”.
Espero que seja útil e que estejam todos funcionando em seus computadores.

Para compilar

mvn compile

Para compilar off-line

mvn –o compile

Para criar os pacotes

mvn package

Instalar o pacote nos respectivos repositórios

mvn install

Limpar a pasta target

mvn clean

Gerar um projeto eclipse(normalmente prefiro recriar)

mvn eclipse:clean eclipse:eclipse

Gerar um projeto eclipse baixando os códigos-fonte das dependências

mvn eclipse:clean eclipse:eclipse –DdownloadSources=true

Gerar um projeto eclipse baixando os códigos-fonte assim como o javadoc das dependências

mvn eclipse:clean eclipse:eclipse –DdownloadSources=true –DdownloadJavadocs=true

Executar os testes unitários

mvn test

Executar os testes unitários apenas informando no console os resultados dos testes

mvn -Dsurefire.useFile=false test

Executar um teste específico

mvn test –Dtest=br.com.maven3.tutorial.tests.suaClasseDeTestes

Ignorar os testes ao gerar um pacote

mvn package -Dmaven.test.skip=true

Ignorar os testes ao instalar um pacote

mvn install -Dmaven.test.skip=true

Gerar um projeto web baseado em um template(Leia mais sobre templates em Dicas para usar templates de projetos pré-configurados no Maven – Maven Archetypes)

mvn archetype:create -DgroupId=br.com.projeto.exemplo -DartifactId=projeto-web -DarchetypeArtifactId=maven-archetype-webapp

Gerar site de documentação para o projeto

mvn site

Gerar Javadoc

mvn javadoc:javadoc

Para ver qual é o pom.xml que o Maven entende(veja o link Qual é a estrutura padrão de diretórios e arquivos no Maven?)

mvn help:effective-pom

Como executar um profile

mvn –P profile1

Como executar 2 profiles

mvn –P profile1 –P profile2

Como ignorar um profile e executar outro profile

mvn –P !profile1 –P profile2

Como recriar um projeto web aberto na pasta target

mvn clean package war:exploded

Como executar o Sonar(Aprenda mais sobre o Sonar em Aprenda como melhorar a qualidade do código usando o Sonar)

mvn sonar:sonar

Exibir todas as dependências e dependências transitivas, ajudando a identificar conflitos;

mvn dependency:tree

Exibir todas as dependências transitivas para um pacote, ajudando a identificar conflitos;

mvn -X <nome_pacote>

Fazer download dos códigos fontes independentes de IDE

mvn dependency:sources

0

Iniciando o Uso do Maven – Comandos Básicos

maven

Visando facilitar você que está começando a usar o Maven segue uma lista com algumas dicas muito úteis que irão ajudar o início desta longa e grande viagem sem volta!

1) A melhor forma de iniciar um projeto Maven é através de templates já prontos para uso.

2) Existe uma lista de comandos básicos no Maven. Faça alguns testes e entenda na prática como funciona cada um deles. Veja o que acontece na pasta target do seu projeto. Seguem os comandos:

  • mvn compile
  • mvn jar:jar
  • mvn test
  • mvn package
  • mvn install
  • mvn eclipse:eclipse
  • mvn package
  • mvn clean

3) Pular os testes( isto é muito importante mas… quem sabe você não precise testar no momento, não é?)

mvn <comando> -Dmaven.test.skip=true

4) Crie profiles de execução:

mvn <comando> -P desenvolvimento

O exemplo abaixo explica como usar 2 tipos diferentes de profiles: tomcat e jboss:

mvn <comando> -P tomcat

mvn <comando> -P jboss

Caso seja necessário é possível executar dois profiles de uma só vez:

mvn –P profile1 –P profile2

Agora, um exemplo para criação de um projeto web com o conteúdo aberto (war:exploded):
mvn clean package war:exploded -P tomcat

Acesse o link para mais informações sobre profiles: http://maven.apache.org/guides/introduction/introduction-to-profiles.html

5) Instale qualquer arquivo no repositório local Imagine que você precise criar um arquivo jar e este será compartilhado entre seus vários projetos. Você pode instalar qualquer jar que quiser, mesmo não sendo do projeto maven (como no exemplo abaixo):

mvn install:install-file -DgroupId=toplink -DartifactId=toplink-essentials -Dversion=2.7 -Dpackaging=jar -Dfile=toplink-essentials.jar

6) Veja como funciona os plugins disponíveis no Maven. Um bom plugin possui uma boa página de documentação.

Segue alguns que eu recomendo:

http://maven.apache.org/plugins/maven-antrun-plugin/
http://mojo.codehaus.org/build-helper-maven-plugin/
http://maven.apache.org/plugins/maven-assembly-plugin/
http://maven.apache.org/plugins/maven-eclipse-plugin/

7) Links importantes para conhecer:

http://maven.apache.org/plugins/index.html
http://maven.apache.org/run-maven/index.html
http://maven.apache.org/articles.html

0

Modificadores de Acesso

Java (2)Modificadores de Acesso

Os modificadores de acesso, tem como função controlar a visibilidade de classes, atributos e métodos em relação a outras classes e pacotes. Em Java temos alguns tipos de modificadores de acessos que serão exemplificados abaixo:

Modificador public

O modificador public pode ser usado na criação de uma classe, de um atributo e de um método, e possui diferentes comportamentos quando antecede alguns deles.

      • Em uma classe, significa dizer que ela poderá ser acessada e herdada por todas as outras classes dentro de uma aplicação.
      • Em um método, significa dizer que ele poderá ser acessado, reescrito e herdado por qualquer classe.
      • Em um atributo, significa dizer que poderá ser referenciado por qualquer outra classe.

Modificador private

O modificador private pode ser usado na criação de um atributo e de um método, e possui diferentes comportamentos quando antecede alguns deles.

      • Não pode ser aplicado como modificador de acesso de uma classe.
      • Em um método, significa dizer que ele poderá ser acessado pelos métodos da classe que o definiu.
      • Em um atributo, significa dizer que poderá ser referenciado somente pela classe que o definiu.

Modificador protected

O modificador protected pode ser usado na criação de um atributo e de um método, e possui diferentes comportamentos quando antecede alguns deles.

      • Não pode ser aplicado como modificador de acesso de uma classe.
      • Em um método, significa dizer que ele poderá ser acessado somente pelas classes que fazem parte do mesmo pacote.
      • Em um atributo, significa dizer que poderá ser referenciado somente pelas classes que fazem parte do mesmo pacote.

Modificador default

O modificado default define o acesso padrão que será aplicado quando não houver definição de modificador de acesso, ou seja quando esquecemos de definir o modificador de acesso a classe.

Modificador static

O modificador static pode ser usado na criação de um atributo e na definição de um método, e possui diferentes comportamentos quando antecede alguns deles. Definir um atributo ou métodos como static significa dizer que os mesmo pertencem a classe em que foram definidos. Membros estáticos podem ser acessados através de instância da classe.

Modificador final

O modificador final pode ser usado na criação de uma classe, de um atributo e de um método, e possui diferentes comportamentos quando antecede alguns deles.

      • Em uma classe, significa dizer que a classe não poderá ser estendida.
      • Em um método, significa dizer que o método não poderá ser reescrito.
      • Em um atributo, significa dizer que seu valor não poderá ser modificado.
0

JNI (Java Native Interface)

Java (2)Java Native Interface – Parte 1

c++logoA Java Native Interface JNI define um padrão de nomes e convenções de funções que só a Máquina Virtual Java pode localizar e invocar nos métodos nativos de uma DLL gerada em C/C++ ou Assemble. O JNI habilita programadores a escrever métodos nativos para tratar situações em que uma aplicação não pode ser escrita inteiramente na linguagem Java.  A Java Native Interface define um padrão de nomes e convenções de funções que só a Máquina Virtual Java pode localizar e invocar nos métodos nativos.

Através do uso do padrão JNI podemos integrar nossos projetos Java com  DLLs geradas no em C.

nativesides

O Aplicativo javah

O aplicativo javah essencial para a criação da interface nativa é fornecido pela JDK. Utilizamos este aplicativo para gerar um arquivo .h que define os protótipos dos métodos de uma classe Java em forma de interface C/C++. Esta interface contém as declarações necessárias para compilarmos corretamente os módulos nativos que interagem com a JNI.

O aplicativo javah tem como vantagem reduzir os erros de programação na hora de integração de módulos nativos com a nossa JNI.

Para gerar um arquivo .h com o aplicativo javah devemos seguir com os seguintes passos:

1 - Compilação da Classe Java

2 - Criação da Interface Nativa

Após a criação da Interface Nativa será gerado um arquivo uma estrutura semelhante a:

Na próxima postagem, uma abordagem sobre tipos de dados.

0

Configuração Maven – Parte 1

maven

O Maven é uma ferramenta de gerenciamento, construção e implantação de projetos, que tem como função ajudar no processo de gerenciamento de dependências e no de build do projeto, geração de relatórios e de documentação.

 Download do Framework

O framework está disponível na página oficial da ferramenta: http://maven.apache.org/.

CONFIGURAÇÃO DO MAVEN

Variáveis de Ambiente do Maven

varsambiente

Variáveis de Usuários

JAVA_HOME  = C:\Program Files\Java\jdk1.7.0_45

CLASS_PATH= C:\Program Files\Java\jdk1.7.0_45\bin\lib

M2_HOME = C:\Program Files\apache-maven-3.1.1

M2_REPO = C:\Users\ppontes\.m2\repository

MAVEN_OPTS = -Xmx1024m -Xmx512m -XX:MaxPermSize=128m -Djava.awt.headless=true

Variáveis de Sistema

Path – C:\Program Files\apache-maven-3.1.1\bin

 Descrição das Variáveis de Ambiente

M2_HOME Home de instalação do Maven
M2_REPO Repositório das Bibliotecas
MAVEN_OPTS Configurações de Memória do
Path Variáveis de Ambiente do Sistema Operacional
JAVA_HOME Home de instalação da JDK
CLASS_PATH Classpath com as libs da JDK
1

Objetos Distribuídos com RMI

Java (2)

Remote Method Invocation (RMI)

O RMI é uma extensão de software à máquina virtual Java remota (JVM) que permite o envio de mensagens para objetos gerenciados por outra JVM. O Rmi propicia uma implementação natural do sistema distribuído em um ambiente Orientados a Objeto.

rmi

Objetos de uma determinada máquina poderão enviar mensagens através da rede para objetos presentes em outra máquina.

Implementação da Tecnologia

A partir deste momento vamos chamar de “receptor” ao local onde está o objeto que recebe as mensagens remotas e “transmissor” ao local de onde partem as mensagens remotas.

Quando pensamos em uma aplicação cliente-servidor, é comum que no programa servidor haja objetos receptores. Entretanto, é possível que haja uma situação em que objetos do programa cliente também sejam receptores; ou seja, que recebam mensagens vindas do programa servidor.

Assim, a especificação destes passos se refere aos objetos que recebem as mensagens remotas; estes podem estar no programa servidor ou no programa cliente.

Para cada classe que receber mensagens remotas (receptor), criar uma interface que contenha a especificação destes métodos.

A interface deverá ser especialização da interface Remote.

Os métodos deverão indicar que throws RemoteException (ou seja, podem disparar a exceção RemoteException)

Aplicação Servidor

Na aplicação servidor defino uma interface estendendo a classe Remote do pacote java.rmi.*.

Logo após crio a classe com a implementação dos métodos de nossa aplicação servidora. A Classe de Implementação dos métodos deve estender UnicastRemoteObject e implementar a interface do Servidor.

Por fim implementamos a classe responsável por publicar o Servidor RMI.

 Aplicação Cliente

Na aplicação cliente uso a mesma interface definida na aplicação servidor para estabelecer um contrato de comunicação entre as duas partes.

Por fim acesso a aplicação rmi através da Url: rmi://localhost/RmiServidor, onde RmiServidor foi o nome vinculado ao objeto Remoto, e assim consigo acessar aos métodos do meu objeto remoto.

0

Hibernate Relacionamento N:1

logoHibernateHibernate Relacionamento N:1

Nesta segunda parte da postagem sobre relacionamentos com o Hibernate demonstro a criação de um relacionamento N:1, utilizando as anotações do Framework. Para exemplificar o relacionamento seguirei o modelo abaixo:

Class Diagram

A anotação @ManyToOne representará o relacionamento na classe Produto. Segue a implementação das classes persistentes:

Classe Persistente Categoria

Classe Persistente Produto

Na classe Produto criamos um objeto do tipo categoria que será responsável pelo mapeamento do relacionamento neste objeto fazemos as seguintes anotações: @ManyToOne(fetch= FetchType.EAGER) que representa em sim o relacionamento do tipo N para 1, já o atributo fetch com valor FetchType.EAGER significa que toda vez que o objeto pai for recuperado da base o atributo mapeado também será recuperado; @JoinColumn é usada para informar qual o nome da coluna que corresponde à chave estrangeira do mapeamento os atributos  insertable e updatable que se assumirem true indica que o atributo deve ser inserido  ou atualizado; @Fecth vai definir como o atributo mapeado será recuperado da base, no nosso caso é feito um SELECT para recuperar o atributo. E assim conseguimos mapear o relacionamento N para 1, nas próximas postagens mapearemos um relacionamento N para N e N para N com atributos.

0

Hibernate Relacionamento 1:N

logoHibernateHibernate Relacionamento 1:N

Nesta postagem descrevo uma forma de modelar um relacionamento entre tabelas 1 para muitos com o uso das anotações do Hibernate. Criei um exemplo simples para demonstrar o uso do Framework de uma forma clara e direta. Segue o modelo a ser implementado.

hibernate1-N

Para exemplificar o relacionamento criaremos as classes persistentes Departamento e Funcionário. A classe Departamento possuirá o relacionamento 1:N através de um atributos do tipo lista de funcionários e a partir de uma anotação @OneToMany.

A implementação da classe persistente Funcionario fica da seguinte forma:

A implementação da classe persistente Departamento fica da seguinte forma:

As classes Funcionario e Departamento serão mapeadas em nosso banco de dados com os nomes tbFuncionariotbDepartamento.

Nota-se que na classe Departamento foi feita a anotação @OneToMany que identifica o relacionamento 1:N, nesta anotação temos o atributo mappedBy com o valor ‘departamento’ onde este valor se refere a um atributo criado na classe Funcionario com o mesmo nome (ver classe Funcionario linha 37) este atributo serve em si para representar que na tabela tbFuncionario temos uma chave estrangeira  relacionada a tbDepartamento, o atributo fetch define quando o conteúdo o atributo será recuperado da base de dados.

A anotação @Cascade indica a ação em cascata a ser empregada do objeto pai para os objetos associados. Já na classe Funcionario foi criado um atributo do tipo departamento que recebe as anotações @ManyToOne que define que existem muitos funcionários para um departamento, @Cascade define as operações em cascata, @JoinColumn que define a chave estrangeira da tabela tbFuncionario, @Fetch  define como o atributo mapeado será recuperado da base de dados.

0

Como funciona o Hibernate

logoHibernateComo funciona o Hibernate

O Hibernate é um framework de mapeamento objeto relacional para aplicações Java, ou seja, é uma ferramenta para mapear classes Java em tabelas do banco de dados e vice-versa. É bastante poderoso e dá suporte ao mapeamento de associações entre objetos, herança, polimorfismo, composição e coleções.

O Hibernate não apresenta apenas a função de realizar o mapeamento objeto relacional. Também disponibiliza um poderoso mecanismo de consulta de dados, permitindo uma redução considerável no tempo de desenvolvimento da aplicação.

A Arquitetura do Hibernate

A arquitetura do Hibernate é formada por um conjunto de interfaces que são responsáveis por executar operações de criação, exclusão, consulta e atualização no banco de dados, além de uma interface para realizar configuração do Hibernate, interfaces responsáveis por realizar a interação entre os eventos do Hibernate e a aplicaçãoe interfaces que permitem a extensão das funcionalidades de mapeamento do Hibernate.

hibernatearquitetura

Além do mapeamento dos objetos relacionais e integração com os bancos de dados o Hibernate interage com APIs já existentes do Java: JTA, JNDI e JDBC.

As principais interfaces do Hibernate são: Session, SessionFactory, Transaction, Query, Configuration. Com essas interfaces conseguimos criar todas as nossas rotinas de banco de dados.

Interface Session

Possibilita a comunicação entre a aplicação e a persistência, através de uma conexão JDBC. É um objeto leve de ser criado, não deve ter tempo de vida por toda a aplicação e não é threadsafe. Um objeto Session possui um cache local de objetos recuperados na sessão. Com ele é possível criar, remover, atualizar e recuperar objetos persistentes.

Interface SessionFactory

Responsável por manter o mapeamento objeto relacional em memória. Permite a criação de objetos Session, a partir dos quais os dados são acessados, também denominado como fábrica de objetos Sessions. Deve existir apenas uma instância dele na aplicação, pois é um objeto muito pesado para ser criado várias vezes.

Interface Configuration

É utilizada para realizar as configurações de inicialização do Hibernate. Com ele, define-se diversas configurações do Hibernate, como por exemplo: o driver do banco de dados a ser utilizado, o dialeto, o usuário e senha do banco, entre outras. É a partir de uma instância desse objeto que se indica como os mapeamentos entre classes e tabelas de banco de dados devem ser feitos.

Interface Transaction

É utilizada para representar uma unidade indivisível de uma operação de manipulação de dados. O uso dessa interface em aplicações que usam Hibernate é opcional. Essa interface abstrai a aplicação dos detalhes das transações JDBC, JTA ou CORBA.

Interfaces Criteria e Query

As interfaces Criteria e Query são utilizadas para realizar consultas ao banco de dados.

Em breve uma abordagem sobre relacionamentos entre tabelas utilizando o Hibernate. Espero ter ajudado em sua pesquisa ou estudo.

0

Enviando uma Requisição SOAP a um Serviço

managed-services-iconEnviando uma Requisição SOAP a um Serviço

Uma forma mais rústica de consumir um Web Service é enviar de sua aplicação uma mensagem no formato SOAP para um ou mais métodos daquele serviço, a pouco tempo tive de tratar um caso assim, e por isso segue uma postagem referente a esta forma de requisição. Para simplificar a implementação monto um exemplo baseado na postagem : Gerando WebServices com JAX-WS.

Para realizar a requisição a um método do Web Service utilizo a Classe UrlConnection para fazer a conexão, chamar o método e setar as propriedades de requisição.

O método a ser testado é o retornarString para isso enviaremos a seguinte mensagem SOAP.

Não indico consumir um serviço desta forma, a melhor forma sempre será gerar os stubs do lado cliente, porém podemos também consumir um serviço desta maneira,  realizo a implementação de forma simples passando a requisição dentro de uma String mas também podemos montar essa entrada dentro do próprio código com XStream nada nos impede de criar e implementar códigos de modo genérico para que atendam nossas necessidades.

Resposta do Serviço: