# perceptor
Java EE Performance Measuring Interceptor
## installation
To gather statistics without automatically exposing them use the following dependency:
```xml
<dependency>
<groupId>com.airhacks</groupId>
<artifactId>perceptor</artifactId>
<version>[RECENT]</version>
</dependency>
```
The statistics become available via injection:
```java
import com.airhacks.interceptor.monitoring.control.InvocationMonitoring;
public class MonitoringResource {
@Inject
InvocationMonitoring mes;
}
```
The `perceptor-spy` dependency gathers statistics and exposes them via
the `/monitoring/methods` endpoint:
```xml
<dependency>
<groupId>com.airhacks</groupId>
<artifactId>perceptor-spy</artifactId>
<version>[RECENT]</version>
</dependency>
```
## usage
```java
import com.airhacks.interceptor.monitoring.boundary.PerformanceSensor;
@Interceptors(PerformanceSensor.class)
public class Invoker {
public String slow() {}
public String fast() {}
}
```
## statistics API
all method invocations:
`curl [THIN_WAR]/resources/monitoring/methods`
all method invocations, sorted by timestamp:
`curl [THIN_WAR]/resources/monitoring/methods/recent`
slowest methods:
`curl [THIN_WAR]/resources/monitoring/methods/slowest`
methods throwing exceptions:
`curl [THIN_WAR]/resources/monitoring/methods/exceptional`
methods throwing exceptions, sorted by exception amount:
`curl [THIN_WAR]/resources/monitoring/methods/unstable`
See you at [Java EE Performance, Monitoring and Troubleshooting](http://workshops.adam-bien.com/performance.htm) and/or [Java EE Microservices](http://workshops.adam-bien.com/microservices.htm) workshops
Java EE Performance Measuring Interceptor.zip
需积分: 0 93 浏览量
更新于2023-12-29
收藏 24KB ZIP 举报
Java EE(Enterprise Edition)是Java平台上用于构建企业级应用程序的标准框架。在Java EE中,Interceptor(拦截器)是一个强大的设计模式,它允许开发者在特定的业务操作前后插入自定义的行为,比如性能测量、日志记录或者事务管理。"Java EE Performance Measuring Interceptor"的主题表明我们正在探讨如何利用拦截器来度量Java EE应用程序的性能。
在Java EE 6及更高版本中,JSR 318引入了拦截器规范,使得开发者可以创建符合统一接口的拦截器,这些拦截器可以与EJB(Enterprise JavaBeans)或者CDI(Contexts and Dependency Injection)一起工作。拦截器通过在调用目标方法之前和之后执行代码,能够提供一种非侵入式的性能监控解决方案。
1. **什么是拦截器(Interceptor)?**
拦截器是一种面向切面编程(AOP)的实现方式,它可以拦截并处理应用程序中的方法调用。在Java EE环境中,拦截器可以应用于EJB或CDI组件,通过声明式的方式添加到服务层方法上,执行预处理和后处理逻辑。
2. **为什么要使用拦截器进行性能测量?**
使用拦截器进行性能测量的好处在于,它可以在不修改业务代码的情况下,轻松地添加、移除或调整性能监控功能。这种方法使得性能分析更加灵活,同时减少了对代码的耦合。
3. **性能测量的基本步骤**
- **开始计时**:在拦截器的`@AroundInvoke`方法开始时记录时间戳,作为性能测量的起点。
- **执行业务逻辑**:调用下一个拦截器或目标方法。
- **结束计时**:在业务逻辑执行完毕后记录另一个时间戳,作为性能测量的终点。
- **计算并记录结果**:比较两个时间戳的差值,计算方法的执行时间,并将结果存储或输出。
4. **如何实现一个性能测量拦截器?**
- 定义一个实现了`Interceptor`接口的类,并使用`@Interceptors`注解标记目标组件。
- 在拦截器类中,实现`@AroundInvoke`方法,其中包含开始和结束计时的逻辑。
- 如果需要,可以使用`@Priority`注解来控制拦截器的执行顺序。
5. **性能数据的处理**
- 数据可以简单地记录到日志文件,以便后期分析。
- 或者,可以将数据发送到监控系统,如JMX(Java Management Extensions)或应用性能管理(APM)工具,如New Relic、AppDynamics等。
- 数据还可以被聚合和可视化,帮助识别性能瓶颈和优化点。
6. **注意事项**
- 虽然拦截器提供了便利,但过度使用可能会影响应用程序的性能,因为每次方法调用都会增加额外的开销。
- 在生产环境中,应谨慎选择要拦截的方法,避免对关键业务流程造成影响。
7. **扩展应用**
- 拦截器不仅用于性能测量,还可以用于实现跨切面的其他功能,如安全检查、事务管理、日志记录、缓存管理和异常处理等。
- 通过结合CDI事件和拦截器,可以创建复杂的监控系统,实时通知性能问题。
通过理解这些概念和实践,开发者可以有效地利用Java EE的拦截器机制来提升应用程序的性能监控能力,从而更好地维护和优化他们的企业级应用。

zero2100
- 粉丝: 178
最新资源
- 高职《化工单元操作》教学资源库的网络建设研究.docx
- 智能家居远程监控系统的研究与设计.docx
- 上海嘉定-应用物联网的十大工程等.docx
- 高中信息应用技术photoshop基础专题训练.doc
- 语音识别与合成-第1篇-洞察研究.pptx
- 大数据时代对人事档案创新管理的影响及优化.docx
- 计算机应用基础复习题及答案.ppt
- 第1章JSP简介.ppt
- 网络数据库课程设计——学籍管理系统.doc
- 以冬奥申报成功为契机-基于互联网探索冰雪运动英语的传播路径.docx
- 计算机技术应用的发展与展望.docx
- 中级软件设计方案师2018上半年上午试题及答案解析.docx
- 软件技术应用和发展.doc
- 中文版)铁路应用通信信号和过程控制系统信号安全相关电子.doc
- 电气工程及自动化控制在化工企业的应用分析.docx
- (源码)基于C++和RISCV指令集架构的在线Web解释器.zip