JSFもJMeterでレスポンステストしてみる

昨日のJMeterを使ったテストが面白かったので今回はJSFをやってみる。

重い重いといわれてるので、どれだけ他のフレームワークより重いのかの検証。ただ、ポストバックは面倒だったのでポストバックじゃないほうで。各種スコープに沿った管理Beanの生成やレンダーフェーズは飛ばしてないから多少は参考になるかな。

実行はGlassfish V3に付属のMojarraで。つまり、RI。一番出来が良いといわれているJSF 1.2の実装だ。

実装

管理Beanのコード。

public class TestBean {

    public String getMessage() {
        return "ほげほげ";
    }
    
}


JSPファイル。NetBeansJSFフレームワークを利用した場合デフォルトで生成されるJSP部分を変更しただけ。

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>

<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<f:view>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <h1><h:outputText value="#{testBean.message}" /></h1>
    </body>
</html>
</f:view>


環境設定ファイル。

<?xml version='1.0' encoding='UTF-8'?>

<!-- =========== FULL CONFIGURATION FILE ================================== -->

<faces-config version="1.2" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
    <managed-bean>
        <managed-bean-name>testBean</managed-bean-name>
        <managed-bean-class>TestBean</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>
</faces-config>

実行!

んー。パフォーマンスめちゃくちゃ良い。ちょっと驚いた。

EJBでも使ってみる

他はコンテナ管理してるけど、JSFの管理Beanはスコープ管理しかしてないからちょっと差がありすぎるかな。EJBをインジェクトしてみる。


EJBは以下のコード

@Stateless
public class TestEJB {
    public String getMessage(){
        return "EJBからほげほげ";
    }
}


管理beanを以下のように変更。

public class TestBean {
    @EJB
    private TestEJB testEJB;

    public String getMessage() {
        return testEJB.getMessage();
    }

    
}

んー?

変わらないや。サンプル数1000にして試してみたけど、遅いパターンが現れず、ずっと安定して15ms以下くらいが続く。

まぁ、いいか。EJBはオブジェクトプールで使いまわされてると思うのだが、requestのほうはどう考えても毎回破棄されてるよね。あまりにコンパクトだからnew世代のGCで消えてるのかな。でもそうなるとコンパクトを売りにしてるT2Framework、というかLucyのほうも重くなるとは考えにくい。SimpleAdapterとかGuiceとか他のアダプタをやってみるとまた変わってくるのかな。