====== Profiling ======
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.
===== Implementação =====
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''.
===== Utilização =====
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.
===== Exemplo de Uso =====
Na classe Java:
@Component @Scope("session")
@Metrics({MetricType.COUNT_CALL, MetricType.MAX_TIME, MetricType.TIME})
public class BaseArquivosDao extends GenericDAOImpl {
...
No applicationContext.xml:
===== Consultas =====
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.