Posts tagged ‘GlassFish’
SIP Servlet(JSR-289) Specification Final Release
JSR 289のSIP Servlet v1.1のファイナルの仕様が
ダウンロードできるようになりました。
JSR 289: SIP Servlet v1.1のステータス確認
http://jcp.org/en/jsr/detail?id=289
SIP Servlet v1.1ファイナルの入手先:
http://jcp.org/aboutJava/communityprocess/final/jsr289/index.html
このSIP Servlet v1.1に対応したアプリケーションサーバである
SailFin(Sun GlassFish Communications Server)は、予定では
今年の冬(12月中旬)にリリースされる予定ですので、
今暫くお待ちください。
GlassFishのOSGi対応は今後も注目です。
実は、私もつい最近まで知らなかったのですが、
Apache Felix(ApacheのOSGiの実装)のプロジェクトの一員である、
Richard Hallが今月よりSunの正社員となって、GlassFishプロジェクトの
一員として、GlassFishのOSGiまわりを担当するようになったようです。
Richardのコメント
Richardの加入によって、来年リリース予定のGlassFish v3が、
そしてOSGi対応がとても良くなってくれることを期待しています。
● Apache Felix OSGiコンテナに迫る
●
JSR277とOSGiは一つになるか?
Dear Richard.
Well Come to Sun Microsystems & GlassFish Community.
Yoshio.
データセンターでインストールも楽な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 |
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)の見方を紹介します。
GlassFishのComet対応はさらに進化しそうです
GlassFishコミュニティの中のサブプロジェクトの1つである
Grizzlyより新しいバージョン1.7.3が本日リリースされました。
ダウンロードはこちらから:
https://grizzly.dev.java.net/
今回のバージョンでは下記が追加された機能になります。
+ Improve UDP performance implementation.
+ Write an end to end tutorial, fix p1/p2 from users.
+ First release of 2.0 branch, which contains merge with the peregrine works done internally.
+ suspend/resume support at the TCP/UDP/TCL level (similar to what Comet does)
+ Add support for Servlet 3.0 Comet style API.
+ New module: Grizzly Games (hub/bus) Comet extension.
+ OpenESB Throttling Mechanism for Grizzly 1.0/1.7
+ Final cometd/bayeux release (the spec will be completed at that time).
+ Add Transport Configuration Objects.
+ Add new module: HTTP client (requested by the JDK Team, OpenESB and JavaFX)
+ Investigate what can be ported from peregrine
+ Add support gor a grizzly.xml configuration file
そして、Grizzlyの次のバージョンは1.8.0になるのですが、
そこでは、下記の機能が追加されるようです。
ここで、1つ注目したいのが今までCometの実装は
Grizzlyのプロジェクト中で行われておりましたが、
Cometの実装を新たに、サブプロジェクトとして、
https://atmosphere.dev.java.net/で行うということが
記載されております。
サブプロジェクトになることによって、またGrizzlyの、
GlassFishのComet対応が進化しそうです。
恐らく、喜んでいい話だと思うので今後はatmosphereも注目ですね
+ NIO.2 support (dependent on when JDK team will push the final bytes)
+ Comet implementation moved to Atmosphere.dev.java.net
+ New Error Handling mechanism
+ Improved logging framework
+ High level API for String protocol, hidding completely the needs to understand ByteBuffer.
+ Add a new TCP Proxy/load balancer module (long time requested, never completed :-))
+ i18 error messages
御注意:
GlassFish上でGrizzlyが動作しているわけですが、
GlassFish v2ur1では、Grizzly 1.0.x系が動作しております。(最新はGrizzly 1.0.20)
そこで、今回リリースされたGrizzlyはGlassFishとは別に単体で御利用いただくことが
できるモジュールとなっています。
最新のGrizzlyに触れてみたい方は是非、上記からダウンロードを !!
GlassFishとMySQL
Translate to English by
Google Translator
今日は、アクアリウムで嬉しい発表がありました!!
ご存知の通り、SunとMySQLは今年はじめに統合を発表し、
すでに統合も完了しているのですが、その成果が早くも現れてきました。
なんと、アプリケーションサーバとMySQL Community Serverの統合バージョンが
ついにリリースされました。

SJS AppServer 9.1ur1+MySQLのダウンロード先
上記は現状で英語版のみの提供ですが、こうしてMySQLとの統合結果が早くも
現実になった事は嬉しい限りです。
そういえば、他のブロガーの皆様も発表しているようですが、MySQLの
イベントが開催される予定です。
米国 Sun Microsystems, Inc. と MySQL の合弁完了にともない、日本で
両社がひとつとなって、ビジネスを開始するに当たり、初めての外部向け
セミナーを、下記の要領にて開催いたします。
「春のMySQL祭り2008 – Jumping to the Sun !」
開催概要:
日時:2008年04月09日 13:30開場
会場:ウエスティンホテル東京
〒153-8580 東京都目黒区三田1-4-1(恵比寿ガーデンプレイス内)
費用:無料(事前登録制)
主催:MySQL株式会社、サン・マイクロシステムズ株式会社
お申し込み・詳細はこちらをご覧下さい。
http://jp.sun.com/mysql
是非、御興味あるかたは無料セミナーなのでどしどし御参加下さい!!
PS.
今日は、御仕事で新宿に行ってまいりました。
新宿の都庁前にも桜が咲いていたのですが、もうすっかり満開でした!!
明日は、雨らしいので週末に向けて散らない事を祈る限りです。


