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
糖和魂文明
2009/11/29(Sun)11:42:06
 自民党がついに敗戦の責任を党名に求め始めました。何でも、自民党というだけで話を聞いてもらえないのだそうで、第2次勧告案では党名変更も視野に入っているようです。反対論も根強く、変更されるかどうかは全く不明ですが、今のところの候補としては「自由新党」と「和魂党」が挙げられています。また、同案では自民党の「3つの目標」として

1.資本主義制度を円滑に機能させる
2.民主主義を堅持
3.社会の安定を確保

 この3つが掲げられているようです。
 自分が散々連発してきた強行採決を民主党がやれば批判し、今まで批判してきたはずのボイコット作戦に出るなど、昨今の自民党の姿勢は混迷を深めており、田母神氏の擁立未遂など意味不明な行動まで取っている始末ですが、今回ばかりは驚愕や怒りを通り越して唖然としました。いわば敗軍の将が「自分が負けたのは政策や指揮の欠陥ではなく、軍の名前が悪かったせいだ」と開き直っているようなもので、その言い分の破綻ぶりは指摘するまでもありません。
 自民党の側は「自民党というだけで話も聞いてもらえない」と深刻な状況を吐露していますが、それは名前ではなく行動に問題があるからに他なりません。政権を投げ出したり、無賃残業合法化を成立させようとしたり、ねじれ国会において当時の野党との協力を捨てて強行採決に走るなどの行動を繰り返し、果ては金配りなどの非常に愚かしい行動を取った「実績」があるのですから、これで嫌われない方がどうかしています。ただし、嫌われているのはそのような行為とそれを実行した組織であって、決して党の名前ではありません
 ましてや、名前からして容易に共産主義を連想させ、「名前を変えれば支持する」と主張する人まで存在する共産党のような例と違い、「自由民主党」という名前自体には特に右翼または左翼的な意味合いがあるわけではありません。したがって、嫌われる原因を名前に求めるなどという論理は成立し得ません。
 いちいち言うまでもないことですが、どうやら自民党はこれを理解していないらしいため書いておきますが、名前を改めたところで状況は何も変わりません。名前より先に改めるべき点が数多くあるはずで、「名前さえ変えれば支持してくれる」などというのは「無賃残業合法化」を「家庭だんらん法」に置き換えるのと同レベルの侮辱行為であると知るべきです。政権奪還を目的として作られたはずの勧告案が危機を正確に捉えていないのですから、逆にこの党の凋落ぶりを強く認識せざるを得ません。
 また、目標及び改名案からは自民党の時代錯誤ぶりが読み取れます。まず3つの目標ですが、1についてはいまさら資本主義制度を根底から否定しようとする動きはほとんどないのですから、共産党でもなければどこの政党が掲げてもおかしくない主張です。資本主義の中でも新自由主義を進める意図とも取れますが、そもそも麻生氏はこれの行き過ぎを是正すると主張していましたし、貧困など日本国内で発生した様々な弊害の上、世界同時不況で海外でも同主義に対する懐疑論が高まっている現在では、そのような行動にも限界があります。この「円滑に機能」なる言葉は、あえて抽象的な表現にして含みを持たせたとも考えられますし、そうでなくても極めて漠然としています。
 2に関しても、「民主主義を堅持」することを拒む人や政党など、今の日本にはほとんど存在しないはずですが、未だに社会主義との対立があるつもりなのでしょうか。3に至っては、いわゆる「イデオロギーの対立」なるものが存在する時代であっても、保守主義から共産主義まで、また右翼から左翼まで、「社会の安定を放棄」すべきと主張する政党など存在するわけがありません。目標などと意気込んでいる割には、それほど大それたものでもなく、自民党の意図が良く分かりません。
 そして何といっても勘違い甚だしいのが、新しい党名の候補です。そもそも嫌われているのを名前のせいにするだけでもあきれさせられるところを、名前がまたそれを倍増させています。現段階では2つの候補が出されていますが、これらの発案者は一体誰なのでしょうか。
 もし候補のうち必ずどちらかを選ばなくてはならないのなら、「自由新党」の方が無難でしょう。ただ、衆院選前の世論調査でも明らかなように、自民党には「ベテラン」「安定感」などの印象を、民主党には「未熟」な印象を抱く人が少なからず存在しています。民主党が政権を取り、自民党が野党としてだだをこねている現在では、それなりに数字が変わっていてもおかしくありませんが、少なくともその印象はある程度は残っているはずです。候補の「自由新党」とは何やら初々しい名前ですが、「ベテラン」「安定」のブランドを捨て去ることをも意味します。果ては、名前を変えても体質が変わっていなければ、皮肉を言われるだけに終わるでしょう。
 ところで、もし自民党が自由新党を名乗るのであれば、二大政党を担う政党がころころと名前を変えるのは混乱の元ですから、今後とも何十年と「自由新党」を名乗るのでしょうか。一定期間後に「新」をはずして「自由党」とすることも考えられますが、改名の意味がほとんどありません。かといって、全く別の名前に変えてしまうのでは、国内外で混乱を引き起こす上、ネームブランドを2度に渡って捨てる結果となります。
 ただ、この程度の問題点など、もう片方の候補に比べればかわいいものです。「和魂党」とは一体誰が、何の目的で挙げた候補なのでしょうか。話題作りのためにあり得ないような案を出してきたと考えられなくもありませんが、最初はほとんどネタにしか見えなかった金配りを本当に行ってしまう自民党のことですから、油断はできません。
 この極端な名前は、様々な観点から自民党の現状認識を象徴しています。まず挙げられるのは、時代錯誤の可能性です。何とも保守主義的、懐古主義的なイメージを抱かせる名前ですが、前述の通りもはや社会主義と保守主義といった「イデオロギーの対立」の時代はとっくの昔に終わっているのですから、それ自体は対立軸とはなり得ません。一時期現れた新進党は自民党以上の保守ですし、民主党も社会党の生き残りを抱え、労働組合を支持基盤に持っているという事情はあるものの、議員の中には自民党以上の保守も多く、旧政党の生き残りではない「民主党議員」も増えており、社会の変容で労働組合も弱体化しています。ましてや、二大政党制では互いの政策は非常に近接する傾向にあります。55年体制下で保守を前面に出すならともかく、いつまでそれが対立軸になると考えているのでしょうか
 あるいは、このような名前を好む一部の保守派、具体的には「ネット右翼」を取り込もうとしているとも考えられます。露骨に「いかにも」な名前だけに、ありそうな話です。しかしながら、仮にそうであるとするなら、自民党は選挙戦略を知らないと言わざるを得ません。
 まず「右翼なら自民党」という図式自体が思い込み以外では成立しなくなりつつありますし、取り込みの効果はあまり大きくないと見るべきです。それに何より、最近の選挙は浮動票で決まる点を忘れてはいけません。イデオロギーがどうの、保守がどうのといったことは、もはや選挙結果を決める主要な要素ではありません。もしこのような名前に変えたとして、「ネット右翼」らを取り込むことに成功したとしても、名前及びそこから垣間見える性質に嫌気をさした多くの人が不支持に回れば、自民党はあえなく敗北します。
 なお、伊吹氏は「今の民主党政権が社会主義なら党名変更は不要だが、(現代の状況では)保守かリベラルかという差別化が必要」などと分かっているのか分かっていないのか不明な主張を行っているようですが、それはむしろ逆でしょう。55年体制の終焉で保守を軸とした対立がなくなり、保守の垣根がほとんど取り払われ、ライバル政党の議員ですら自民党より保守的な場合さえある現状において、戦前のスローガンに使われそうなほど懐古主義的な名前を持ち出すなどナンセンスで、口では「差別化」などと言ってはいても、55年体制からの頭の切り替えができていません。
 二大政党制においては、政権をうかがう側の党も欠くべからぬものです。しかしながら、政権を奪還しなくてはならないはずの自民党が、嫌われた理由を党名に求め、名前より先に変えるべきものがあるはずなのに、未だに田母神氏の擁立未遂などを行っており、果ては奪還に向けた勧告案で掲げられた目標は意図不明、改名案は勘違い甚だしいなど、行動が逆に自民党の窮状を印象付けるばかりか、下手をすると自らの立場をさらに追い込んでいるのは、非常に皮肉な結果ではあります。
 今の自民党がやるべきは、金配りなどの嫌われる要因となったふざけた行為を総括・反省し、田母神氏を擁立したり、敗戦の責任を名前に押し付たりといった、明らかに「ますます嫌われる」行動を行わず、地道に信頼回復に努めることです。どうしても名前の変更が必要であれば、その後に考えても遅くはありません。もっとも、これらのことをしっかり行っていれば、そのころにはおそらく改名の必要などなくなっているはずです。

 GlassFish v3のプレビューでServlet 3.0を使用してみました。
 GlassFish v3にはインストーラが用意されており、インストール自体は非常に簡単です。インストール時の設定内容にしても、せいぜい使用ポートやAdminコンソールのユーザー名・パスワードを設定するのみで、これといって難しい点はありません。また、ここで適当な情報を入力したとしても、若干面倒ながらもXMLを直接編集し、あるいはAdminコンソールを使用すれば、後からでも変更ができます。
 ちなみに、v3はまだプレビュー版のせいか、機能はかなり限定されているようです。まずJNDIの一覧表示がないのには頭を抱えました。設定項目の数も乏しく、JMSの設定などの機能もなく、唯一データベースの設定ができる程度です。ログの表示機能もないため、以前に散々苦しめられたログ表示時の無限ループバグ(エラーログを見ようとするとまれに無限ループに陥り、VMごと落とさなくてはならない)が今回も健在かは不明です。
 とりあえずEJB 3.1を試してみようと、warにEJBとServletの両方を入れたEnterprise Applicationをデプロイしてみたところ、デプロイ自体は無事に完了し、EJBとServletの両方が含まれていることも認識されているらしいものの、EJBのDIに失敗してしまいました。それどころか、netstatで調べてみても、iiopのポート(この場合は3700)自体が開かれておらず、直接的にも間接的にもEJBを取得できませんでした。これはJDBCも同様で、Adminコンソール上のPingコマンドは成功するものの、取得することができません。バグなのか機能制限なのか、はたまた私の環境でのみ発生する固有の問題なのかは不明です。なお、v2.1では正しくiiopのポートが開かれ、DIでもInitialContextでも正しく取得できたことを付記しておきます。
 EJB 3.1及びServlet 3.0で特筆すべきは、何といっても次の部分でしょう。

