使用JMeter測(cè)試你的EJB
對(duì)EJB進(jìn)行一些性能基準(zhǔn)測(cè)試是非常有必要和有幫助的,測(cè)試EJB的方法和工具有很多,不過我最近發(fā)現(xiàn),Apache JMeter是進(jìn)行基準(zhǔn)測(cè)試的一個(gè)優(yōu)秀工具??上У氖?,JMeter沒有提供一個(gè)可測(cè)試任意EJB的通用取樣器(sampler),不過,我們可以自己動(dòng)手來創(chuàng)建一個(gè)。
 
首先,讓我們簡(jiǎn)單的了解一下Apache JMeter,它是一個(gè)100%的純Java桌面應(yīng)用,可用于壓力測(cè)試和性能測(cè)量。它最初被設(shè)計(jì)用于Web應(yīng)用測(cè)試但后來擴(kuò)展到其他測(cè)試領(lǐng)域。 
在本篇文章中,我使用JBoss應(yīng)用服務(wù)器來運(yùn)行我的EJB。使用其它容器的實(shí)現(xiàn)過程應(yīng)該也非常類似。
1、首先為EJB創(chuàng)建一個(gè)工廠(factory)類
我們需要做的第一件事情是,創(chuàng)建一個(gè)簡(jiǎn)單的Singleton factory class,以為你的測(cè)試EJB客戶端實(shí)例。參考代碼如下:
- public class MyServiceFactory {
 - private static final Log log = LogFactory.getLog(MyServiceFactory.class);
 - private static MyService service;
 - private static MyServiceFactory me;
 - private MyServiceFactory() { }
 - static {
 - MyServiceFactory.me = new MyServiceFactory();
 - }
 - public static MyServiceFactory getInstance() {
 - return MyServiceFactory.me;
 - }
 - public MyService getService() {
 - if (MyService.service == null) {
 - try {
 - log.info("Loading the service...");
 - Context ctx = new InitialContext();
 - service = (MyService)ctx.lookup("MyAction/remote");
 - if (service == null) {
 - log.error("Didn't get the service!");
 - }
 - } catch (NamingException e) {
 - log.error("Error looking up the remote service", e);
 - return null;
 - }
 - }
 - return service;
 - }
 - }
 
2、編寫測(cè)試代碼
接下來我們需要自己編寫測(cè)試EJB代碼,為了實(shí)現(xiàn)這個(gè)目的,我們可以對(duì)JMeter的org.apache.jmeter.protocol.java.sampler包中的AbstractJavaSamplerClient類進(jìn)行擴(kuò)展。這個(gè)抽象類具有一個(gè)runTest方法,我們需要對(duì)其進(jìn)行重寫(override),使用這個(gè)方法來實(shí)現(xiàn)實(shí)際的測(cè)試。另外,我們還將重寫getDefaultParameters方法,以使其提供某些合理的默認(rèn)值,它們將在JMeter圖形應(yīng)用界面中
- package us.mikedesjardins.demo.jmeter;
 - import org.apache.jmeter.config.Arguments;
 - import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
 - import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
 - import org.apache.jmeter.samplers.SampleResult;
 - public class DigitalContentServiceEJBTestSampler extends AbstractJavaSamplerClient {
 - public SampleResult runTest(JavaSamplerContext context) {
 - SampleResult results = new SampleResult();
 - MyService service = MyServiceFactory.getInstance().getService();
 - results.sampleStart();
 - Long param1 = context.getLongParameter("PARAM_1");
 - String param2 = context.getStringParameter("PARAM_2");
 - MyResult result = service.myMethod(param1, param2);
 - if (result != null) {
 - results.setSuccessful(true);
 - results.setResponseCodeOK();
 - results.setResponseMessage("'myResult:" + myResult);
 - } else {
 - results.setSuccessful(false);
 - }
 - results.sampleEnd();
 - return results;
 - }
 - @Override
 - public Arguments getDefaultParameters() {
 - Arguments args = new Arguments();
 - args.addArgument("PARAM_1", "4815162342");
 - args.addArgument("PARAM_2", "Iculus");
 - return args;
 - }
 - }
 
3、運(yùn)行JMeter
JMeter的擴(kuò)展lib目錄是${JMETER_INSTALL_LIB}/lib/ext。你需要把所有EJB客戶端所需要的jar文件拷貝到這個(gè)目錄中。如果你使用的是JBoss,則需要把jbossall-client.jar拷貝到這個(gè)目錄中;對(duì)于其它應(yīng)用服務(wù)器,則拷貝類似的客戶端jar文件到這個(gè)目錄。
當(dāng)你啟動(dòng)JMeter后,你的新取樣器(sampler)將會(huì)出現(xiàn)在它的Sampler菜單中,這樣你就可以使用它來測(cè)試EJB了。
【編輯推薦】















 
 
 


 
 
 
 