タグ

ブックマーク / www.eisbahn.jp (18)

  • package-info.javaをコンパイルするために

    Javaにおいて、パッケージにいくつかのアノテーションを指定することができます。これをするために、パッケージ定義のみを持つpackage-info.javaファイルを作成する必要があります。例えば、以下のような感じです。 /** * This package includes ... classes. * @author Yoichiro Tanaka */ package jp.eisbahn.foo.bar; このpackage-info.javaファイルは、コンパイルすることができます。しかし、上記のケースでは、このファイルは不幸にもコンパイルされないでしょう。その理由は、それが実行時に必要とはjavacコマンドが判断しないからです。それ故に、もしpackage-info.classファイルが欲しい場合は、RUNTIME値を持つ何らかのアノテーションを配置する必要があります。 /**

    yohjizzz-backup
    yohjizzz-backup 2010/01/07
    「もしpackage-info.classファイルが欲しい場合は、RUNTIME値を持つ何らかのアノテーションを配置する必要があります...」⇒知らなかった○
  • HttpServletResponse#getOutputStream()したストリームは自分でclose()するのか?

    久々にJavaな話題。昨日社内で、 「Servletの中でresponse#getOutputStream()や#getWriter()したストリームは、自分でclose()する必要があるの?それともclose()せずに放置が正解なの?」 という質問を受けた。僕は「自分で獲得したリソースは自分で明示的に解放すべき」という考えが基にあり、思い返すと、doGet()やdoPost()メソッド内でちゃんと自分でclose()するコーディングを長年に渡って行ってきた。flush()に関してもclose()したタイミングで行われるだろうし、初期のアホコンテナに対しては、ちゃんと後処理を行ってくれないんじゃないか、という不信感があったため、いつも自分でclose()を明示的に呼んでいた。 でも、昨日質問を受けて、果たしてclose()を自分でする必要があるのか?コンテナにclose()は任せる必要が

    yohjizzz-backup
    yohjizzz-backup 2008/01/11
    Close はコンテナにお願い。という件。
  • こみゅすけをJRuby on Glassfishに移行!

    機能追加をして久々にmongrelを再起動したら,こみゅすけが起動しなくなった。というか,4つ動かしていたrailsアプリが全滅。すっごい緊急事態。 稼働させているサーバは,Fedora Core 6。64bitのクアッドコアCPUで,uname -aの結果は以下の通り。 Linux chako 2.6.20-1.3002.fc6xen #1 SMP Mon Aug 13 14:21:21 EDT 2007 x86_64 x86_64 x86_64 GNU/Linux yumを毎日自動起動させていたのだが,先週の10月11日にruby関連のパッケージが「1.8.5.113-1.fc6」になった模様。たぶんこれが原因。ruby -vとrails -vの出力結果は以下の通り。 ruby 1.8.5 (2007-09-24 patchlevel 114) [x86_64-linux] Rails

  • Safariでdojoを使うと文字化けする件

    こみゅすけは,dojoというライブラリをかなりの勢いで使用している。dojoは数多くあるJavaScriptライブラリの中で,おそらく最も大きなコードセットだろう。イベント処理やIO関連,各種ウィジェットなど,Ajaxでアプリケーションを作る上で必要となる全ての分野について網羅している。今まではそのコードの大きさのために「遅いっ!!」という悪印象があり,利用を敬遠してきた人も多くいることだろう。しかし,0.4.2以降では,テンプレートの読み込みの削減など,動作の遅さを根解決するための修正が施されているために,結構軽くなってきたな,と個人的には思っている。次の0.9もβ版がそろそろ登場するはずなので,世間も今後dojoを採用することを積極的に検討しても良いのでは,と真面目に思っている。 しかし,dojoを使う上で,1点だけやばいことがある。それは, 「Safariで文字化けしちゃう」 とい

    yohjizzz-backup
    yohjizzz-backup 2007/12/04
    後でちゃんと読みます!
  • 「こみゅすけ」作ってます!

    勉強会に顔を出したり,あるいは主催側に回ってみたり,足を使った活動を徐々に増やしている今日この頃。僕がいるIT業界では,多くのコミュニティがそれぞれ「勉強会」と称したミーティング(≒飲み会)を行っている。 そんな勉強会,日々ググっている最中に偶然コミュニティに出会ったり,身近な誰かから聞いたり,といった感じで情報を得ているのがほとんどではないかと思う。せっかくなので,いつどこでどんな勉強会が行われているのか,という情報を提供するサイトを作ってみようと思い,そろそろ形になってきたので公開を開始した。 その名も,「 こみゅすけ」。コミュニティ・スケジュール,略して「こみゅすけ」。 これを作ろうと思い立ったのは,JavaEdge発足総会の帰りの新幹線の中。総会の質疑応答で「コミュニティや勉強会の情報を仕入れることが難しい」というような意見が出て「確かにそうかも」と思った。特に地方に行けば行くほど

    yohjizzz-backup
    yohjizzz-backup 2007/12/04
    こみゅすけぇぇぇーっ!! http://commusuke.eisbahn.jp/
  • tracがsubversionの履歴を拾ってくれなくなったとき

    tracがsubversionの履歴を拾ってくれなくなったとき Written on Aug 1, 2007. Posted in My PC environment 気がつくと,ある日からsubversionへのコミット履歴などをtracが拾ってくれなくなっている現象が発生するときがある。今まさに,その状況に直面した。「subversionのリポジトリが壊れたのかっ!?」とtracの表示を信じてしまったのだが,別のsubversionクライアント(subclipse)で覗いてみると,壊れていないっぽい。 ググって調べてみると,tracがsubversionの履歴を拾ってくれなくなったら,以下のコマンドを試すといいらしい。 trac-admin [svnリポジトリのパス] resync 見事にこれで復活可能。subversionの履歴がtracのTimelineに表示されるようになった。

    yohjizzz-backup
    yohjizzz-backup 2007/12/04
    trac-admin {svnrepo} resync ...
  • 天使やカイザーと呼ばれて: Ruby on Railsのテスト環境が気持ちいい

    Javaな世界に10年以上どっぷりと浸かってきたが,Ruby on Rails(RoR)をやっていると「良く考えられているなぁ」と感心してしまう箇所が随所に見られる。とかくScaffoldやActiveRecordに関するコーディングに目が行ってしまいがちだが,僕個人的にはテストに関する環境が最も「おぉ」と感じている。 言うなれば,「JUnit + DbUnit + Cactus」な環境が標準で整備されている,ということだ。 JUnitについては,もちろんTest::Unitがそれに相当する。Test::Unit::TestCaseクラスを継承し,”test_“で始まる名前のメソッドを定義していくというのは,xUnitの流儀とほぼ一致している。JUnitで単体テストを行ったことがある開発者は,違和感なくTest::Unitでテストケースクラスを書いていけることだろう。 Web+DBアプリケ

    yohjizzz-backup
    yohjizzz-backup 2007/12/03
    「とかくScaffoldやActiveRecordに関するコーディングに目が行ってしまいがちだが,僕個人的にはテストに関する環境が最も「おぉ」と感じている。…」
  • 天使やカイザーと呼ばれて: 約5時間かかったRuby on Railsの実行環境構築

    ここ数日はJavaからほとんど離れて,Ruby on Railsのお勉強に多くの時間を割いている。確かにRoRがこんだけ騒がれる理由がわかる。railsの内部処理に踏み込むと宇宙な世界だが,railsの上でアプリケーションを書いて単体テストをしている分には,この上ない気持ちにさせてくれる。 しかし,RoRアプリの運用環境構築に5時間も苦戦するとは思わなかった。 RoRの運用環境は,現在では以下のパターンがあるらしい。細かく分ければ,もっと多くの組み合わせがあるだろう。 apache + mod_ruby apache + mod_fastcgi apache + mod_proxy + lighttpd apache + mod_proxy + mongrel lighttpd + FastCGI lighttpd + mongrel mongrel まず,mod_rubyを使ったパターン

  • 動的言語やrails系に走る理由

    Ruby on Railsという言葉は誰しも知っている状況であり,さらにJava言語を推進してきたSunでさえJRubyを担ぎ出す今日。米国ではPythonで書かれた大規模サイトがスピード感を持って次々と登場してきている。昔からちょっとしたWebサイトにPHPPerlといったスクリプト言語は広く使われてきたが,RubyPythonによって,スクリプト系言語,つまりLLの印象は多くの開発者にとって大きく変わった。 LLがなぜこんなにももてはやされ,そして採用され始めているのか。大きく2つに分けられると思う。 とにかく早く目的のビジネスを立ち上げたいから。 LLの言語的特性やrailsの仕組みに興味があるから。 LLに興味を持った大多数の開発者の視点は,後者ではないだろうか。 LLを採用してWeb上でサービスを展開し成功している企業のほとんどに,スピード感を感じる。そして,サービスの内容に

    yohjizzz-backup
    yohjizzz-backup 2007/12/03
    「Ruby on Railsという言葉は誰しも知っている状況であり,さらにJava言語を推進してきたSunでさえJRubyを担ぎ出す今日。…」
  • Searchclipse公開開始!

    Rimoclipse,Lingrclipse,Twitterclipseと,どちらかというと生産性を低下させてしまうEclipseプラグインを開発してきたが,「〜clipse」シリーズ第4段として,Searchclipseの公開を開始した。 Searchclipseは,FirefoxやIE7に搭載されている検索バーのようなものだ。 検索サイトとして,インストール直後はGoogleWikipedia,Exciteの翻訳サイトを登録してある。 検索サイトは,設定画面上で追加することができる。 この設定画面では,サイト名とURLテンプレートを組で追加することができる。URLテンプレートは,検索サイトのURL中に検索キーワードが置換される”${keyword}”を含む文字列である。${keyword}の部分には,入力されたキーワードがUTF-8のBASE64でエンコードされた文字列で置換される。

  • クロージャの再帰処理

    yohjizzz-backup
    yohjizzz-backup 2007/12/03
    「JavaSE7からクロージャがJava言語にも入るとか入らないとか議論されているが,Groovyではそんなクロージャをいち早く体感することができる。…」
  • 動的プロキシが循環参照していた際のシリアライズ問題

    S2Wicketの新仕様を実装する際に問題となった,動的プロキシのシリアライズ問題だが,ここで直面した問題を整理したいと思う。そのために,問題領域に限定したコードを作成したので,興味のある方,解決策を知ってるぜ!という方は,ぜひ ここからプロジェクトをダウンロードして欲しい。 では,問題の簡単な説明をしていこう。まず,SwingやSWTなどのコンポーネント関連のクラスでよく見られるコンポジットなクラス構造を想像する。 Componentクラスはparentフィールドに他のComponentを保持することができ,parentフィールドは親のコンポーネントを表している。Formクラスは子となるComponentクラスを保持することができる。来であれば複数のコンポーネントを持つことができるようにすべきだが,コード上ではchildフィールド1つとしている。 全てのクラスは,abstractなクラ

  • 新S2Wicket仕様,断念

    約2ヶ月間,Wicketをより使いやすくしようとチャレンジしてきたが,力及ばず断念することを判断した。 コンポーネントベース開発を採用しているWicketについて,コーディングの中心はコンポーネントの組み上げ処理であり,SwingやSWTなどのGUIアプリケーションと同じくらいの記述内容と記述量が求められる。コンポーネントの組み上げは「インスタンス生成」と「モデルとの関連付け」,そして「親コンポーネントへの登録」処理の連続であり,共通的に見える割には共通化が難しく,できあがったコードは非常に煩雑になる。 この問題を打開するために,コンポーネントやモデルのフィールド定義に独自のアノテーションを付加することで,上記の処理を共通の機構が肩代わりすることでコーディング量を減らし,さらにコードの定型化を図ることでIDEを作りやすくする,ということを考えた。それが「 次期S2Wicketではこうなりま

  • 天使やカイザーと呼ばれて: MacBook Pro アーカイブ

    RSS 2.0 このブログは、クリエイティブ・コモンズ・ライセンスの下で保護されています。 Powered by Movable Type 4.0 Copyright (C) Yoichiro Tanaka, All rights reserved.

  • Javassistを使った動的プロキシの作成

    前回の「 動的プロキシとシリアライズ」エントリで紹介した通り,今回はその第一歩として,Javassistを使って動的プロキシを作成するための方法を紹介してみようと思う。 Javassistは,動的プロキシを作成するためのライブラリというよりは,バイトコードを操作するためのライブラリである。とは言っても,バイトコードに対する低レベルな処理は,Javassistに完全にお任せで大丈夫である。JavassistのAPIを使っている限りでは,バイトコードに関する知識はほぼ0で良い。Javassistを使うと,クラスファイルを作り出すこともできるし,ファイルとして生成しなくても,その場でClassオブジェクトとして利用することが可能である。生成したいクラスについて,親クラスやインタフェースを実装させることもできるし,フィールドやメソッドを追加することもできる。 では,さっそく例を見ていこう。まず,次

    yohjizzz-backup
    yohjizzz-backup 2007/12/03
    「Javassistを使うと、クラスファイルを作り出すこともできるし...」
  • 動的プロキシとシリアライズ

    一般的なDIコンテナに大抵標準装備されている機能に,AOPがある。例えば,あるオブジェクトのあるメソッドが呼び出された際に,そのメソッドを処理する前に何らかの処理を挟み込む,などがAOPである。この機構を実現するためには,動的プロキシと呼ばれる機能が必要となる。 デザインパターンのProxyパターンは,あるオブジェクトと同等のインタフェースを持つProxyクラスを作成し,そのProxyクラスの中から来のオブジェクトを呼びだすようにする。クライアントは来のオブジェクトを触っている感覚なのだが,実際にはProxyクラスという「代理」のものが応答し,来のオブジェクトを当に呼び出すかどうかの判断とか,引数の内容を変更してしまったり,来のオブジェクトからスローされる例外の処理をProxyクラス内でしてしまう,などの機能拡張をProxyクラスで行うというパターンである。クライアント側は,Pr

  • lingrclipseのちょこっとした機能拡張

    yohjizzz-backup
    yohjizzz-backup 2007/12/03
    LingrをEclipse上で使用できるようになるLingrclipse~
  • DIコンテナの設定ファイル書くの?書かないの?

    DIコンテナの設定情報,つまり「オブジェクトの依存関係」や「オブジェクトの設定内容」について,規約重視で暗黙のものとするか,ファイルに記述することで形式のものとするかは,個々人によって主張が異なるようである。何が何でも設定ファイルを書かない,あるいは,何が何でも設定ファイルを書く,といった「原理主義者」も多く,多くの場合は彼らの説明に「コンテキスト」が含まれない。よって,主張を聞いても,実際に何らかのDIコンテナを使う際をイメージした場合,その主張に沿う部分と沿わない部分が僕個人の中で発生し,完全に主張を受け入れられないことがよくある。 結局のところ「DIコンテナをどう使うか」(=上記で言ったコンテキスト)によって,暗黙知とするか形式知とするかを判断しなければならないと思っている。 DIコンテナの適用パターンとして代表的なものは,「View,Business Logic,Dao」といった3

  • 1