Solaris 10のゾーンにApplication Server 9.1をインストールする翻訳記事の御紹介
Solaris 10の仮想化のゾーン内にSun Java System Application Server 9.1を
インストールする際の注意点等が下記にまとめられています。
Solaris 10にアプリケーションサーバをインストールする方は
是非、一度御確認ください。
http://www.sun.com/bigadmin/hubs/multilingual/japanese/content/glassfishsolariszones.jsp
- Solaris ゾーンと Application Server
- Application Server と Solaris ゾーンの詳細
- 大域ゾーンでの Application Server のインストール
- 疎ゾーンでの Application Server のインストール
- 完全ルートゾーンでの Application Server のインストール
- まとめ
- 参照情報
HADBを使用した高可用性を実現する際のモデリングガイド
ホワイトペーパの翻訳が出来上がりました。
Sun™ Java System Application Serverの可用性モデリングの入手先
こちらを読んで頂くと、HADBを使用すると、
何故、高可用性レベルが99.999%になるかについて、
計算式から理論的に導きだされた証明が
詳しく書かれています。
PS.
資料のアプリケーションサーバのバージョンは7.0をベースに
記載されていますが、HADBについての概念は、現在の
Sun Java System Application Server 9.1 with HADBの
HADBでもそのまま使えますので、こちらの資料を御参照ください。
御注意:ロードバランサー構築時の問題の解決方法
1点問題を報告します。
私が過去にブログで書いた下記のエントリで、
マルチリンガル版を使用して下記の手順通りに設定して頂くと
正常に動作しないという問題を確認しました。
今日は、その問題の御報告と対処方法について説明します。
ロードバランサプラグインのインストールと設定
私が上記のエントリを書いていた時は、まだマルチリンガル版がリリースされておらず、
英語版(テクニカルプレビュー版)を使用してインストール、設定を行っていたので
実際に上記の通り問題ありませんでした。
今回、御紹介する問題はマルチリンガル版においてのみ発生致します。
そこで、英語版を使用した場合にはこの問題は発生いたしません。
詳細は、下記に記載しております。
https://glassfish.dev.java.net/issues/show_bug.cgi?id=4288
#このエントリを読んでいただいた日本人の方は是非、
#注目度を上げるため、投票を行って頂けないでしょうか。
#当然、私の方から社内から、エンジニアリングチームに対して
#プッシュを掛けておりますが。(次期バージョンで修正される予定)
#注目度が高いとそれだけ日本人が望んでいるんだという証になります。
さて、実際の問題についての報告ですが、ロードバランサプラグインを
設定して頂いている環境で、クライアントのブラウザからLBプラグイン
経由でアプリケーションサーバにアクセスをすると、期待するコンテンツが
ブラウザに正常に表示されずバイナリデータをダウンロードするウィンドウが
表示されるという現象が発生する事があります。
この問題は、当初Webサーバ側、もしくはロードバランサプラグイン側の
問題ではないかと思っていたのですが、実は、アプリケーションサーバ側の
問題でした。
アプリケーションサーバ側では、送信されてきたHTTPリクエストに対する
レスポンスを返す際に、下記のようなHTTPヘッダに変な文字列を付け加えて
投げ返すように実装されておりました。
*************************************************
HTTP/1.1 200 ・
HTTP/1.1 302 B・・ユW~W_
HTTP/1.1 401 *
HTTP/1.1 404 掬K樫[
HTTP/1.1 500 ・オ・・鵈
*************************************************
上記は、ヘッダ内のレスポンス応答文字列も日本語化していた
ために発生しているのですが、HTTPヘッダの内容はASCIIテキストで
返さない場合、HTTPクライアントによっては変な挙動を起こしてしまいます。
本問題に対する対処方法についてですが、
各インスタンスのJVMの設定において、「JVM オプションを追加」ボタンを
押下して、”-Duser.language=en”のオプションを追加して頂ければ、
問題を回避できます。

このオプションにつきましては、内部的なログファイルの内容が
英語で表示される等の変更がありますが、基本的にはシステムの運用に対する影響は
少なく、Webの管理画面につきましても、上記の画面を見て頂く通り、ブラウザの
ロケールが日本語環境に設定されている場合、日本語で管理画面が表示されます。
また作成頂いた日本語アプリケーションも問題なく扱える事まで確認しております。

(UTF8確認)
このワークアラウンドを使用して仮に何らかの問題があった場合は、
コメント欄に記載して下さい。
つか、HTTPヘッダまで日本語化してしまっていたなんて。。。(T_T)
追記です(2008/03/13)
********************************************************************************
本問題は、次期バージョンであるSun Java System Application Server 9.1.1で
修正される事が正式に決まりました。ですのでSun Java System Application
Server 9.1.1以降を御使用の方は本ワークアラウンドの適用は行わなくても
よくなります。
********************************************************************************
