SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

NetKernelでJavaの並行性を越える

サンプルの実行

 サンプルソースを実行するには、まず最初にNetKernelをダウンロードする必要があります。http://www.1060.org/download/にアクセスし、最新版(現在、3.3.1)を手に入れ、インストールします。

 次に、http://bosatsu.net/examples/devx/より「NetKernel-Concurrency.zip」ファイルを手に入れます。

 このファイルをNetKernelモジュールの「workbench」ディレクトリにコピーし、解凍します。NetKernelを開始した後、下記の各URLをクリックしてテストを起動します。以下は、BeanShellの非常に基本的な機能を呼び出す例です。

// Read in a file
main()
{
// ffcpl: basically means file: here
output = context.source("ffcpl:/devx/foo.xml");
resp = context.createResponseFrom(output);
context.setResponse(resp);
}

 次を試します。http://localhost:8080/workbench/devx/file.bsh

// Fetch a document on the Web
main()
{
output = context.source("http://bosatsu.net/foaf/brian.rdf");
resp = context.createResponseFrom(output);
context.setResponse(resp);
}

 次を試します。http://localhost:8080/workbench/devx/web1.bsh

// Fetch an image on the Web using a more robust HTTP client
main()
{
req = context.createSubRequest("active:httpGet");
req.addArgument("url", "http://www.funnydog.net/images/cocktail-kitten.jpg");
output = context.issueSubRequest(req);
resp = context.createResponseFrom(output);
context.setResponse(resp);
}

 次を試します。http://localhost:8080/workbench/devx/web2.bsh

// Style some XML
main()
{
req = context.createSubRequest("active:xslt");
req.addArgument("operator", "ffcpl:/devx/style.xsl");
req.addArgument("operand", "ffcpl:/devx/foo.xml");
output = context.issueSubRequest(req);
resp = context.createResponseFrom(output);
context.setResponse(resp);
}

 次を試します。http://localhost:8080/workbench/devx/xslt.bsh

BeanShellの使用

 BeanShellから警告が出ないようにしてください。これはシステムのプロトタイプを作成したり、低レベルの機能をスクリプトとして記述したりするために利用できますが、ここでは基本的な機能の表示に使います。

 しかし、NetKernelのディスパッチ機構には、儀式的な面が強くあります。これは、GroovyやClojureのようなもっと動的な言語を使えば簡単に修正できます。例として、GeonamesのWebサービスを呼び出し、XMLの結果を出力するGroovyコードを示します(David FeeneyとJean-Francois Cloutierに感謝)。これは追加的なインフラストラクチャを準備しなければ使えません。この例は、メタプログラミングの技術によって、NetKernelでの作業を減らして、より本質的な形式にできることを示しています。

def result = xmlAspect {xml ->
xml.places {
def results = WebService.search(searchArgs).toponyms
results.each { t ->
xml.location {
xml.place(t.geonameId)
xml.name(t.name)
}
}
}
}
context.respond(result, "text/xml", false)

 動的な言語と動的な環境の組み合わせは強力なツールとなります。

次のページ
非同期呼び出し

この記事は参考になりましたか?

japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Brian Sletten(Brian Sletten)

教養学部卒業のソフトウェアエンジニア。順方向学習技術に関心がある。システム設計者、開発者、助言者(メンター)、トレーナーとして活動している。世界中の会議で講演し、複数のオンラインメディアでWeb関連の技術に関して執筆を行っている。防衛、財務、商業など、経験は多岐にわたる。ネットワークマトリックススイ...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/3472 2009/02/09 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー