segunda-feira, 10 de março de 2008

VisualVM

Desde o JDK 1.4.2 até o Java SE 6, têm evoluído cada vez mais os recursos e as ferramentas para gerenciamento e instrumentação de máquinas virtuais Java (JVMs) e de aplicações executando nelas, local ou remotamente.
Estes potencialidades, em maior parte, são possíveis graças à tecnologia Java Management Extensions (JMX), que se tornou parte padrão da plataforma Java SE no J2SE 5.0. Através de JXM, pode-se construir mecanismos padronizados para desde coletar informações e estatísticas até atuar dinamicamente em parâmetros e recursos de componentes Java. A própria máquina virtual Java HotSpot da Sun usa extensivamente JMX para oferecer amplos recursos de instrumentação para os mais diversos aspectos da JVM, como alocação de memória, uso de CPU, threads e opções de execução. Servidores de aplicação Java livres (Tomcat, JBoss, Glassfish…) e comerciais também utilizam JMX para oferecer recursos de monitoramento e gerenciamento em tempo real.




A iniciativa mais recente é a ferramenta gráfica VisualVM, projeto de software livre (licença GPLv2+CE) sendo desenvolvido no portal java.net. A VisualVM visa integrar diversas ferramentas de gerenciamento de software existentes no JDK e recursos para profiling de memória e CPU, mas creio que principalmente o JConsole.
VisualVM ainda está no Milestone 3 (lançado em 19 de fevereiro), mas já mostra bem suas possibilidades de aplicação no monitoramento, instrumentação e profiling.

Para saber mais, artigos e guias das ferramentas de gerenciamento Java (em inglês):

Visual VM: Free and Open Source Java Troubleshooter, por Geertjan Wielenga, 2008-02-21, Javalobby.

Getting Started Extending VisualVM - Parte 1 (2008-02-26),
Parte 2 (2008-02-27),
Parte 3 (2008-02-28),
Parte 4 (2008-02-29),
Parte 5 (2008-01-03);
por Geertjan Wielenga, em seu blog, Sun Microsystems, Praga, República Tcheca.
Getting Started with Java Management Extensions (JMX): Developing Management and Monitoring Solutions,
por Qusay H. Mahmoud, 2004-01-06, SDN.
JSR 255: Java Management Extensions (JMX) Specification, version 2.0.
Especificação que atualiza as APIs JMX e JMX Remote para Java SE 6.0.
Monitoring and Management for the Java Platform,
parte da documentação de Java SE 6.0. Em especial, veja o guia
Overview of Java SE Monitoring and Management
e a documentação das ferramentas JConsole, jps, jstat, jstatd. Esta documentação
também existe para o JDK 5.0.
Using JConsole to Monitor Applications, por Mandy Chung, dezembro 2004.
Monitoring Local and Remote Applications Using JMX 1.2 and JConsole,
por Russell Miles, 2004-09-29, O’Reilly ONJava.com.
jvmstat 3.0, SDN Code sample.

T+

Leandro Kersting

sexta-feira, 7 de março de 2008

sábado, 1 de março de 2008

Java Persistence API - JPA

Criada para ser o padrão de persistência e mapeamento Objeto-Relacional, a Java Persistence API - JPA - foi concebida na mesma JSR, de número 220, que definiu a nova versão dos Enterprise JavaBeans.

Com preocupações sobre a evolução desta API, existe a expectativa de se criar uma JSR exclusiva para ela. Mas, ainda, não existe nada de concreto neste sentido.

Originalmente a idéia era simplificar a especificação dos EJBs Entity Beans do tipo CMP(Container Managed Persistence), daí a JPA ter sido desenvolvido na mesma JSR dos EJB. Porém, o Expert Group percebeu que seria melhor fazer uma especificação seguindo o estilo dos frameworks de persistência disponíveis no mercado: Hibernate, Toplink e JDO. Unindo as melhores idéias em cada um deles. O que motivaria a criação de uma nova JSR.

Se você tiver um ambiente de produção com uma JVM atualizada para a versão 5 é uma das melhores atualizações que podem ser utilizadas nos seus próximos sistemas.

Antes de escrever um tutorial sobre o assunto, vou listar alguns dos tutoriais que eu já li para implementar meu primeiro sistema com a JPA:

  1. An Introduction to Java Persistence for Client-Side Developers: Explica de forma clara como funciona a API usando como exemplo uma agenda. É um ótimo ponto de partida para conhecer a especificação e ter alguma coisa rodando. Utiliza a implementação TopLink Essentials;
  2. More Persistence for Client-Side Developers: Continuação do artigo anterior explica conceitos sobre o ciclo de vida dos objetos no EntityManager e fala sobre relacionamentos entre objetos. Utiliza a implementação Hibernate;
  3. Persistence Pays Offs: Advanced Mapping with JPA: Explicações mais avançadas sobre mapeamento. Herança e associações * * são abordadas neste artigo.

  4. Using Composite Keys with JPA: Tutorial sobre mapeamento de chave primária composta. Recomendado apenas quando o banco de dados já existe.
  5. TopLink JPA: Tutorial da Oracle. Utiliza a implementação TopLink Essentials, que é a Implementação de Referencia(RI), e está disponível junto com o novo servidor de aplicações JEE - GlassFish;
  6. Eclipse DALI: Plugin do Eclipse para auxiliar na utilização do JPA. Tem uns links para os tutoriais dos provedores de persistência.
  7. Managing JPA Entity Mappings: Tutorial desenvolvido pela BEA para mostrar o suporte visual dado pelo Workshop Studio para o desenvolvimento de aplicações de JPA.
  8. The Java Persistence API - A Simpler Programming Model for Entity Persistence: Comparação entre a versão anterior do EJB EntityBean CMP e a JPA apresentada pela Sun Microsystem.
  9. Field- vs. Property-Based access in JPA: Uma reflexão, feita por Adam Bien, sobre a forma de acesso aos atributos da entidade pelo EntityManager;
  10. Property Based Access in JPA - is an Emerging Antipattern: Crítica a utilização de anotações JPA feita em métodos getXXX(), também conhecido por Propety Based Access.
  11. Using Java Web Start with the Java Persistence API: Usando JPA com JavaWebStart.

T+

Leandro Kersting