Archive for 5月, 2008

データセンターでインストールも楽なGlassFish Enterprise Server




そういえば、ふと紹介していなかったのを思い出したので、

今日はコンソールベースでGlassFishをインストールする方法を紹介します。



Sun GlassFish Enterprise Server(Sun Java System Application Server)の

インストーラはデータセンターでインストールする時(GUIが使えない環境)も

インストールがもかんたんです。



インストール時に-consoleオプションを指定してください。




> ./sjsas_ee-9_1_02-solaris-sparc-ml.bin -console

Checking available disk space…

Checking Java(TM) 2 Runtime Environment…

Extracting Java(TM) 2 Runtime Environment files…

Extracting installation files…

Launching Java(TM) 2 Runtime Environment…

Java Accessibility Bridge for GNOME loaded.





You are running the installation program for Sun Java System Application Server

with HADB. This program asks you to supply configuration preference settings

that it uses to install the server.



The installation program consists of one or more selections that provide you

with information and let you enter preferences that determine how Sun Java

System Application Server with HADB is installed and configured.



When you are presented with the following question, the installation process

pauses to allow you to read the information that has been presented. When you

are ready, press Enter to continue.



……………………………………..

Please contact Sun Microsystems, Inc. 4150 Network Circle,

Santa Clara, California 95054 if you have questions.



If you have read and accept all the terms of the entire Software License

Agreement, answer ‘yes’, and the installation will continue.



If you do not accept all the terms of the Software License Agreement, answer

‘no’, and the installation program will end without installing the product.



Have you read, and do you accept, all of the terms of the preceding Software