・EJBでEnterprise Applicationを作る場合、EJBをまとめたjarとServletをまとめたwarを作成し、それをまとめたearを作成してデプロイしていた。しかし、EJB 3.1ではwarに全部入れておけば認識される。
・Servletもアノテーション化され、web.xmlは任意になった。必要がなければファイルを用意する必要すらない。

 すなわち、いまいましいXMLを書く必要がほとんどありません。人類最大のムダの1つがようやく解消されました(Javaの普及規模を考えると、決して大げさな表現ではないでしょう。CMPも削除の動きとなっており、旧EJBは迫害の一方です。リモートホームだのと関係ないものを書かなくてはならず、スタブなどといった意味不明なものを作らされ、deploytoolなるもので意味不明な設定をしなくてはならなかった私の時間と労力を返してください)。少し前まであのザマであったのが、いまやEJBの実装のみを書いて@Statelessなどを付加すればEJBとなり、@Entityをつければ永続化を担当してくれるようになり、Servletもアノテーション1つですから、時代は変わったものです。ついでに、EJBが欲しければ@ResourceでJNDI名を指定するだけなのですから、何から何まで簡単です。これほど楽をして良いものかとも言いたいところですが、これまでの苦行こそ間違っていたのであって、これが本当です。
 Servlet関連のアノテーションはjavax.servlet.annotationパッケージにあります。ここのアノテーションを使用すれば、(特に詳細な設定の必要がなければ)web.xmlを全く書く必要がなくなります。正真正銘、Javaコードを書くだけでデプロイが可能です。
 さすがにweb.xmlの代わりをしているだけあって、アノテーションやその要素はどこかで見たような名前となっていますが、ひとまず動かすだけなら@WebServletさえあれば何とかなります。ちなみに、「Web〜」と名がついた4つのうち、Servletのクラスにつけるべきものは@WebServletのみのようです。@WebFilterはFilterをインプリメントしたフィルタクラスにつけますし、@WebInitParamは@WebFilterのinitParams要素で使用できます。@WebListenerは各種リスナに付加します(ドキュメントによれば、ServletContextListener、ServletContextAttributeListener、ServletRequestListener、ServletRequestAttributeListener、HttpSessionListener、HttpSessionAttributeListenerのいずれかをインプリメントしている必要があるとのこと。どの場合であってもこれ1つつけるだけで動作するようです)。
 それでは、まず単純なサーブレットを作成してみます。ただメッセージを表示するだけの簡素なものです。
