Challenge Engineer Life !

エンジニア人生を楽しみたい!仕事や趣味で学んだ技術的なことを書いていくブログです。

オフライン機能をEmbedded GlassFishで実現できるか?

私自身あまり詳しくないのですが、SalesForce CRMにはオフライン機能があって、ネットワークに接続できない環境下でも顧客情報を確認したりできるとかなんとか。

html5の勉強会とかでもWeb Storageというのがあって、情報をローカルに保存できて~なんて話もあって、ネットワークがない環境下でもWebシステムを使いたいケースというのはあるのかな、と。

というか実際そういう要件があって、ネットワークに接続していない環境でもJava EE6で構築したシステムを利用するという話があったりなかったり……(^^;

最初から意識して作ってたわけではないので、うーむ…と頭を抱えそうだったのですが、そういえば昔、組込みGlassFishなるものがあるとか聞いたような…。

ってか、テストフレームワークのArqullianで使ってるし( ̄□ ̄;!

というわけで、調べてみたら日本語の情報が既にたくさんありました。おおー。

しんさんの出張所 はてな編 @shinsan68kさんのブログ

裏紙 @backpaper0さんのブログとスライド

その他にも

本家(Oracle)

日本語たくさんで頼もしい!

というわけで、完全に後追いレベルですが、自分も簡単なサンプル作ってみました。

NetBeansMavenJava SEプロジェクトを作成して、pom.xmlにEmbedded GlassFishの依存性を記述してビルドします。

<dependency>
    <groupId>org.glassfish.main.extras</groupId>
    <artifactId>glassfish-embedded-all</artifactId>
    <version>3.1.2.2</version>
</dependency>

あとはMainで

package jp.co.hoge.embeddedglassfishsample;

import java.io.File;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.glassfish.embeddable.Deployer;
import org.glassfish.embeddable.GlassFish;
import org.glassfish.embeddable.GlassFishException;
import org.glassfish.embeddable.GlassFishProperties;
import org.glassfish.embeddable.GlassFishRuntime;

public class App 
{
    public static void main( String[] args )
    {
        try {
            //HTTPでポート8000に設定
            GlassFishProperties gfPropes = new GlassFishProperties();
            gfPropes.setPort("http-listener", 8000);

            //Embedded GlassFish起動
            final GlassFish glassFish = GlassFishRuntime.bootstrap().newGlassFish(gfPropes);
            glassFish.start();
            
            //Warのデプロイ
            File war = new File("C:\\Users\\kikutaro\\Documents\\NetBeansProjects\\EmbeddedGlassfishWeb\\dist\\EmbeddedGlassfishWeb.war");
            Deployer deploy = glassFish.getDeployer();
            deploy.deploy(war, "--name=EmbeddedGlassfishWeb", "--contextroot=EmbeddedGlassfishWeb", "--force=true");
            
            //Embedded GlassFishの停止と破棄
            glassFish.stop();
            glassFish.dispose();
        } catch (GlassFishException ex) {
            Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

stopで止めたあとなら、startで再度起動できるみたいです(disposeするとstartで再起動はできない)

デプロイしたwarはJava EE6で作ったJSFのビューだけ持つwarです(^^;

とりあえずNetBeansデバッグモードで起動して、stopの所にブレイクポイントを置きました。

f:id:kikutaro777:20131028203449j:plain

で、ブラウザを起動して、httpでlocalhostの8000にアクセスして、contextrootで指定した名前を打ちます。

f:id:kikutaro777:20131028203525j:plain

おお、でた!

f:id:kikutaro777:20131028203549j:plain

ボタン押してJavaScript実行されるだけのサンプルです(^^;

これベースに組込みDBを使ったりして検証していけば、インストール形式でユーザの環境を色々汚したりすることなくオフライン機能が実現できるんじゃなかろうかな…と淡い期待;

色々検証しないと。。。

にほんブログ村 IT技術ブログへ
にほんブログ村 にほんブログ村 IT技術ブログ Javaへ
にほんブログ村