タグ

ブックマーク / ryoasai.hatenadiary.org (24)

  • Javaの型パラメーターに対してstaticメソッドを呼び出した場合の挙動 - 達人プログラマーを目指して

    以前にJavaの配列関連で調べたことがあったのですが、Javaの総称型は型消去によって直感的でない挙動をする場合があります。 Java言語のClassクラスが持つちょっと不思議な性質について - 達人プログラマーを目指して Java5の型システムを理解するにはリフレクションAPIを使ってみるのが最短の近道になる - 達人プログラマーを目指して 特に、総称型の型パラメーターTについては以下はコンパイルできないという制約があります。 new T() new T[配列サイズ] catch (T ... extends T T.class instanceof T また、staticメソッドやstatic初期化ブロック内でクラスの型パラメータを使えないという制約もあります。 AngelikaLanger.com - Java Generics FAQs - Type Parameters - An

    Javaの型パラメーターに対してstaticメソッドを呼び出した場合の挙動 - 達人プログラマーを目指して
    nobeans
    nobeans 2011/11/28
    staticフィールドとメソッドは隠蔽しないこと
  • Java EE6環境でJSF2を使う場合はCDIのBeanを管理Beanとして使う方がよい - 達人プログラマーを目指して

    先週の勉強会で紹介させていただいたjsf-scrumtoys-refactoredでは、JSFの管理Beanを使用する代わりにCDIのBeanを利用しています。この点説明が不十分だったので、ここで簡単に補足させていただきます。 JSFと管理Bean 勉強会の中で、JSFはコンポーネントベースのWebアプリケーションフレームワークであると説明させていただきました。(この点については以下のエントリーもご参照ください。Struts1に代わるWebフレームワークの選択 - 達人プログラマーを目指して) コンポーネントベースのフレームワークの場合、VBやSwingといった伝統的な(Webでない)GUIアプリケーションのように、フォームや入力フィールド、ボタンといった画面コンポーネントのツリーが構築されます。そして、画面部品の入力やクリックなどのイベントに従って、管理Beanと呼ばれるPOJOに対して

    Java EE6環境でJSF2を使う場合はCDIのBeanを管理Beanとして使う方がよい - 達人プログラマーを目指して
  • JPAを使ったデータアクセスでポイントとなる永続コンテキストについて - 達人プログラマーを目指して

    先週書いたエントリJava EE6標準の範囲でフルスタックのWebアプリケーションが簡単に作成できることを確かめてみました。 - 達人プログラマーを目指してで、Java EE6の標準仕様を使うだけで、かなりシンプルにデータのCRUD処理を行うアプリケーションが作成できることを紹介しました。ただし、前回は全体のアプリケーションを紹介しただけなので、細かい仕掛けについては解説しきれませんでした。今回は、前回に引き続き特にJPAを使ったデータベースアクセスの部分がどうなっているのかをもう少し掘り下げて解説してみたいと思います。 なお、この場で宣伝ですが、8月10日(水)にGlassfishユーザーグループの勉強会にてお話をさせていただくことになりました。 GlassFish Japan Users Group 勉強会 2011 Summer : ATND 私はJava EE6を使った開発について

    JPAを使ったデータアクセスでポイントとなる永続コンテキストについて - 達人プログラマーを目指して
  • Java EE6標準の範囲でフルスタックのWebアプリケーションが簡単に作成できることを確かめてみました。 - 達人プログラマーを目指して

    Java EE6でさらに開発は容易になった? 以前JavaEE標準の進化から最近の業務アプリケーション開発手法の変遷について考える - 達人プログラマーを目指してにてJava EE標準の開発モデルの進化について説明しました。10年前の相当面倒だったJ2EEの開発モデルと比べて、最新のJava EE6では、様々なOSSの良い特徴を取り入れて、簡単にプログラミングできるように大幅に改良されています。また、Glassfish 3.1やJBoss AS7などは起動時間が非常に短縮されており*1、よほど遅いPCでなければわずか数秒で再起動することができます。さらに、Java EEサーバーが重くてテスト不能というイメージはもう過去の話かもしれない - 達人プログラマーを目指してで紹介したように、Java EE6では従来困難であった単体試験の自動化も容易になっています。 個々の技術は優れているのだけれど

    Java EE6標準の範囲でフルスタックのWebアプリケーションが簡単に作成できることを確かめてみました。 - 達人プログラマーを目指して
  • Javaエンジニア必携の「プログラミングGroovy」を献本していただきました - 達人プログラマーを目指して

    昨日、ポストを確認したところ、執筆陣の皆さんより、献として送っていただきましたプログラミングGroovyが届いていました。 プログラミングGROOVY 作者: 関谷和愛,上原潤二,須江信洋,中野靖治出版社/メーカー: 技術評論社発売日: 2011/07/06メディア: 単行(ソフトカバー)購入: 6人 クリック: 392回この商品を含むブログ (155件) を見る私の人生で初の「献」であったということもありますが、当に出版を心待ちにしていたであったので届いていたのをみつけたときは、(まったく季節外れな表現ですが)子供のころにサンタさんからプレゼントが届いていたのを見つけた時と同じような感動を覚えました。私は「Groovyおじさん」と呼ばれてもよい年齢なのですが、新しい技術書が届いた時のわくわく感というものは常にありますね。でも、出版から一足早く「献」を受け取るというのは生まれて

    Javaエンジニア必携の「プログラミングGroovy」を献本していただきました - 達人プログラマーを目指して
    nobeans
    nobeans 2011/07/03
    さすがの書評でした/@kazuchika とのツイッターやりとりが短いながらも深い
  • Javaプログラミング能力認定試験の問題がかなり改善されていました - 達人プログラマーを目指して

    以前、ブログでJavaプログラミング能力認定試験の1級のサンプルプログラムがあまりにも旧態依然とした設計でひどいという指摘をさせていただきました。 SI業界(日)のJavaプログラマーにはオブジェクト指向より忍耐力が求められている? - 達人プログラマーを目指して 実際、例題のプログラムがあまりにも理解しにくかったので、そこでは、 日のSI業界でJava PGとして仕事をするためには、オブジェクト指向的にきれいなあるべき姿でコーディングできるスキルではなく、このようにオブジェクト指向をまったく理解していない上流のSEが作成した異常な設計書に忠実にしたがってコードを書き、また、その複雑なスパゲッティコードを長期にわたってメンテナンスする根性と忍耐が最重要のスキルとして試験で試されているということなのかと私は理解しました。 と書いたのですが、冗談は抜きにして、実際、この例題のようなひどい

    Javaプログラミング能力認定試験の問題がかなり改善されていました - 達人プログラマーを目指して
    nobeans
    nobeans 2011/06/12
    ホントだ。すごく改善されてる。まだアレなとこはあるけど、構造自体はぱっと見で割と普通になってた。
  • EJBコンテナが分散コンポーネントモデルから軽量なDIコンテナに変化してきた歴史を振り返る - 達人プログラマーを目指して

    十年一昔といいますが、文字通り一昔前の書籍ではJ2EEのEJBコンポーネントはプロセスが分散化されたリモート呼び出しにより処理を行う分散コンポーネントとして説明されています。そして、残念ながら現状Java EE関連の日語の書籍はこうした古い時代に書かれたものがほとんどとなっています。それゆえ、 開発効率がきわめて悪い 実行性能が悪い*1 仕様がきわめて複雑で理解が大変 といった悪いイメージが定着してしまっているのではないかと思います。しかしながら、最新バージョンのJava EE6では、Spring、Guice、SeamなどのOSSの軽量コンテナのアイデアを取り込むことにより、以前とは比較にならないくらい開発効率が改善されているという事実があります。 ここでは、Hello WorldのEJBの書き方を以前の古いバージョンから順次振り返りながら比較してみることで、EJBのプログラミングモデル

    EJBコンテナが分散コンポーネントモデルから軽量なDIコンテナに変化してきた歴史を振り返る - 達人プログラマーを目指して
  • Spring MVCのススメ - 達人プログラマーを目指して

    先日、Struts1に代わるWebフレームワークの選択 - 達人プログラマーを目指してにて、現状アクションベースのMVCフレームワークとしてはSpring MVCが有望ということを書いたのですが、今までStrutsの影に隠れてあまり人気がないようですね。*1これから何が流行りそうかというマーケティング上の問題はおいておくとして、純粋に技術的な観点から、私がSpring MVCで気に入っているいくつかの点について説明します。 インターフェースに対するコーディングの徹底による拡張性の高さ Spring MVCはDIコンテナーとしてのSpringのコア機能に隠れてあまり有名でないかもしれませんが、実は、Springが開発された当時から存在するコンポーネントです。ですから歴史的には意外に古く2003年くらいから存在しているということになります。(その原型は実践J2EEシステムデザインのサンプルコー

    Spring MVCのススメ - 達人プログラマーを目指して
  • 大混乱に陥っているJavaEE 6のアノテーションに関する使い分けについて - 達人プログラマーを目指して

    JavaEE 6標準は、従来のJavaEE 5に対してさらなるEoDと軽量化を目指しているということだったのですが、いざ使おうと思うと、名前が同じアノテーションが複数のパッケージに定義されていたり、意味的にほとんど違いがないようなアノテーションが存在していたりで、初心者はもちろんのこと、ある程度ベテラン開発者であってもどう使い分けてよいものか途方にくれてしまいます。仕様は多数の人間の決めることですから、ある程度機能的な重複や矛盾があることは避けられないことですが、それでも、特にDIやEJB、管理Bean関係のAPIに対する機能重複についてはかつて経験したことがない程ひどく、これで当にfinalの状態なのかと信じられないくらいです。さまざまなアイデアを取り込むのは大歓迎ですが、かつて仕様に統一感があった(仕様自体はまったく使い物になりませんでしたが)EJB2.1のころの時代が逆に懐かしく感

    大混乱に陥っているJavaEE 6のアノテーションに関する使い分けについて - 達人プログラマーを目指して
    nobeans
    nobeans 2011/05/23
    これはひどい
  • Java EEサーバーが重くてテスト不能というイメージはもう過去の話かもしれない - 達人プログラマーを目指して

    Java EE 5まではいろいろな面で生産性が低かったと言わざるを得ないところがあった 今まで仕事上、Java EEのサーバーを実行基盤として用いるさまざまなシステムの開発に関わってきましたが、JavaEE(古くはJ2EE)のサーバーというと経験上 xmlの設定ファイルの記述がきわめて面倒 J2EE1.4までは、EJBを使った場合Pojoとしてサービスやエンティティを作成できない サーバーの再起動にものすごく時間がかかる ライセンス料が高い サーバーを気軽にダウンロードして試せない というような非常に悪いイメージがあったというのが正直なところでした。 それゆえ、JavaをSEとEEに分類するのは今では無意味になってきている? - 達人プログラマーを目指してでも紹介したように、Seasar2やSpringといった軽量コンテナというしくみが登場し、事実上EJBコンテナの機能はほとんど利用せず、

    Java EEサーバーが重くてテスト不能というイメージはもう過去の話かもしれない - 達人プログラマーを目指して
  • DevLoveのBeautiful Development(DDD勉強会)に参加してきました - 達人プログラマーを目指して

    昨日、DevLoveの主催するBeautiful Development(ソフトウェアの核心にある複雑さに立ち向かう)という勉強会に参加してきました。 https://sites.google.com/a/devlove.org/development/past-beneficiaries/devlove_ddd2 今回は、Domain-Driven Design(DDD)をテーマにした勉強会でした。ここで簡単にレポートさせていただきたいと思います。 勉強会参加のすすめ 実は、DevLoveの勉強会に参加するのはまだ今回が2回目です。*1 このように私自身もまだDevLove初心者なのですが、今回は初参加の人がかなり大勢いたようです。*2こういった技術者の勉強会というと、初心者お断りというか、相当の予備知識があったりOSSコミュニティーに貢献したりしていないと参加してはいけないのでないかと

    DevLoveのBeautiful Development(DDD勉強会)に参加してきました - 達人プログラマーを目指して
    nobeans
    nobeans 2011/05/03
    DevLoveのBeautiful Development(DDD勉強会)に参加してきました
  • Spring MVCでフラッシュスコープの機能を簡単に実装する方法 - 達人プログラマーを目指して

    JSF2.0やSeamなど、新しいフレームワークではフラッシュスコープという機能を利用することができます。これはもともとRuby on Railsで有名になった処理方式だと考えられますが、フラッシュにデータを登録しておくと一回のHTTPリダイレクトの最中のみデータが保持され、次回以降のリクエスト時までに自動的に削除されます。従来こうした仕掛けをHTTPセッションを使ってアプリロジック中で毎回個別に実現するのは結構面倒で、またデータが正しくクリアされずに残存するなどのバグも簡単に発生しがちでした。 以前はあまり知られていませんでしたが、2重送信の問題を回避するために、最近はPRG(Post/Redirect/Get)パターンというのがよく知られるようになっています。*1このパターンでは、POSTリクエストで画面遷移する場合は、間にリダイレクトとGETをはさむことでURLバーのアドレス表示と実

    Spring MVCでフラッシュスコープの機能を簡単に実装する方法 - 達人プログラマーを目指して
  • IntelliJ IDEAはGroovyの学習や開発に最適なIDEだった - 達人プログラマーを目指して

    先日、業務系のJavaプログラマーが知っておくべき10個のBad Partsとその対策 - 達人プログラマーを目指してで、Javaのイケていない部分について説明し、そこでGroovyやScalaといったいわゆる軽量言語(LL)を使うことでコードが単純化されるという説明をしました。私自身も勉強会や書籍などで「軽量言語は簡単ですよ」という説明をされるたびに、軽量言語に乗り換えてみたいなという気になるのですが、いざ試してみると圧倒的に高機能で安定しているJavaのIDEと比較して見劣りがしてしまい(特に入力補完とリファクタリング機能において)、結局Javaに戻ってしまうということが今までに何度かありました。 先日参加したGroovyの勉強会(JGGUGの勉強会(G*ワークショップ)に初めて参加してきました - 達人プログラマーを目指して)でJenkinsの川口さんがIntelliJを使ってGro

    IntelliJ IDEAはGroovyの学習や開発に最適なIDEだった - 達人プログラマーを目指して
    nobeans
    nobeans 2011/03/01
    使いこなしたい...
  • 業務系のJavaプログラマーが知っておくべき10個のBad Partsとその対策 - 達人プログラマーを目指して

    Java: The Good Partsののタイトルに触発されて、逆にJava言語の使いにくい部分をいくつかピックアップしてみました。Java EEなどの業務系のアプリケーションプログラマーの視点で書いていますので、別の立場ではここで指摘している事項が必ずしもBad Partではないという指摘もあるかもしれませんし、他にもいろいろなポイントがあると思いますが、とりあえず、私の独断で思いついたものを10個説明したいと思います。 1.標準APIのチェック例外が扱いにくい Java言語のチェック例外は当にGood Partなのか? - 達人プログラマーを目指してでも取り上げましたが、Bad Partの第一番目として標準APIのチェック例外が扱いにくいという点を指摘させていただきたいと思います。チェック例外については、理屈上コンパイラーによって例外の処理をプログラマーに強制させることができるす

    業務系のJavaプログラマーが知っておくべき10個のBad Partsとその対策 - 達人プログラマーを目指して
  • JGGUGの勉強会(G*ワークショップ)に初めて参加してきました - 達人プログラマーを目指して

    昨日JGGUGが主催するGroovyの勉強会に初めて参加してきました。 2月24日 第15回 G*ワークショップ(東京都) 今まで知らなかったのですが、もう15回も行われているのですね。なお、勉強会の詳しい内容については、既に、id:absj31さんが以下で詳しくレポートしてくださっていますので、ここでは要点だけ記述させていただくことにしたいと思います。 第15回 G*ワークショップに参加してきた - Diary of absj31 また、twitterのハッシュタグは#jggugです。 1.「Groovyの使い倒し方、Hudsonの場合」by 川口耕介 (CloudBees, Inc. / Hudsonプロジェクト) 最近何かと話題になったHudson改めJenkinsに関して、Groovyをいかに活用しているのかという貴重なお話を川口さんから直々に聞くことができました。(無料でお話が聞

    JGGUGの勉強会(G*ワークショップ)に初めて参加してきました - 達人プログラマーを目指して
  • システム系の例外は実行時例外+AOPでハンドリングするのがベスト - 達人プログラマーを目指して

    インフラ層のチェック例外はやはりJavaのBad Partだと思う 先日のJava言語のチェック例外は当にGood Partなのか? - 達人プログラマーを目指してで、 インフラ層のフレームワークなどでは実行時例外が適切 ということを書いたのですが、この点についてもう少し詳しく考えてみたいと思います。 Java: The Good PartsのではRMIの章があるのですが、RMIではRemoteというマーカーインターフェースを継承しつつ、すべてのメソッドがRemoteExceptionというチェック例外を送出する規則となっています。 Java Good Parts(9.1節より引用) pubic interface StatRecorder extends Remote { void recordGame(BoxScore stats) throws RemoteException;

    システム系の例外は実行時例外+AOPでハンドリングするのがベスト - 達人プログラマーを目指して
  • Java言語のチェック例外は本当にGood Partなのか? - 達人プログラマーを目指して

    デブサミ2011会場のオライリーのブースで目に入ったため、以下のを購入しました。 Java: The Good Parts 作者: Jim Waldo,矢野勉,笹井崇司出版社/メーカー: オライリージャパン発売日: 2011/02/24メディア: 大型購入: 3人 クリック: 148回この商品を含むブログ (37件) を見る180ページほどの薄いですし、各章は独立して気軽に読むことができます。早速、気になるいくつかの章から読んでみました。ただし、監訳者のid:t_yano氏も前書きで 書が、みなさんにとってJava以外の言語についても考えるようになり、みなさんのプログラミングの世界がさらに豊かになることを望みます。 と書かれているように、このから直接Javaのプログラミングのテクニックや知識を得るというよりも、ベテランの上級者がJavaについて考え直すきっかけ作りとして読むのが良

    Java言語のチェック例外は本当にGood Partなのか? - 達人プログラマーを目指して
    nobeans
    nobeans 2011/02/21
    おおむね同意。ただ、Javadocによる文書化もなくどんな非チェック例外がスローされうるか誰も把握できてない状態が容易に蔓延してしまうという罠をついこないだ目の当たりにしたところなので、やっぱり悩ましい。
  • Groovy言語とAspectJの人気が今ひとつな本当の理由 - 達人プログラマーを目指して

    先日DevLOVEの主催するぐるぐるGroovyという勉強会に参加してきました。 1月24日 DevLOVE ぐるぐるGroovy -Easy Going Groovy-(東京都) Groovy言語については、構文がJava言語に非常に近い上に、Javaの既存ライブラリーとの相互運用性も高く、さらに、Java言語に比べて非常に簡潔にプログラムが書けるという特徴があります。動的言語のRubyのような柔軟性とJavaプログラマーにとっての学習のしやすさをいう面を兼ね備えた軽量言語であり、私としてはSI業界でもきっと流行るはずに違いない思いと数年前から注目していました。 Groovyイン・アクション 作者: Dierk Konig,Andrew Glover,Paul King,Guillaume Laforge,Jon Skeet,杉浦孝,櫻井正樹,須江信洋,関谷和愛,佐野徹郎,寺沢尚史出版社

    Groovy言語とAspectJの人気が今ひとつな本当の理由 - 達人プログラマーを目指して
  • AJDTを使って規約違反のコードを検出する方法 - 達人プログラマーを目指して

    AspectJというと、メソッドなどに処理を織り込むAOPのイメージが強いと思いますが、AJDTというeclipseのプラグインを使うと強力なコード検証ツールとして利用できることは意外と知られていないようです。(AJDTはSpring Tool Suiteには最初から内蔵されています。) 実際、 コントローラークラスのメソッド内でフィールドの設定を行う サービス層を経由せずに直接DAOを呼び出している 日付オブジェクトを直接newしている*1 などの箇所をコンパイル時に検証して、警告やエラーとして検出できます。 たとえば、Spring MVCのコントローラークラスのメソッド内でフィールドの設定を行っている箇所を警告として検出するには以下のようなアスペクトを書くだけです。 package sample.mvc; import org.springframework.stereotype.Co

    AJDTを使って規約違反のコードを検出する方法 - 達人プログラマーを目指して
  • 次世代のモックフレームワークであるJMockitの基本的な使い方 - 達人プログラマーを目指して

    以前のモックフレームワークの技術的制約 今まで私が担当してきたプロジェクトにおいては、モックオブジェクトを使ったJUnitの単体試験はjMockとEasyMockのいずれかのフレームワークを利用して行ってきました。しかし、これらのフレームワークはJavaプラットフォームにおけるコード自動生成の考え方の変遷で説明したように動的プロキシーに基づいているため、以下のような制約がありました。 モック化する対象の型はインターフェースを実装しているか、継承可能なクラスであること モック化するメソッドはfinal、static、privateでないこと*1 モック化するロジックはコンストラクターの呼び出しではないこと モックオブジェクトをテスト対象クラスにDIかパラメーター経由で引き渡すことが可能であること モック化する場合はクラス全体をモック化する必要があること(getterやsetterなどは物の

    次世代のモックフレームワークであるJMockitの基本的な使い方 - 達人プログラマーを目指して
    nobeans
    nobeans 2011/02/05
    最近Mockitoが手になじんできたところだけど、特別なことナシにfinal/static/privateのテストもできるってところはよさげ。タイプセーフだし。jarのロード順に依存するところはちょっといやん。