oinume journal

Scratchpad of what I learned

JRebelを使ってJava開発時のサーバの再起動をなくす

JRebelというソフトウェアを使うと、JavaでWebアプリケーションを開発する時に、ソースの修正→サーバ再起動 or 再ディプロイ がいらなくなるよーという話。

ライセンス

商用で使う場合はちゃんとライセンスを購入する必要があるけど、Socialという謎ライセンスだとフリーで使えるみたい。(ちゃんと理解してない)

myJRebel Social is a FREE version of myJRebel that is meant for anyone working on non-commercial projects, who is tired of building and redeploying Java code.

インストール

Eclipseを使っていれば Help -> Eclipse Market Place をクリックして jrebel と検索するとプラグインがインストールできるのでインストールして終わり。再起動すると設定画面が出るので、myJRebelのサイトに登録して、指示通りにSocialのPlanを選択してAtivateするとライセンスコードが表示されるので、それをEclipseの画面でコピペすればOK。

今回試した時の環境

使ってみる

自分はサーバの起動にはMavenのjetty:runを使っているので、その起動の設定画面で下記のようにJRebelタブをクリックして"Enable JRebel Agent"をクリックすればOK。

f:id:oinume:20130608131554p:plain

あとはEclipseで Project -> Build Automatically にチェックが入っているかを確認。これが入っていないとソースを更新してもコンパイルされないのであまり恩恵が受けられない。

この状態でサーバを起動するとConsoleに下記のように表示される。

2013-06-08 12:54:14 JRebel: #############################################################
2013-06-08 12:54:14 JRebel: 
2013-06-08 12:54:14 JRebel:  JRebel 5.3.0 (201305281348)
2013-06-08 12:54:14 JRebel:  (c) Copyright ZeroTurnaround OU, Estonia, Tartu.
2013-06-08 12:54:14 JRebel: 
2013-06-08 12:54:14 JRebel:  Over the last 1 days JRebel prevented 
2013-06-08 12:54:14 JRebel:  at least 1 redeploys/restarts saving you about 0 hours.
2013-06-08 12:54:14 JRebel: 
2013-06-08 12:54:14 JRebel:  This product is licensed to Kazuhiro Oinuma
2013-06-08 12:54:14 JRebel: 
2013-06-08 12:54:14 JRebel:  License acquired through myJRebel server.
2013-06-08 12:54:14 JRebel: 
2013-06-08 12:54:14 JRebel:  You are subscribed for the plan "JRebel Social Plan",
2013-06-08 12:54:14 JRebel:  subscription is for lifetime.
2013-06-08 12:54:14 JRebel:  next license check with the server is required by 2013-06-09.

あとは実際にControllerなどのソースコードをいじってみて修正が反映されているかを確認してみよう。自分はこんな感じのコードで model.addAttribute("message", "hello world"); の部分を修正して試してみた。

IndexController

package net.lampetty.samples.spring.mvc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class IndexController {

    @RequestMapping(value = "/")
    public String index(Model model) {
        model.addAttribute("message", "hello world");
        return "/index";
    }
}

index.ftl

<html>
<head>
<title>index</title>
</head>
<body>
${message!"Default message"}
</body>
</html>

Ecipse 3.7 Indigoを使っている場合

どうもEclipse 3.7だとJRebelのプラグインの最新のバージョンがインストール出来ないせいかうまく動かなかったので、Standalone版をインストールしたところうまく動いた。

JRebelのサイトからダウンロードして ~/jrebel に解凍。んで ~/jrebel/bin/jrebel-config.jar をダブルクリックするとライセンスを入力する画面が出てくるのでアクティベートしておく。あとはEclipseから jetty:run でサーバを起動するときのJVMのオプションに ~/jrebel/jrebel.jar のフルパスを書いておくことでちゃんと使えるようになる。

-javaagent:/Users/kazuhiro/jrebel.jar -Xms256m -Xmx512m -XX:MaxPermSize=256m

詳しいことは公式ドキュメントを見てもらえればと。

まとめ

JRebel でディプロイする時間を節約してビーチにでも行こうぜ!

現場で使えるJavaライブラリ

現場で使えるJavaライブラリ