yamicha.com's Blog - Presented by yamicha.com
Blog yamicha.com's Blog - 2018/01 の記事
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31]

yamicha.com's Blog
 諸事情により、現在更新休止中。ご了承ください。もし今後ブログを再開することがあるとすれば、その際にはこのブログスクリプトではなく、新しく開発したものによるかもしれません。
 当ブログ管理者についてはこちらをご参照。
開発魔法(737)
社会問題(733)
お知らせ(11)
質問・バトン回答(15)
ゲスト出演(8)
経済・知的財産(150)
ゲーム開発(182)
[Ada] 勝手に補足
- Note
- 金配りの次の一手


- Endless Ultimate Diary
- 銃世界

漢字バトン
- うるる雑記帳
- 漢字接力棒

ツキアイゲノムバトン
- ブログ@うにうに画像倉庫
- あぶ内閣

縺イ縺セ縺、縺カ縺励ヰ繝医Φ
- 月夜のボヤキ
- 騎士サーラバトン
パスワードを使う
名無し (2012/02/27)


開発者解放裁判
yamicha.com (2010/03/14)
Winnyに関しては、私も「純白」とまでは考えておりませんし、使用し..

開発者解放裁判
通りすがり (2010/03/08)
winnyに関しては「ダウンロードソフト板」なんてところを拠点に開発..

新型インフルエンザの恐怖
いげ太 (2009/11/03)
> C#などの「int Some(int , int)」は、F#では「(int * int) ->..

時効に関する思考
yamicha.com (2009/08/31)
>いげ太さんコメントありがとうございます。手元にドキュメントが少..
Homepage
Blog Top
Normal View
List View
Search
Calendar
Comment List
Trackback List
Blog RSS
Send Trackback
Phone Mode
Administrator
yamicha.com
Blog
るううるる。
Source
法令データ提供システム
FindLaw
Development
Java2 Platform SE 6
Java EE 6 API
MySQL Developer Zone
PHP Reference
MSDN Library
Ada Reference Manual
Objective Caml
Python Documentation
Erlang
Prolog Documents
 垂オ訳ございませんが、現在このブログではトラックバックを受け入れていません。

 この記事に対してリンクされる場合には、こちらのURLをご利用ください。
http://void.yamicha.com/blog/blog.cgi?mode=view&number=758
 上記URLをトリプルクリックされますと、簡単にURL全体の選択が行えます。

※以下の記事がトラックバックされます。
たちどまる日本
2010/04/09(Fri)22:50:48
 与謝野氏や平沼氏などを中心として、新党「たちあがれ日本」が発足となりました。届出上の代表は平沼氏ですが、与謝野氏は同格の共同代表のポストに就任し、参加者は5名で政党要件も満たしています。参院選においては、比例を中心に10名以上の擁立を検討しているようです。
 ところが、新党が標的としている現政権党からの批判ならまだしも、自民党総裁の谷垣氏からも「与謝野氏は小選挙区敗北での復活当選であるが、それなのに離党するのはおかしい」と評されるなど、自民党内にも批判的な見方が多く存在する上、構成人員がベテラン議員ばかり(平均年齢70歳近く)であることを理由として、「シルバー新党」「立ち枯れ日本」と揶揄されたりと、国民や政党の間で支持を集められるかは不透明な情勢です。
 私は麻生政権下の大混迷の時期より、与謝野氏の手腕に一定の期待を持っており、麻生氏失脚後は与謝野氏が自民党を立て直して復帰させ、日本に二大政党制が定着することを期待していましたが、どうやら私は与謝野氏を買いかぶりすぎていたようです。かつて谷垣氏に期待した際には、「和魂党」や田母神氏擁立問題、また理念なき欠席戦術などで大変失望させられましたが、与謝野氏の器も谷垣氏と同じかそれ以下であると評するよりありません。
 与謝野氏の理念の乏しさについては、以前に指摘している通りです。すなわち、与謝野氏は「(鳩山内閣で)普段なら内閣が倒れるような事件が起きているにもかかわらず、自民党の評価が高まっていないことには、深い反省、思いを抱かないといけない」と発言し、谷垣体制のやり方のまずさを批判していますが、相手の過失をあげつらったところで自分の支持が回復するわけではないのは当然です。もし自民党が支持を取り戻したいのであれば、他人の過失に付け込むのではなく、自分の悪い点を改善するよう努め、支持を得られない原因を解消しなくてはなりません。上記の発言から察するに、与謝野氏はそれを自覚できていないらしいため、私は与謝野氏の新党構想に強い懸念を抱いていました。
 そして今回、その懸念は現実のものとなりました。与謝野氏は自身の勉強会の会合で、新党について「自民党を分裂させるためではない。徹底的な反民主党を貫く。捨て石になったつもりで頑張る」と発言していますが、まさに「新党」が新党として意味を成さないことを証明するかのような発言です。
 通常、「政党」は何らかの政策を実現させるための組織ですし、そうであるからこそ選挙では政策を掲げ、その政策に賛同した国民の支持により国会に議席を有し、国の政策決定に参加する仕組みとなっています。したがって、仮に新党が掲げた政策に自民党が反発し、民主党は賛同しているような場合、相手が民主党だからという理由で政策実現を拒否するようなことがあれば、まず道理に合いません。
 しかし、与謝野氏は新党について「反民主党を貫く」と発言しており、完全に手段と目的が逆転しています。どうしても実現しなくてはならない理念があり、自民党の理念では実現できないから党を去るというならまだしも、党の目的が「反民主党」とは、理念や政策以前にあまりにも子どもじみており、あきれて物も言えません。これが本当に「ベテラン」と呼ばれる議員の行動でしょうか。
 このような子どもだましの新党が、自民党にも民主党にも愛想をつかした人を取り込めると本気で考えているなら、与謝野氏や平沼氏はあまりに国民を愚弄しています。ここまで独自の理念を持たない政党となれば、おそらく当面は自民党の衛星政党として機能することになるはずですが、それでいて自民党に失望した人の受け皿になろうとは、自民党に今までの責任をすべて押し付け、自分はおいしいところだけを取ろうとしていると批判されても仕方がありません。
 つくづく、ベテランと呼ばれる人であっても、また手腕に期待できそうな人であっても、実像は分からないものです。当初は与謝野氏に期待していた私も、今となっては「このような理念も正当性もない人間が自民党総裁にならなくて良かった」の一言しかありません。自民党の側も、与謝野氏や平沼氏の行動と連鎖反応に戦々恐々とするよりは、むしろ自分で処置するまでもなく膿が排出されたと好意的に解釈し、党再生に弾みをつけた方が建設的です。
 また、これは平沼・与謝野両氏の新党に限りませんが、私は最近の政治状況に強い危機感を覚えています。小泉氏の次男がもてはやされることに始まり、自民党は自らが事実上の退職処分にしたはずの田母神氏を擁立しようと試みたり、「美人すぎる市議」を立てようとしてみたり、その他様々なタレントや有名人を起用しようとしています。対する民主党も、有名なキャスターを擁立しようとするなど、程度の差こそあれ、やっていることは自民党とほとんど変わりません。さらには首長連合などの小規模集団も、その弱さを有名人の話題性に求めようとしており、各党が大小競い合って人気投票に持ち込もうとしているような状態です。これでは政権交代の定着どころか、時計の針が郵政解散時まで逆戻りしてしまいます。この混迷の状況下で、タレントの人気投票によって国の行方が決まるようなことが許されるのでしょうか。
 そして何より気がかりなのは、舛添氏のように人気だけが先行し、思想や理念が伴わない人物の動向です。これまでの発言や主張内容、主張政策からすれば、明らかにそれにふさわしい人物でないのは明白でありながら、先の世論調査では首相にふさわしい人の1位に舛添氏が挙げられており、どうしても懸念を抱かないわけにはいきません。平沼・与謝野新党がまるで理念の存在しない、ただ自民党の看板を外しただけの政党である以上、ここが第三極として受け皿になる可能性は非常に低いだけに、舛添氏が第三極として名乗りを上げた場合の影響は相当大きくなると予想されるため、強い警戒が必要です。

 Java EE 6には「JAX-RS」なる新たな機能が導入されています。これはJava EEでRESTを実装するためのもので、Webサービスを実装するJAX-WSとは近い関係にあります。APIリファレンスを読む限り、アノテーションがかなり多用されており、EJB 3.0以降のスタイルで容易に開発できるであろうことが想像できます。
 ところで、「REST」とは一体何なのでしょうか。定義は色々考えられますが、厳密な答えを出すのは困難です。なぜなら、当初は意味が厳密に決まっていたものの、途中で意味が拡大解釈されて収拾がつかなくなり、最終的に意味があいまいになってしまった、いわゆる「バズワード」の典型であるためです。
 Wikipediaを開いてみると、以下のように記述してあります。
RESTは、初めはアーキテクチャの原則と制約の集まりを指していたが、次第に、XMLやHTTPを使った簡易なウェブベースのインターフェイスのうち、WebサービスのSOAPプロトコルのような MEP(Message Exchange Pattern; SOAPノード相互のメッセージ交換のパターンを確立するための雛型)ベースの特別な抽象化をしないもののことを、大まかに意味する用語として使われるようになった。RESTは次に述べるように2つのやや異なる意味で使われている。
  • FieldingのRESTアーキテクチャスタイルの原則に合わせたWebサービスシステム。
  • RPCスタイルに合わせた簡易な XML+HTTP インターフェイスを採用したシステム(SOAPは使わない) 。
 すなわち、困ったことに定義が複数存在し、しかも定義の境界があいまいである(これはRESTだが、これはRESTではない、と定めるのが難しい)というのです。
 ひとまず、Java EE 6では主に以下のような操作が提供されているようです。
  • GET、POST、PUT、DELETEなど、任意のメソッドに応じた処理の呼び出し。
  • 拡張パス及びクエリに応じた処理の呼び出し。
  • 送信データを任意の形式(クエリ文字列、単純な文字列、XML、JSONなど)で受け取り、また返却する処理。
  • その他、クッキー周りなど付加的な処理。
 念のために書いておくと、メソッドのうちGETとPOSTは有名ですが、もともとGETはデータ取得、POSTはデータの登録、PUTはデータの更新、DELETEはデータの削除を意図して作られたものです。
 今回はとりあえず、「特定のURLにGETでアクセスすると、任意の結果を文字列で返す」だけのRESTを書いてみます。実際にはPOSTでもPUTでもDELETEでも、またXMLでもJSONでも何でも受け付けてくれますが、もともとRESTは利用者のブラウザと対話するというより、あるサービスが別のサービスに対する操作を行う(例えば、あるブログは関連する書籍を表示する機能を有している。ユーザーがブログにアクセスすると、ブログはRESTを使って書籍検索システムにアクセスし、検索結果を取得する。それをユーザーの画面に表示する)側面が強いため、少し複雑なものになるとXMLなどを送信したりしなくてはならず、単純にブラウザを使ってテストするのが難しくなり、アクセスする側のプログラムもセットで書く必要が出てきて、本来関係のないコードが増えてしまうためです。
 まずは単純明快に、引数も何も受け取らず、ただ単にメッセージを返すだけのものを作成してみます。いわゆるHello Worldです。
 今回用意したのは、単純明快に以下の2つのファイルのみです。
/WEB-INF
 /classes
  /com
   /yamicha
    /rs
     /server
      Hello.java
 web.xml
 上記2つのファイルを用意するだけで、まがりなりにもJAX-RSを利用できるのですから、その簡単さは容易に想像できます。この技術がもしEJB 3.x以前に発表されていたら、おそらく地獄を見たでしょう。
 まずはweb.xmlですが、これはほとんど「お約束」でしょう。事実、以下のXMLもほぼSunのサンプルの丸写しです。
<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app>
  <display-name>JAX-RS Servlet</display-name>
  <description>JAX-RS Servlet</description>

  <servlet>
    <servlet-name>jax-rs</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
      <param-name>com.sun.jersey.config.property.packages</param-name>
      <param-value>com.yamicha.rs.server</param-value>
    </init-param>
  </servlet>

  <servlet-mapping>
    <servlet-name>jax-rs</servlet-name>
    <url-pattern>/restserver/*</url-pattern>
  </servlet-mapping>
</web-app>
 やや重要なのがinit-paramで、ここで処理の対象とするパッケージ名を指定しなくてはならないようです。この場合では、com.yamicha.rs.serverパッケージが対象となります。
 また、Sunのサンプルによれば、アプリケーションのクラスを指定する記述として
<init-param>
  <param-name>javax.ws.rs.Application</param-name>
  <param-value>com.example.ClassName</param-value>
</init-param>
 なるものも存在するようです。むしろ、前者のパラメータ名がcom.sun.jersey.config.property.packagesなのに比べ、後者はjavax.ws.rs.Applicationですから、後者の方が標準的な方法であって、前者はJerseyの独自拡張と考えた方が正しいかもしれません。
 servlet-mappingのurl-patternとしては、今回は/restserver/*を用いましたが、当然ながら好きなように記述して構いません。
 Hello.javaは以下の通りです。
package com.yamicha.rs.server;

import javax.ws.rs.*;
import javax.ws.rs.core.*;

@Path("hello") public class Hello{
	@GET @Path("message") public String sayHello(){
		return "Hello JAX-RS!";
	}
}
 何とごく普通のServletより簡単です。むしろ、これで本当に動くのかが不安になってきます。
 後はこれをデプロイし、ブラウザから次のURLにアクセスするだけです。

(このアプリケーションのURL)/restserver/hello/message

 restserverはweb.xmlで定めたurl-patternに基づくもので、helloはクラスの@Pathアノテーションに基づきます。また、messageはメソッドの@Pathアノテーションに基づきます。

 いくら簡単なのが良いこととはいえ、これだけではあまりにも面白くありませんので、ついでに「拡張パスとして文字列を受け取り、それをそのまま表示する実装」と「パラメータとしてv1とv2を受け取り、足し算して返す実装」も追加してみるとしましょう。
package com.yamicha.rs.server;

import javax.ws.rs.*;
import javax.ws.rs.core.*;

@Path("hello") public class Hello{
	public Hello(){
	}

	@GET @Path("message") public String sayHello(){
		return "Hello JAX-RS!";
	}

	@GET @Path("say/{msg}") public String sayMessage(
		@PathParam("msg") String msg){
		return msg;
	}
	@GET @Path("calc") public String calc(
		@QueryParam("v1") String v1 , @QueryParam("v2") String v2){
		try{
			return String.valueOf(
				Integer.parseInt(v1) + Integer.parseInt(v2));
		}catch(NumberFormatException e){
			return "正しい数字ではありません。";
		}
	}
}
 非常に簡単な上、見た目からして意味も明白です。
 後は以下のURLにアクセスするだけです。

(文字列表示)
(アプリケーションのURL)/restserver/hello/say/Hello

(計算)
(アプリケーションのURL)/rs/restserver/hello/calc?v1=16&v2=32

 アノテーションの導入で大きく変わったJava EEですが、いずれもせいぜい「XMLの代わりにアノテーションを使えるようにして、XMLを削減する」程度の消極的なものが多い印象でした(もともとXML前提の仕様がアノテーションでも書けるようになったものであるので当然ですが)。しかし、JAX-RSでようやくそのような消極的なアノテーションから、「XMLなどの記述を不要にするとともに、コードの意味を分かりやすくする」という積極的なアノテーションに転じてきたようです。
カテゴリ [開発魔法][社会問題] [トラックバック 0][コメント 0]
<- 前の記事を参照 次の記事を参照 ->

- Blog by yamicha.com -