2008年 7月 11日 金曜日 |
Project Carolineを試す, その1 - cashを使う English Translation: (Yahoo!) / (Google) Project CarolineはPlatform APIを使って、システムの構成をダイナミックに変更することができるホスティング型のプラットホームで、PaaS (Platform as a Service)等と言われるようなサービスです。概要は、Computerworldの記事で紹介されていますのでそれをご参照ください。
具体的な使い方の前に、少しProject Carolineの概要と仕組みをおさらいしておきましょう。Sun Labs Open Houseでのプレゼンテーション資料が公開されていますのでそれをベースに。 ![]() 以下意訳ですが、プロジェクトCarolineというのは、
![]() 上図は、Project Carolineで扱う資源(ファイルシステムや、ネットワーク、データベース、コンピュータ)を、あなたのコードによって動的に作れますよ〜。ということを示した図。ロードバランシングの設定も、プログラマチックに描くことができます。 ![]() もう少し具体的に見ていきましょう。上図は、現在Project Carolineで提供されている資源を大まかにまとめたものです。LB(ロードバランサ)や、NAT、VPN、DNS、VLANなどネットワークの資源。Processesというのが、実際にアプリケーションを実行するための資源です。現在はJava、Perl、Pythonがサポートされています。File systemsは、アプリケーションが使用するデータを格納したり、ログを出力するために利用する領域。Databasesは文字通りアプリケーションが利用するデータベースで、具体的にはPostgreSQLのインスタンスです。MySQLも将来的にはサポートするそうです。 ![]() リソースが、とか、プログラマチックに!と言われても少しピンとこないので、もう少し具体的なコードを見ることにしましょう。Project CarolineにはPlatform APIというCarolineのリソースを制御するためのAPI群が提供されています。上図では、ネットワーク環境を作るためのAPIを例示しています。createNetwork("ネットワーク名", ほしいIPアドレス数, コンフィギュレーション)という、たった一行だけのコードでIPアドレスを取得したり、他にもファイルシステムを作るAPIを使えばファイルシステムの領域を確保することも可能です。さて、概要が何となく分かってきたところで、実際に触ってみてもう少し理解を深めてみることにします。 Project Carolineでは、Carolineの環境を利用するために、NetBeansのプラグインや、antのプラグインなど、いくつかのツールが提供されています。今回は、その中でも対話的にProject Carolineを使うことができるcashというツールを使うことにします。cashは、現金ではなく、Caroline Shellですね。ちなみに、岡崎が使っているのは社内の開発環境グリッドのため、それに伴い公開されているProject Carolineのツールとはバージョン等が、微妙に違ったりしますが、ご容赦ください。 cashは、JRubyで実装されたシェルで、irbにPlatform APIを呼びやすくしたり、認証機能の追加など若干Caroline用に拡張したようなシェルです。JRuby 1.0.xの(まだJRuby 1.1.xでは動作せず(?)) gemを使ってインストールすると、cashというコマンドライン・ツールがインストールされます。 cashを使うには、まずGridのURLと、ユーザIDを取得しておきます。ユーザIDを取得するにはまず、Project CarolineページのUser accountを作成し、その上でさらに、Grid用のアカウントを取得するようにリクエストを出します。 ![]() 無事アカウントが取得できれば、あとはcashの引数でそれらを指定します。 $ cash -gridURL https://grid.projectcaroline.net -gridCustomerID hogehoge毎回いれるのが面倒なら、$HOME/.carolineというファイルに、 customerID = hogehoge password = hogehoge gridURL = https://grid.projectcaroline.netという感じで設定しておけば自動的に読み込んで接続してくれます。接続できたら早速、リソースをいじってみましょう。 $ cash 001:0 $ net = create_network "HogeHogeNetwork", 4 => #<Java::ComSunCarolineInternalPlatformimpl::NetworkImpl:0x5e7bf966 @java_object=com.sun.caroline.internal.platformimpl.NetworkImpl@709a11c0:https://dev.caroline.east.sun.com as:okazaki:5fa12555-ab56-4d7a-81cc-8e64ba73f978:okazaki@:HogeHogeNetwork> 002:0 $ fs = create_base_file_system "HogeHogeFileSystem", BaseFileSystemConfiguration.new => #<Java::ComSunCarolineInternalPlatformimpl::BaseFileSystemImpl:0x1dce910e @java_object=com.sun.caroline.internal.platformimpl.BaseFileSystemImpl@5a9fbed8:https://dev.caroline.east.sun.com as:okazaki:275c713e-ffbb-4a2e-ade1-f2570eead8b3:okazaki@:HogeHogeFileSystem>ネットワークと、ファイルシステムを作ってみました。ちなみに、メソッドやクラス名はTABキーで補完が聞きます。 003:0 $ net.delete => nil 004:0 $ fs.destroy => nil要らなくなったら削除。ちょっと、エントリが長くなりましたので続きはまた来週。 ゆの in Javaというのが流行っているようです English Translation: (Yahoo!) / (Google) t_yanoさんのブログで知りましたが、ゆのin Javaという遊びが流行っているようです。元ネタは今ひとつ知らないのですが一つ考えてみました。ゆの in Java - d.y.d.にルールっぽいのが書いてます。うーん、いまひとつ修行不足です・・・。
package Hidamari;
import static Hidamari.Sketch.Yuno.*;
public class Sketch {
static enum Yuno {
ひだまりスケッチ, X365,
来週も見てくださいね;
void sketch() {
System.out.print(this.name() + " ");
}
}
public static void main(String[] args) {
int X = 1, _ = 1;
for (Yuno P : Yuno.values()) (
X / _ / X < _? 来週も見てくださいね
:P
).sketch();
}
}
残念なのが Xと _ が普通の定数として遊んでいるだけなところですね。d.y.d.さんのところだとちゃんとそれらも働いているので秀逸です。
参考リンク: ホットトピックセミナーとナイトセミナーのアーカイブ English Translation: (Yahoo!) / (Google) Javaホットトピックセミナー、OpenSolarisナイトセミナー、OpenSolarisホットトピックセミナーのこれまで開催したそれぞれの回の資料をアーカイブしたまとめページが出来上がりました!
![]() 数えてみたところ、Javaホットトピックセミナー 7月号は記念すべき第20回目ですね。20回目には鈴木さんによるOpen ESBの紹介と、cactusmanさんによるHudsonの紹介があります。お楽しみに! iPhoneフィーバー English Translation: (Yahoo!) / (Google) |
Today's Page Hits: 1742 |