License Agreement [no] {“<" goes back, "!" exits}? Yes



The Sun Java System Application Server with HADB components will be installed

in the following directory, which is referred to as the “Installation

Directory”.To use this directory, press only the Enter key. To use a different

directory, type in the full path of the directory to use followed by pressing

the Enter key.



Installation Directory [/opt/SUNWappserver] {“<" goes back, "!" exits}: /opt/SUNWappserver


The directory “/opt/SUNWappserver” does not exist.





Do you want to create it now or choose another directory?



1. Create Directory

2. Choose New



Enter the number corresponding to your choice [1] {“<" goes back, "!"

exits} 1



Please choose components.



Do you want to install Node Agent [yes] {“<" goes back, "!" exits}? yes

Do you want to install High Availability Database Server [no] {“<" goes

back, “!” exits}? yes
Do you want to install Load Balancing Plugin [no] {“<" goes back, "!"

exits}? no

Do you want to install Domain Administration Server [yes] {“<" goes back,

“!” exits}? yes

Do you want to install Sample Applications [yes] {“<" goes back, "!" exits}? yes

Java Configuration



The Sun Java System Application Server requires a Java 2 SDK.

Please provide the path to a Java 2 SDK 5.0 or greater.



1. Install Java 2 SDK (5.0)

2. Reuse existing Java 2 SDK

3. Exit



What would you like to do [1] {“<" goes back, "!" exits}? 1

Supply the admin user’s password and override any of the other initial

configuration settings as necessary.

Admin User [admin] {“<" goes back, "!" exits}: admin

Admin User’s Password (8 chars minimum):[********]

Re-enter Password: [********]

Master Password will be used as SSL certificate database password.

Master Password (8 chars minimum):[********]

Re-enter Master Password:[********]

Admin Port [4848] {“<" goes back, "!" exits}:

HTTP Port [8080] {“<" goes back, "!" exits}:

HTTPS Port [8181] {“<" goes back, "!" exits}:



Please choose installation options.

Do you want to enable Updatecenter client [yes] {“<" goes back, "!" exits}? yes

Do you want to upgrade from previous Application Server version [no] {“<"

goes back, “!” exits}? no

Checking disk space…





The following items for the product Sun Java System Application Server with

HADB will be installed:



Product: Sun Java System Application Server with HADB

Location: /opt/SUNWappserver

Space Required: 462.04 MB

—————————————————–

Java 2 SDK, Standard Edition 5.0

Uninstall

Sun Java System Message Queue 4.1

Application Server

Sample Applications

High Availability Database Server

High Availability Database Administration Client

Startup





Ready to Install



1. Install Now

2. Start Over

3. Exit Installation



What would you like to do [1] {“<" goes back, "!" exits}? 1



Installing Sun Java System Application Server with HADB



|-1%————–25%—————–50%—————–75%————–100%|



Installation Successful.



Next Steps:



1. Access the About Application Server 9.1 welcome page at:

file:///opt/SUNWappserver/docs/about.html



2. Start the Application Server by executing:

/optSUNWappserver/bin/asadmin start-domain –user admin domain1



3. Start the Admin Console:

https://localhost:4848



4. Access sample applications:

http://localhost:8080/samples/index.html





Please press Enter/Return key to exit the installation program. {“!” exits}

Deleting temporary files…

>





また、https://glassfish.dev.java.netからダウンロードしたGlassFishのインストールも

同様にコンソールオプションを使用してインストールができます。




> java -Xmx256m -jar glassfish-installer-v2ur2-b04-darwin-ml.jar -console

COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0



1. Definitions.



1.1. Contributor. means each individual or entity that creates or

contributes to the creation of Modifications.



1.2. Contributor Version. means the combination of the Original

Software, prior Modifications used by a Contributor (if any), and the

Modifications made by that particular Contributor.



1.3. Covered Software. means (a) the Original Software, or (b)

Modifications, or (c) the combination of files containing Original

Software with files containing Modifications, in each case including

portions thereof.



1.4. Executable. means the Covered Software in any form other than

Source Code.



(省略)……………………………………………………………………………………………..

…………………………………………………………………………………………………………

…………………………………………………………………………………………………………

…………………………………………………………………………………………………………



As a special exception, the copyright holders of this library give you

permission to link this library with independent modules to produce an

executable, regardless of the license terms of these independent

modules, and to copy and distribute the resulting executable under

terms of your choice, provided that you also meet, for each linked

independent module, the terms and conditions of the license of that

module.? An independent module is a module which is not derived from

or based on this library.? If you modify this library, you may extend

this exception to your version of the library, but you are not

obligated to do so.? If you do not wish to do so, delete this

exception statement from your version.



Accept or Decline? [A,D,a,d] a

glassfish

glassfish/docs

glassfish/docs/css

glassfish/docs/de

glassfish/docs/de/css

glassfish/docs/de/figures

glassfish/docs/de/graphics

glassfish/docs/es

glassfish/docs/es/css

glassfish/docs/es/figures


(省略)……………..

…………………………

…………………………

…………………………


glassfish/updatecenter/LICENSE.txt

glassfish/updatecenter/README

glassfish/updatecenter/registry/SYSTEM/local.xml

installation complete





2008年5月30日 at 3:40 AM コメントする

Hudsonを使ったアジャイルな開発入門








以前、Hudsonについて私のブログでもで紹介しましたが、

その後、Hudsonが今年のJava One 2008 サンフランシスコで

Duke Choice Award
受賞したことはご存知の方も多いことでしょう。



また、今日アクエリウム
でも報じられましたが、Hudsonの開発者である

川口さんついにHudsonを専業で開発できるようになったようですね。



Hudsonは開発の現場を変えることのできるツールです。

是非、皆様も試してみてくださあい。



そんな川口さんから、直接Hudsonについて日本語で説明されている記事が下記にあります。

是非、皆様下記の特集を読んでHudsonを使って開発効率をあげましょう!!



技術評論社 特集:「Hudsonを使ったアジャイルな開発入門」



川口さんの日本語ブログはこちら


2008年5月30日 at 1:30 AM コメントする

John Gage氏来日中




JavaOneの顔でありJavaOneのホスト役であるJohn Gage氏が現在、来日しています。

今回の目的は、明日5月29日(木)から「ザ・プリンス パークタワー東京」で開催される

グリーンIT国際シンポジウムでの発表が目的なのですが、少しだけ時間が取れたようで

御会いすることができました。















Sun Microsystems Inc.の創設メンバーの一人として長くSunを導いてきた方であり、

JavaOne会場の壇上でいつもプレゼンターを勤めるあの御方とこんな距離で

御会いできるとは思ってもみなかったので、今日は朝からかなりハイテンションでした。


2008年5月28日 at 12:15 AM コメントする

バグを見つけてGlassFish Award Program(GAP)へ登録しよう!!




先日、塩田さんからGlassFish Award Program(GAP)について詳しく説明して頂きました。



丁度その矢先にGAPの事務局の一人から下記のようなメールをもらいました。



これは以前、私がGlassFishのバグを登録していたのですが、

そのバグが修正され、GlassFishの質の向上につながったので、

GAPに応募しないか?という内容でした。


私はSunの社員なのでこのGAPには応募はできないのですが、

もし、GlassFishのバグを見つけたという方がいらっしゃいましたら、

是非、バグ登録をしてGAPにご応募ください。




I have been doing some digging in the issues filed recently (and mostly fixed)
against GlassFish.

You’re receiving this email because you’ve submitted a bug which led to a fix
which in turn improved GlassFish or one of its sub-projects.



I’d like to remind you that we’re running the GAP
(GlassFish Awards Program – http://glassfish.org/GAP) and that as part of
it we’re rewarding valuable bug reports.



Since you’re receiving this (and you are not a Sun employee), you are most likely eligible.

So, please feel free to send an email to with
your name and a reference to the bug report you’d like to compete with.


Of course, we’d love to have more valuable reports (say for the recent v2ur2 or v3),
so now is a good time to actually file that annoyance or serious issue you’ve been
working around for a while.




バグは見つけているんだけど、英語になおすのはちょっとという方は

まずは、日本のコミュニティのメーリングリスト(グラジェーや、

discuss_ja@glassfish.dev.java.net メーリングリスト
)に参加し日本語で報告ください。



GlassFishコミュニティは日本ユーザの皆様の御参加を御待ちしております!!


2008年5月26日 at 7:00 PM コメントする

JavaOne 2008 報告会開催




大渕さんのブログでもアナウンスされていますが、

今月末の5/31(土)にJavaOne 2008 報告会がSunの

神宮前オフィスで開催されます。

昨日の夕方に登録開始して既に130名以上の登録が

あるようです。



何名で定員締め切りか私もしらないのですが、

現時点でまだ、申し込みが可能でしたので、

御時間に都合がつく方は是非御参加下さい。



Masako Ofuchi’s Weblog
登録〆切迫る – JavaOne 2008 報告会 -



● 参加のお申し込みはこちらから



PS.

当日、私も受付を行っております。

皆様の御来場を御待ちしております。(^_^)


2008年5月23日 at 2:35 AM コメントする

Grizzlyの概要 2 : Java New I/Oで実装されたサーバ




さてさて、今日も引き続きGrizzlyを説明したいと思いますが、

その前に、やはりJava New I/Oについて理解して頂かなければ

本当の意味でGrizzlyを理解していただけませんので、Grizzlyの

ソースコードを追う前にJava New I/Oについて簡単に復習して

おきたいと思います。

ただし、ここではほんの概要程度の説明ですのでちゃんと

理解されたい方は別途Java NIOについて説明されている記事を

読んで理解してください。


※ 本エントリの一番最後にJava New I/Oを学ぶことができる

  参考URLを示しています。



Java New I/Oでノンブロッキングサーバの実装:



前回、Java New I/Oを使って実装されたサーバは、今までの

マルチスレッド型のBlocking I/Oを使用して実装されたサーバより

新規スレッドを作成する必要がなくスレッド数を少なくすることが

できると説明しましたが、では具体的にどのようにして実装されているかを

説明致します。







まず、Non Blocking I/Oを理解する上で必要なJava New I/OのAPIを紹介します。



チャネル:


チャネルとは、ハードウェアデバイス、ファイル、ネットワークソケットのほか、

個別の入出力操作を実行できる接続を表します。

Non Blockingにできるチャネルは、java.nio.channels.SelectableChannelクラス

継承したサブクラスで、java.nio.channels.SocketChannel

java.nio.channels.ServerSocketChannelクラスがあります。

このクラスのインスタンスメソッドで、configureBlocking(false)を

実行するとチャネルをNon Blockingモードに調整することができます。



例えば、ServerSocketChannelを使ってチャネルをノンブロッキングモードに

する為には下記のようにserverChannel.configureBlocking(false)を記載します。









selector = Selector.open();
serverChannel = ServerSocketChannel.open();
serverChannel.configureBlocking(false);
serverChannel.socket().bind(new InetSocketAddress(SERVER_PORT));
serverChannel.register(selector, SelectionKey.OP_ACCEPT);
while (selector.select() > 0) {
for (Iterator it = selector.selectedKeys().iterator(); it.hasNext();) {
SelectionKey key = (SelectionKey) it.next();
it.remove();
if (key.isAcceptable()) {
doAccept((ServerSocketChannel) key.channel());
} else if (key.isReadable()) {
SocketChannel channel = (SocketChannel)key.channel();
doRead(channel);
}
}
}




serverChannelというチャネルをNon Blockingモードに設定した後、

Selectorのインスタンス selector に対してregister(登録)します。

実はこの行がJava New I/Oの中でとても重要な箇所です。



今までのマルチスレッド型のサーバの場合、java.net.ServerSocket.accept()メソッド

を呼び出してソケットのアクセプト処理を行っていましたが、Java New I/Oでは

java.nio.channels.ServerSocketChannel.accept()メソッドでアクセプト処理を行います。

この際、ServerSocketChannel.accept()メソッドはNon Blockingモードに設定されている場合、

保留されている接続がない場合、直ちにnullを返します。

つまりServerSocket.accept()のように新たなクライアントからの接続がくるまで

待ち続けることはありません。



しかし、クライアントからの接続を待たないということはサーバ側ではどのタイミングで

アクセプト処理を行えばよいのかが分からなくなります。

そこで、利用できるチャネル(接続)を取得する為にセレクタ(Selector.select())を使用します。

チャネルをセレクタに登録しておき、セレクタの中で利用できるようになったチャネルを

SelectionKeyとして取得して入出力操作を行うことができます。

セレクタには、複数のチャネルを登録することもでき、

複数の入出力操作を同時に行うことができるようになります。



例えば、下記にかんたんなエコーサーバをJava NIOを使用して

作成してみましたが、下記ではクライアントからの接続毎に

スレッドを生成していないことが御分かりいただけるかと思います。

また、マルチスレッド型のサーバのようにコネクション毎に新規スレッドを

生成していないことがわかります。



例:Java New I/Oで実装したサンプルエコーサーバ







import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.nio.charset.Charset;
import java.util.Iterator;
public class NonBlockingServer {
private static final int SERVER_PORT = 8888;
private static final int BUF_SIZE = 2000;
private Selector selector;
public static void main(String[] args) {
NonBlockingServer nserver = new NonBlockingServer();
nserver.start();
}
public void start(){
ServerSocketChannel serverChannel = null;
try {
selector = Selector.open();
serverChannel = ServerSocketChannel.open();
serverChannel.configureBlocking(false);
serverChannel.socket().bind(new InetSocketAddress(SERVER_PORT));
serverChannel.register(selector, SelectionKey.OP_ACCEPT);
while (selector.select() > 0) {
for (Iterator it = selector.selectedKeys().iterator();
it.hasNext();) {
SelectionKey key = (SelectionKey) it.next();
it.remove();
if (key.isAcceptable()) {
doAccept((ServerSocketChannel) key.channel());
} else if (key.isReadable()) {
SocketChannel channel = (SocketChannel)key.channel();
doRead(channel);
}
}
}
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
private void doAccept(ServerSocketChannel serverChannel) {
try {
SocketChannel channel = serverChannel.accept();
channel.configureBlocking(false);
channel.register(selector, SelectionKey.OP_READ);
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
private void doRead(SocketChannel channel) {
ByteBuffer buf = ByteBuffer.allocate(BUF_SIZE);
Charset charset = Charset.forName(“UTF-8″);
try {
if (channel.read(buf) < 0) {
return;
}
buf.flip();
System.out.print(
charset.decode(buf).toString());
buf.flip();
channel.write(buf);
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}




このように、Java New I/Oを使用して作成されたサーバは、接続毎に

新規スレッドを作成しなくてもよくなるため、既存のサーバ実装とは

特に大量のアクセス等が発生した際に大きな差がでてきます。

例えば、メモリの消費量も少なくて済むので高負荷時になればなるほど

使用するサーバリソースが大きく変わってくるかと思います。



次回は、Grizzly 1.0.19のソースコードを読む際にどこから見ていけばよいのか、

また、Grizzly 1.0.19の中でどのようなクラスが重要なのか等

ソースコードを見るために必要な情報を紹介したいと思います。



※  Grizzlyのソースコードを読む前に、上記のSelector,SocketChannel

  ServerSocketChannel,SelectionKey等のクラスを理解しておいてください。



Java New IOの参考記事へのURL:



● 横河電機の櫻庭さんによるIT Proの記事「New I/Oで高速な入出力」

● TECHSCORE (5. ノンブロッキングチャネル)


2008年5月23日 at 12:05 AM コメントする

SDC 連載記事 第3回:クラスタと負荷分散 (1)




SDC SQUARE 2008年5月号がリリースされました。

JavaOneのレポートの他、4月に開催されたイベントの情報も記載されています。

CommunityOne + 2008 JavaOne Conference テクニカルレポート

4 月開催のイベントレポート



また、GlassFish連載記事では第3弾として「GlassFishのクラスタ構成や負荷分散」

について、私の所属するグループの吉田さんにとても詳しく書いて頂いています。

  #GlassFishを複数台のマシンで構成する場合、どのようにして設定情報等を

  #共有するのかについて詳しく説明されていますので、是非一度御確認ください。

  ■ SDCのGlassFish連載記事 第3回:クラスタと負荷分散(1)



ちなみに、吉田さんには高橋さん岡崎さんと共に来月のイベントに登壇いただく予定です。

(私もしゃべるかも?!)

イベントの開催日時:2008年06月12日(木)

イベント情報:IT サービス設計の新しい方法論



また、SDCの連載記事ではGlassFish以外にも新しい技術が紹介されています。

『今月も片貝さんかな?!』によるNetBeans:第4回:ソースコードのバージョン管理

町田さんによるSun SPOT:第4回:入出力ポートにセンサーやアクチュエータを取り付けてみよう

の記事もありますので、是非ご覧ください。


2008年5月21日 at 12:00 AM 2件のコメント

Grizzlyの概要 : C10K問題に対応するGlassFish(Grizzly)


さて、おまたせ致しました。

本日より、JJUGで発表したGrizzlyについて紹介したいと思います。

まず、Grizzlyって聞いたことありますか?

「GrizzlyはGlassFishコミュニティの中のサブプロジェクトの1つで
JavaのNew I/Oを使って記述された汎用的なネットワークサーバエンジンです。」

Project Grizzly :
https://grizzly.dev.java.net/

Project Grizzlyによって開発された成果物(ネットワークサーバエンジン)は GlassFishとは独立して単体で使用することができます。また、Grizzlyは独自の進化を遂げていっています。現在、Grizzlyの最新バージョンは1.7.3.1です。

今回紹介するGrizzlyは少しバージョンが古いのですが、GlassFish v2.x系にバンドルされているGrizzly 1.0.x(1.0.19)について紹介します。

●Grizzly誕生の背景

まず、Grizzlyのできあがった背景について説明します。Grizzlyは元々GlassFishのHTTPをハンドリングするHTTPサーバを開発するプロジェクトとして開始しました。それまでのSunのアプリケーションサーバは、TomcatのCoyoteを内部で使用していたのですが、GlassFishではCoyoteを使用せずにJavaのNew I/Oを使用して実現するHTTPサーバとして実験的に作成を開始しました。
(Grizzly1.0.19でもHTMLの解析等で一部apacheのAPIを使用してます)

そして開発を進めて行くに従い、Grizzlyの潜在能力の高さが判明してき、HTTPだけではなく、他のプロトコルも扱うことのできる汎用的なネットワークサーバエンジンになりえることが分かってきました。その結果、現在ではHTTP以外にTCP,UDPといった下位のレイヤープロトコルを始めとし、TLS,FTPやSIP等といったマルチプロトコルに対応するハイパフォーマンスなネットワークサーバエンジンになっています。ですので、仮に開発者が新たに独自のネットワークサーバを構築する必要がでてきた場合、GrizzlyのAPIを一部拡張して実装して頂くことでハイパフォーマンスな独自ネットワークサーバを構築することも可能になっています。

例えば、GrizzlyのHTTPサーバエンジン以外の使用例として独自のsyslogサーバを構築することも可能になります。Grizzlyの背景とできることは上で説明しましたが、何故今ここでGrizzlyという新しいネットワークサーバエンジン(フレームワーク)が登場したのでしょうか。以下ではWebサーバの実装における過去の歴史とGrizzlyが登場した理由を説明します。

●Web サーバの実装における歴史
Webサーバは古くはCERN,NCSA等といった所で作成されていましたが、Apacheでhttpdが作成された後はApacheにシェアを奪われていきました。こういった古いWebサーバや初期のApache httpdはプロセス起動型のサーバの実装になっていました。

このプロセス起動型のサーバではHTTPクライアントであるブラウザからリクエストがくる度にhttpdのプロセスを起動しリクエスト数が多くなると子プロセスをfork()して処理を行っていました。当時のWebサーバは今程リクエスト数も多くなく、FastCGI等も無いこの時代にはサーバサイドで実行するプログラム(Perl,C等のCGI)もfork()して子プロセスで実行していました。

しかし、プロセスのfork()はシステム(OS)に対して多大な負担を掛けます。そこで登場したのがマルチスレッド型のサーバです。

マルチスレッド型のサーバでは単一のプロセス内でリクエスト毎にスレッドを起動し、各スレッドでHTTPの処理を行うことで、子プロセスを起動するよりシステムに対する負担は大幅に軽減するようになります。この頃になり、マルチスレッドサーバ上でサーバサイドで実行するプログラムとしてServletが脚光を浴びました。しかし、実際のWebサーバの実装は上に説明した程簡単ではありません。上記の図中にスレッドの起動プログラム例を記載していますが、Webサーバのように大量のリクエストを扱うようなプログラムの場合、accept()の処理は負荷はあまり掛からないのですが、スレッドの起動はaccept()の処理に比べ非常に負荷が高くなってしまいます。この状況ではパフォーマンスにボトルネックが生じます。

そこで、スレッドの起動に関する問題を軽減する為に、実際のWebサーバではaccept()処理とスレッドの処理を分離し、間に接続キューを設けることでaccept()の処理を素早く受け流すことができるようになります。(SunのWeb ServerはC++で上記のように実装)そして、実際にHTTPの処理を行うワーカスレッドが接続キューからコネクションを取得し、HTTPの処理を行うようになります。他のサーバの実装を細かく見たことはありませんが、恐らく現在のWebサーバの実装は似たような実装になっているのではないかと思います。

●マルチスレッドサーバの問題 (Blocking I/O型サーバ)
ソケット通信を行うプログラムを実装する場合、accept()やI/Oのread(),write()等を使用しますが、これらのメソッドは処理をブロックします。

例えば、ServerSocket#accept()メソッドはクライアントが接続するまで待ち状態になり、クライアントからの接続があって初めてメソッドの処理を終了します。複数のクライアントからの接続を処理できるようにする為には、サンプルのようにスレッドを生成し実際の処理は別スレッドで行うように実装します。このような実装の場合、接続してくるクライアントの数が増えれば増える程、大量のスレッドが生成されることになります。そして、スレッドが大量に生成される場合、大量のメモリが必要になってきます。下記のグラフではJavaでスレッド数を増やしていった場合に実際に必要なスレッドのスタックサイズを現していますが、これによると10,000スレッドを同時に生成した場合、約10Gバイトのメモリが必要になっています。また、2万スレッドになると約20Gバイトのメモリが必要になっていることがわかります。このように、単純にスレッドを増やしていくモデルのサーバはアクセス数が増えれば増える程大量のメモリを消費していくことがわかります。

●C10K問題を解決できるサーバ (Non Blocking I/O型サーバ)
GlassFish(Grizzly)は上記の問題を解決するためにNon Blocking I/Oを使用して実装が施されています。Non Blocking I/Oを使用するとスレッドの作成数を減らすことができます。

実際には、Java NIOではServerSocketChannel#accept()メソッドでaccept処理を行いますが、この処理はブロックしません。仮にこのメソッドが呼び出された時にクライアントからの接続がない場合は、すぐにnullを返します。ServerSocket#accept()メソッドのように処理をブロックしないので、クライアントのリクエスト毎に新たなスレッドを生成する必要もなくなります。言い換えると、ServerSocketChannel#accept()を呼び出した元のスレッドで引き続き処理を続けることができるようになります。

※ つまり複数のリクエストを処理するために、接続毎に新規スレッドを生成しなくてもよいようになります。

Grizzlyの開発者の1人であるJean-Francoisは次のように述べています。
「Grizzlyではたった30スレッドで10,000の接続を捌くことができます。」
This strategy prevent one thread per request, and enable Grizzly to server more that 10 000
concurrent users with only 30 threads.

●Asynchronus Request Processing(ARP)
さて、GrizzlyはJava New I/Oで実装されているだけでもすごいのですがさらに、ARPも実装されています。ARPはComeのアプリケーションや、ビジネスプロセスの処理にとても時間が掛かるような場合、つまり長時間接続を保持しなければならないアプリケーションの動作も実現できるように実装されています。APRも又1つの接続辺り1スレッドを消費しないように実装されているため、今までのマルチスレッドサーバ、Synchronus Request Processingに比べComet等のアプリケーションを実行する環境としても最適です。

●まとめ
Grizzlyは汎用的なネットワークサーバエンジンです。独自にサーバを構築する際はGrizzlyのフレームワークを再利用することでハイパフォーマンスな独自サーバを構築することが可能になります。GrizzlyはJava NIOで実装されARPに対応しているのでComet等のアプリケーションの実行環境としても最適です、そしてパフォーマンスも良いのです。GlassFish(Grizzly)を使用して新しい先進的なアプリケーションを作成してください。

最後に、今回はGrizzlyの概要について紹介しました。GlassFish(Grizzly)が何故パフォーマンスがよいのかの概要を掴んでいただけたのではないかと思います。次回は、さらに深くGrizzlyの内部の実装を知りたい方、もしくはJava NIOで実装されたサーバに興味のある方を対象に、Grizzlyのソースコード(Grizzly 1.0.19)の見方を紹介します。

2008年5月15日 at 12:00 AM コメントする

GlassFish SDC連載記事4月号のアップデート情報




先月のSDCの連載記事で下記の記事を書きましたが、

連載記事のアップデート情報をPDF資料にまとめ、

ダウンロードできるようにしましたので、紹介します。



アップデート情報の入手はこちらから



本資料はSDCの記事で紹介したドメインの構成例を

具体的にコマンドライン、もしくは管理コンソールから

実行した例を示しています。ですので是非連載記事と

併せてご覧頂ければと思います。




SDC連載記事:

GlassFishではじめるアプリケーションサーバのかんたん構築

第2回:アプリケーションサーバの管理の基本


http://sdc.sun.co.jp/java/series/glassfish/200804.html

2008年5月14日 at 5:59 AM コメントする

GlassFish Enterprise Server 日本語マニュアル公開




皆様、嬉しいお知らせです。



GlassFish Enterprise Serverの日本語のマニュアルがdocs.sun.comに

公開されていました。



こちらの資料は私が所属する部署の方々による日本語レビューが済んでいます。

  #すいません、私は当時発表続きでレビューに参加できていません。(^_^;)



Sun Java System Application Server 9.1管理ガイド(日本語)

Sun Java System Application Server 9.1 高可用性(HA)管理ガイド(日本語)

Sun Java System Application Server 9.1配備計画ガイド(日本語)

Sun Java System Application Server 9.1クイックスタートガイド(日本語)



また、GlassFish日本語コミュニティの翻訳の方もかなり進んでいます。

中でも「カナさん」の御協力はすごいです!!

カナさんに訳していただいたコンテンツだけで下記のコンテンツがあります!!

カナさん、御忙しい中本当にありがとうございます!!!!





GlassFish 日本語翻訳プロジェクトについての進捗状況等の詳細



マイグレーションツールオンラインヘルプ:


マイグレーションツール概要

インストールと設定

マイグレーションするアプリケーションの準備



マイグレーションガイド:


標準でない JNDI 名を使用するローカル EJB 参照

WAR ファイル最上位にパッケージされるクラス

Facelets の利用

JBoss EJBQL != Glassfish(J2EE Spec) EJBQL

GlassFish Cache でエンティティとして参照される組み込みオブジェクト

GlassFish キャッシュリフレッシュ




2008年5月13日 at 4:45 AM コメントする

過去の投稿


ご注意

このエントリは個人の見解であり、所属する会社の公式見解ではありません

JavaOne

カレンダー

2008年5月
« 4月   6月 »
 1234
567891011
12131415161718
19202122232425
262728293031  

カテゴリー

Twitter

clustermap

ブログ統計情報

  • 472,177 hits

Feeds


フォロー

新しい投稿をメールで受信しましょう。

現在3,254人フォロワーがいます。