// Servlet30.java
package com.yamicha.servlet30;

import javax.servlet.annotation.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

@WebServlet(name="servlet30" , urlPatterns={"/servleturl/*"})
	public class Servlet30 extends HttpServlet{
	public void doGet(HttpServletRequest request ,
		HttpServletResponse response) throws IOException{
		response.setContentType("text/plain");
		PrintWriter out = response.getWriter();
		out.println("Servlet 3.0");
		out.close();
	}
}
 @WebServletにはいくつもの要素がありますが、すべてOptionalです。しかしながら、urlPatternsを空(デフォルトでは空)にすると例外が発生してしまいました。nameのデフォルト値は試していませんが、例外が出る可能性は十分にありそうです(Servletクラス名などを使用する可能性も考えられますが)。逆に、この2つさえ正しく指定されていれば、動作することを確認しています。
 今までのServlet同様、これを以下のように配置します。
/WEB-INF
 /classes
  /com
   /yamicha
    /servlet30
     Servlet30.java
 今まではWEB-INFにweb.xmlを置いていましたが、@WebServletがあれば全くその必要はありません。これをコンパイルし、jarコマンドでwar化し、Adminコンソールからデプロイするだけです。後は実際にアクセスしてみて(ServletのURLはurlPatternsの記述によって異なります)、メッセージが表示されれば成功です。なお、javax.servlet.annotationパッケージはjavax.servlet.jarに入っています。

 ついでに@WebFilterと@WebListenerも一通り試してみました。試した限りにおいては、これらはフィルタやリスナにつけるものと考えて間違いないようです。
/WEB-INF
 /classes
  /com
   /yamicha
    /servlet30
     EJB31Servlet.java
     EJB31Filter.java
     EJB31ServletContextListener.java
 今回はEJBと全く関係ありませんが、名前がEJB31〜となっているのは、もともとEJB 3.1を同じwarに入れてデプロイしようと考えていたためです。ところが、何をどうあがいてもEJBを取得できなかったため、やむなくServletのみのwarとなり、結果としてふさわしくない名前が残ってしまいました。
 作成したソースは以下の通りです。
// EJB31Servlet.java
package com.yamicha.servlet30;

import javax.servlet.annotation.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

@WebServlet(name="servlet30" , urlPatterns={"/servleturl/*"})
	public class EJB31Servlet extends HttpServlet{
	public void doGet(HttpServletRequest request ,
		HttpServletResponse response) throws IOException{
		response.setContentType("text/plain");
		PrintWriter out = response.getWriter();
		out.println(request.getServletContext().getAttribute("time"));
		out.close();
	}
}

// EJB31Filter.java
package com.yamicha.servlet30;

import javax.servlet.annotation.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

@WebFilter(filterName="WebFilterSample" , servletNames={"servlet30"} ,
	urlPatterns={"/servleturl/*"} ,
	initParams={@WebInitParam(name="deny_arg" , value="deny")})
	public class EJB31Filter implements Filter{
	private String deny_arg;

	public void init(FilterConfig config){
		deny_arg = config.getInitParameter("deny_arg");
	}
	public void doFilter(ServletRequest request , ServletResponse response ,
		FilterChain chain) throws IOException , ServletException{
		if(deny_arg == null || request.getParameter(deny_arg) == null){
			chain.doFilter(request , response);
		}else{
			((HttpServletResponse)response).
				sendError(500 , "WebFilter Test");
		}
	}
	public void destroy(){
	}
}

// EJB31ServletContextListener.java
package com.yamicha.servlet30;

import javax.servlet.annotation.*;
import javax.annotation.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Date;

@WebListener public class EJB31ServletContextListener
	implements ServletContextListener{
	public void contextInitialized(ServletContextEvent sce){
		ServletContext context = sce.getServletContext();
		context.setAttribute("time" , new Date().getTime());
	}
	public void contextDestroyed(ServletContextEvent sce){
	}
}
 @WebFilterと@WebListenerを使用するため、変な具合に手の込んだサンプルです。
 まずServletContextが初期化されると、@WebListenerが付加されているEJB31ServletContextListenerのcontextInitializedが呼ばれます。ここではsetAttributeが呼び出され、"time"に対して現在の時間が格納されます。
 Servletに対してアクセスがあると、@WebFilterが付加されたEJB31Filterがまず呼び出されます。@WebFilterアノテーションではinitParamsが設定されており、Perlなどでいうところの「"deny_arg" => "deny"」が設定されます。ここで設定された値はFilterConfigのgetInitParameterで受け取ることができ、EJB31Filterでは実際にinitメソッド内で受け取り、deny_arg変数に格納しています(それならいちいちgetInitParameterなど使わず直接deny_arg変数に格納するなり、定数にするなりすべきと考えた方、正解です。ただ、init-paramはもともとweb.xmlの設定で、それをアノテーションに移植しているわけですから、これは仕方がありません)。
 それで、このフィルタの効果はといいますと、initParamsの"deny_arg"で指定された名前の引数があると、500エラーを表示します。今回は「"deny_arg" => "deny"」ですから、引数に"deny"なる名前のものがあると、500エラーとなります。具体的には「.../servleturl/?deny」などがそれに該当します。
 一方、フィルタに引っかからなかった場合には、EJB31ServletContextListener内で格納した時刻データ(long値)が表示されます。したがって、同じServletContextが使用されている限り、何度読み込みなおしても値は変化しません。
 実際に動かしてみて、long値が表示されればリスナが呼ばれたと分かりますし、引数にdenyを渡してみて500エラーとなればフィルタが動作していることが分かります。もともとフィルタもリスナもweb.xmlに書かなければ機能しませんでしたが、Servlet 3.0ではアノテーションの1つもあれば動作してしまいます
 ただ1つ文句を言わせていただくなら、なぜこれをJava EE 5に含めなかったのでしょうか。これはJSF 2.0についても同じですが、EJBが楽になっただけに、web.xmlやapplication.xmlに殺意を抱いた人も少なくなかったことでしょう。ともかくありがたい限りです。
カテゴリ [開発魔法][社会問題] [トラックバック 0][コメント 0]
<- 前の記事を参照 次の記事を参照 ->

- Blog by yamicha.com -