Com esse recurso, é possível realizar o profiling (captura de informações a respeito de desempenho) em qualquer bean do Spring. As informações são capturadas a cada chamada dos métodos e gravadas em memória. De tempos em tempos, um timer pega essas informações e registra no banco de dados, para consulta posterior. Essa consulta pode ser realizada no SIGAdmin, através do link Suporte Técnico → Consultar Informações de Profiling.
O profiling foi implementado utilizando programação orientada a aspectos com o Spring e o AspectJ. Foi criada uma anotação chamada @Metrics
, que deve ser colocada em uma classe ou em um método, e recebe como parâmetro um array de objetos de uma enum chamada MetricType
. A enum possui os seguintes tipos de métricas: COUNT_CALL, TIME e MAX_TIME, que servem para medir o número de chamadas, o tempo médio de execução e o tempo máximo de execução dos métodos.
Foi criado ainda uma classe chamada ProfilingAspect
, que contém um around advice em torno de métodos de classes que contenham a anotação @Metrics ou métodos que contenham a anotação @Metrics. Esse advice calcula os valores de desempenho explicados acima e armazenam em três mapas estáticos, um para cada tipo de informação. De tempos em tempos, um timer pega as informações dos mapas estáticos e insere essas informações no banco de dados, na tabela infra.profiling
.
Para que uma determinada classe seja interceptada pelo aspecto de profiling, é necessário que ela seja um bean do Spring, ou seja, tenha a anotação @Component
e o seu pacote seja escaneado no applicationContext.xml
. Para DAOs, que são a grande maioria das classes interceptadas pelo profiler, deve-se colocar o escopo session.
Além disso, a classe deve possuir a anotação @Metrics
, informando todos os MetricType
necessários para o profiling.
Na classe Java:
@Component @Scope("session") @Metrics({MetricType.COUNT_CALL, MetricType.MAX_TIME, MetricType.TIME}) public class BaseArquivosDao extends GenericDAOImpl { ...
No applicationContext.xml:
<context:component-scan base-package="br.ufrn.comum.dao"/> <context:component-scan base-package="br.ufrn.admin.dao"/>
As consultas podem ser realizadas no SIGAdmin, no link Suporte Técnico → Consultar Informações de Profiling. Nessa consulta, é possível buscar informações de profiling por classe, método, número máximo de chamadas, tempo médio de execução, com diversas possibilidades de ordenação.