これからJavaを勉強する人が読むと良い本

かなり主観はいっています。もしかしてオブジェクト指向は軽く理解していることが前提になっているかもしれません。

入門編

パーフェクトJava

Javaの基本を一通り勉強したいならこれ。「やさしいJava」とか読んでも使い物になりません。
一通り説明している上に個々の説明が詳細なので(例えばjava.util.Listの実装クラスは内部がこういう構造だからこういうときにはこれを使うとか)、 基礎作りに最適。

パーフェクトJava (PERFECT SERIES) (PERFECT SERIES 2)

Effective Java

Javaのコードを書く上で最低限知っておかなければ行けないことが詳細に書かれています。この本のアンチパターンとして紹介されているコードを書くとぷぎゃーっとされても仕方なし。これを読んでいない人はモグリと言っても過言ではない。

Effective Java 第2版 (The Java Series)

マルチスレッド編

Java並行処理プログラミング

Javaをやっていたら必ずマルチスレッドなプログラムに関わると言っていいと思います。スレッドなんて自分で作らないから関係ないぜって思っている人、多分気づかずにスレッドアンセーフなプログラムを書いているでしょう。スレッドセーフなプログラムを書くには、java.util.concurrentパッケージを使ってうまく並行処理を書くにはどうすればいいかを学べます。フレームワークとか作る人は必修。

Java並行処理プログラミング ―その「基盤」と「最新API」を究める―

Java言語で学ぶデザインパターン入門 マルチスレッド編

「Java並行処理プログラミング」の敷居が高い場合はこっちから入るといいです。ただし、java.util.concurrentパッケージを使っていないし、書き方が少し古いのでコードはあんまりまねない方がいいかもです。

増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編

デザインパターン編

有名な結城本

増補改訂版Java言語で学ぶデザインパターン入門

とみせかけ、この本はそれほどおすすめしません。コードが古いし、いまいちこのパターンがなんのために、どういう場面で必要となるのかわからないので。

個人的には全てのデザインパターンを一つずつ学ぶより、実際にどういうときにどういうパターンが使われるかを学んだ方が実践的で良いと思います。ので、以下2冊

Javaフレームワーク開発入門

フレームワークを作るためにはどういうパターンが必要かを学び、実際にフレームワークを作る形でデザインパターンを学べます。

Javaフレームワーク開発入門

ソースコードリーディングから学ぶ Javaの設計と実装

こっちは反対に現存の有名どころのプロダクト(Struts, Spring, JUnit, Tomcat, Commons Loggingなど)がどういうパターンを使っているかを学べます(必ずしもGoFのパターンとは限らないですが)。

ソースコードリーディングから学ぶ Javaの設計と実装

Spring編

Springは良い日本語書籍はありません。。

Pro Spring 3

出ましたSpring3本の決定版!1000ページ近くあり、かなりのボリュームですが、 その分、かなり網羅されています。3.1系で説明されており、3.1の機能もふまえた上で 最適な使用方法を選んでいる等、サンプルも鮮麗されています。

Blogアプリケーションを作りながら学ぶことで一通り身につけられるのではないでしょうか。

Pro Spring 3 (Professional Apress)

Pro Spring Mvc: With Web Flow

まだα版ですが、一応紹介。Spring MVCとWeb Flowにしぼって重点的に説明された本。プロジェクトが成長する中でどのようにアプリ設計すべきかまで言及しており、Spring MVCを利用する上でかなり参考になる本。3.1系。

ビルドツールにGradleを使って説明している等、自分もまだついていけてない、、

Pro Spring Mvc: With Web Flow (Professional Apress)

Pro Spring 2.5→Deprecated

Springの多くの機能が説明されており、一通り学ぶのに向いています。ただし、対応バージョンが2.5と古いので3系を使いたい場合は別の本も用意すべきです。

Pro Spring 2.5

Spring in Action→Deprecated

Spring3系の本は執筆時期によってサンプルの書き方が結構違っています。(新しい方がより設定レスです。)時にSpringMVC周り(3.0.4からちょっとよくなったりしているので)。
その中でもSpring in Actionは新しい書き方できれいです。ただし、紹介されているSpringの機能は少なめです。

