戈思汉 高波
 
Java运行时间测量:JETM
JETM是一个Java程序执行时间测量工具。帮助开发人员定位Java程序中的性能问题。
http://jetm.void.fm/
该jetm是一个免费的jar包,可以放入其他项目中调用api来使用
通常我们自己调试通过System.currentTimeMillis()打出程序段执行的时间,而现在
直接借用jetm就能像log4j 那样随意设置程序段执行时间。
 
简单地嵌入代码中:
public class BusinessService {
private static final EtmMonitor
etmMonitor = EtmManager.getEtmMonitor();
public void someMethod() {
           EtmPoint point = etmMonitor.createPoint("BusinessService:someMethod");
           try {
             //
             // some business code
             //
             nestedMethod();
           } finally {
             point.collect();
           }
        }
  public void nestedMethod() {
  EtmPoint point = etmMonitor.createPoint("BusinessService:nestedMethod");
           try {
             // some business code
           } finally {
             point.collect();
           }
        }
    }
 
上面的简单模式是要直接嵌入到目的代码中,如果引用AOP的思路,就只要通过配置实现嵌入动作。
比如,和spring集成,本身spring就是依据AOP思路开发的框架。
下面以spring 2.x为例,需要在spring的配置文件中添加jetm namespace和 jetm:runtime tag
下面为整个spring的配置文。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:jetm="http://jetm.void.fm/schema/jetm_spring_config_1_2"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
                           http://jetm.void.fm/schema/jetm_spring_config_1_2 http://jetm.void.fm/schema/jetm_spring_config_1_2.xsd ">
 
 <bean id="orderClient"
        class="etm.tutorial.fiveminute.client.OrderClient"
        autowire="constructor"/>
 
 <bean id="groceryStore"
        class="etm.tutorial.fiveminute.store.GroceryStoreImpl"
        autowire="constructor"/>
 
 <bean id="stockDao" class="etm.tutorial.fiveminute.store.dao.StockDaoImpl"
        autowire="constructor"/>
 
 <!-- Step 4: Add performance monitoring -->
 <!--
    <jetm:monitoring>
      <jetm:bean-pattern>*Dao</jetm:bean-pattern>
      <jetm:bean-pattern>groceryStore</jetm:bean-pattern>
    </jetm:monitoring>
 -->
 
 <!-- Step 5: Enable HTTP console -->
 <!--
    <jetm:console expanded="true"/>
 -->
 
 <jetm:runtime>
    <jetm:features>
 
      <!-- Step 6: Alter aggregation chain -->
      <!--
        <jetm:interval-buffer interval="1000"/>
      -->
 
      <!-- Step 7: Log raw performance results -->
      <!--
        <jetm:raw-data-log type="commons"/>
      -->
 
    </jetm:features>
 </jetm:runtime>
 
</beans>
 
另外集成aop框架AspectWerkz
Aop.xml为
<!DOCTYPE aspectwerkz PUBLIC "-//AspectWerkz//DTD 2.0//EN"
  "http://aspectwerkz.codehaus.org/dtd/aspectwerkz2.dtd">
 
<aspectwerkz>
 <system id="weaving-example">
 
    <aspect class="etm.contrib.aop.aspectwerkz.EtmAspectWerkzAspect"
            deployment-model="perJVM">
 
      <pointcut name="etmExample" expression="
          execution(public * etm.samples.aop.aspectwerkz.*Service.*(..))
          OR
          execution(public * etm.samples.aop.aspectwerkz.Dao+.*(..))
      "/>
 
      <advice name="monitor" type="around" bind-to="etmExample"/>
 
    </aspect>
 
 </system>
</aspectwerkz>