Spring in Action

Spring Recipes→Deprecated

Spring3系でも紹介されている機能が多めです。ただし、一部設定の仕方が古い書き方がみられます。(JSONを返却する方法とか)

Spring Recipes

SpringによるWebアプリケーションスーパーサンプル→Deprecated

強いて日本語版をあげるならこれかな。珍しいSpring3系の日本語書籍(ただし3.0.2と若干古め)。一つのアプリケーションを通しで作る点は○。ただし、もっと簡単にかけますから!と突っ込みどころ多数なので、この本のサンプルをより簡潔な書き方で書き直して作るという読み方が勉強になると思います。間違ってもこの本に書いてあることがSpringの全てだと思わないように。

SpringによるWebアプリケーションスーパーサンプル 第2版

JavaEE編

Beginning Java EE 6 GlassFish 3で始めるエンタープライズJava

ようやく出ました、JavaEE6の和書。JavaEEの主要技術である JPA、EJB、JSF、JMS、JAX-WS、JAX-RSを一通り学べる本。 自分も翻訳・監訳に携わりました。

読み返して残念なのはやはりCDIについての説明がないこと。CDIがあればアプリケーションの書き方も変わってくるので、JavaEE6を普及していく上で、説明がないのはかなり痛いと思われます。(付録のハンズオンラボでは空気読まず使っていますが、、)

Beginning Java EE 6 GlassFish 3で始めるエンタープライズJava (Programmer’s SELECTION)

Struts編

ボクStrutsカケマセンwww

が、一応紹介Struts1系であれば以下かな

StrutsによるWebアプリケーションスーパーサンプル→Deprecated

StrutsによるWebアプリケーションスーパーサンプル 第3版

会社の都合で枯れたStruts1.2系を使い続けている場合は第2版をどうぞ。

StrutsによるWebアプリケーションスーパーサンプル第2版

Seasar編

一応あげておきます。Seasar以外にも学べる所は多いので、Seasarを本格的に使わなくても持っておく価値はあると思います。
(jstlやstrutsのタグリファレンスが地味に使えたりw)

Seasar 2 徹底入門 SAStruts/S2JDBC 対応

ライブラリ編

現場で使えるJavaライブラリ

Javaはライブラリが多い一方で機能が似たものが多かったり、開発が止まっているようなものも多かったりすてどれを選択していいのか分からないことがある。この本では今使えるものをジャンル毎に分けてサンプルコード付きで解説してくれている。何かやりたいことがあって、マッチするものを探すという使い方もできるし、パラパラっとみて今後できることのストックを増やすという使い方もできる。

(個人的にはJSONのライブラリはJacksonにしてほしかったなw)

現場で使えるJavaライブラリ

コーディング規約編

Javaルールブック ~読みやすく効率的なコードの原則

いっていることが全てうんうんとうなずける。全開発者が一冊もつべき。

Javaルールブック ~読みやすく効率的なコードの原則


思いついたら追記します。ご意見等があれば@makingまで

更新日 更新内容
2012/05/16 ・今更「StrutsによるWebアプリケーションスーパーサンプル」を追加
・「Pro Spring3」、「Pro Spring Mvc: With Web Flow」、「Beginning Java EE 6 GlassFish 3で始めるエンタープライズJava」を追加
・「Pro Spring2.5」、「Spring in Action」、「Spring Recipes」、「SpringによるWebアプリケーションスーパーサンプル」をDeprecatedに
2011/07/29 「現場で使えるJavaライブラリ」追加。

Created at : 2011-04-27 00:53:10  Updated at : 2012-05-16 02:50:33
Category :

このエントリーをはてなブックマークに追加

Spring3.1とHibernate4.1への移行

本記事は「MIGRATING TO SPRING 3.1 AND HIBERNATE 4.1」の翻訳です。

間違いの指摘は@makingまで。

Core-Spring courseの一環として、私たちは一緒に春とJPA / Hibernateを統合する方法を示すために使用するラボ·アプリケーションを持っています。 私達はちょうどSpring 3.1 / Hibernateの4.1にそれをアップグレードし、我々はいくつかのヒントを共有するべきだと考えています。

1) Mavenの依存関係

以下の設定例は、Maven(ただし、必要に応じて、用意にGradle用に変換できます)に基づいています。 POMの中で、SpringやHibernate(使用してるSpringコンポーネントに応じてより多くのSpringの依存関係を宣言する必要があります)の最新バージョンを指定する必要があります。

<dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-orm</artifactId>
     <version>3.1.1.RELEASE</version>
     <!-- will come with all needed Spring dependencies such as spring-core and spring-beans-->
</dependency>
<dependency>
     <groupId>org.hibernate</groupId>
     <artifactId>hibernate-entitymanager</artifactId>
     <version>4.1.1.Final</version>
     <!-- will come with Hibernate core-->
</dependency>
<dependency>
     <groupId>cglib</groupId>
     <artifactId>cglib</artifactId>
     <version>2.1</version>
</dependency>

CGLIBへの依存関係は、必ずしも必要ではありません。このブログエントリの最後にそのことについての詳細があります。

2) HibernateのSpring設定

Springは、Hibernateのいくつかのバージョンのサポートを提供しますので、使用しているバージョンを明示的に指定する必要があります。

Hibernate4では

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
...
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
     <property name="sessionFactory" ref="sessionFactory"/>
</bean>

Hibernate3で動作させたい場合は、代わりに次の設定をしてください。

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
...
</bean>

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
     <property name="sessionFactory" ref="sessionFactory"/>
</bean>

(パッケージのパスは、Hibernate3またはHibernate4を使用するかどうかに応じて異なります)

Hibernateを使用する場合、マッピングを記述する2つの一般的な方法があります。XMLとアノテーションです。

SpringとHibernate3の連携では2種類のSessionFactoryBeanを設定できます。 XMLマッピングのみ設定できるLocalSessionFactoryBeanと、 XMLマッピングおよび/またはアノテーションベースのマッピングを設定できるAnnotationSessionFactoryBean

Spring 3.1とHibernate 4では単純になります。LocalSessionFactoryBeanと呼ばれるSessionFactoryBeanだけがあります。 これは、アノテーションベースのマッピングおよびXMLベースのマッピングの両方で動作します。

慎重にこれらの2つの手順に従っている場合は、すでにアプリケーションは動作していることでしょう。

3)CGLIBへの依存関係は必要か?

答えは"はい"である可能性が高いです。それはSpringがhood(訳注:slang?)の下でそれを必要とすることは一般的です。いくつかの例を挙げます。

  • Javaによる設定(詳細はこちら)
  • インターフェースを実装していないSpring Beanへの、トランザクション制御、セキュリティ、キャッシングなどの機能追加(詳細はこちら)
  • @TransactionalアノテーションがJUnitテスト·ケースで使用される場合(通常は、各テストケースの終了時にデータベースのトランザクションをロールバックさせるために行います。詳細はこちら)。

など

注:CGLIBメンテナンスされていないプロジェクトです。SpringはSpring 3.2の開始とともに(その詳細については、関連するJIRAの課題を参照してください)​​、代替としてJavassistに移行している可能性があります。ですからSpring 3.2からは、CGLIBの代わりにJavassistの依存関係を追加することができるはずです。

4) Javaの設定

SpringでのJavaの設定の使用は、XMLベースとアノテーションベースの設定に対する興味深い代替手段です。 それでは、SpringとHibernateを、Javaの設定によって動作させるにはどうしたらよいでしょうか? LocalSessionFactoryBuilderと呼ばれる新しいクラスのおかげで、かなり容易になります。

@Bean
public SessionFactory sessionFactory() {
 return new LocalSessionFactoryBuilder(dataSource())
 .addAnnotatedClasses(Person.class, Account.class)
 .buildSessionFactory();
}

LocalSessionFactoryBuilderは、Hibernate自体の設定クラスのサブクラスであり、名前が示すように、Springの@Configurationがついたクラス内で使用するために便利なビルダースタイルのAPIを提供しています。

Created at : 2012-04-10 04:33:59  Updated at : 2012-04-10 04:33:59
Category :

このエントリーをはてなブックマークに追加