IntelliJ IDEAでJavaEE6

せっかくIntelliJ IDEAを買ったので、JavaEE6開発に使ってみることにしました。
環境構築で色々と困ったところがあったので手順を記しておきます。

前提条件としてmavenでプロジェクトを作ることとしています。
これはIntelliJ以外からプロジェクトを開けないということを回避するためです。*1
また、APサーバーとしてはGlassFishを使用します。

プロジェクトの作成

Quick StartのCreate New Projectからmaven moduleを指定して下さい。

なお、続けてpom.xmlを修正することになりますが、右上に下記のようなものが出た場合にはぜひEnable Auto-Importを指定して下さい。

IntelliJが空気読んでくれます。

pom.xmlの修正

NetBeansで初期生成されるpom.xmlを流用することが一番良いことが判りました。
NetBeansを持っていない人のためにpom.xmlをgistに貼り付けておきますので、必要に応じてそちらを参照して下さい。

Maven Repository上にはJava EE 6 WAR Archetypeという名前でテンプレートがあることを [twitter:@yusuke] 氏に教えていただきましたが、そちらは使用しませんでした。
理由としてはMetamodel Generatorに対応していないように見受けられたからです。
MetaModel APIにアクセスするためにはMetaModel Generatorを起動する必要があります。

pom.xmlのdependencysに以下を追加して下さい。*2

        <dependency>
            <groupId>org.eclipse.persistence</groupId>
            <artifactId>org.eclipse.persistence.jpa.modelgen.processor</artifactId>
            <version>2.3.2</version>
            <scope>provided</scope>
        </dependency>

これだけだとビルド時にファイルが見つからないと怒られてしまうため、repositoriesに以下を追加して下さい。

        <repository>
            <url>http://download.eclipse.org/rt/eclipselink/maven.repo/</url>
            <id>eclipselink</id>
            <layout>default</layout>
            <name>Repository for library EclipseLink (JPA 2.0)</name>
        </repository>

JPA2.0でMetaModel APIが標準化されたものの、MetaModel Generatorに関しては標準化されませんでした。
今回、GlassFishではEclipseLinkが採用されているため、EclipseLink用の設定を追加する必要があります。

他にもEclipseLink用の設定が追加されていますが、JPA2.0単体だと明らかに機能が足りないためです。
どこかでEclipseLinkのアノテーションを直接使う必要が出てくるため、先に使えるようにしておきます。*3

mvnの実行に成功すると./target/generated-sources/annotations配下に${Entity名}_.javaというファイルができます。*4

IntelliJ IDEAでは何も設定しなくてもこちらがソースコードとして認識されるようです。*5

動かない場合は、persistence.xmlが無い事が考えられます。
以下フォルダにpersistence.xmlが入っていることを確認して下さい。

MetaModel APIについて

JavaEE6のJPA2.0からMetaModel APIという機能ができました。
Javaプログラミング言語上で動的にSQLを組み立てる機能です。
詳細は以下を参照して下さい。

MetaModel Generatorの設定について

今回はGlassFishがEclipseLink2.3.2を使用しているため、この記事を書いている時点(2013年1月)での最新版2.4.0は使用していません。
GlassFishに使用しているライブラリのバージョンは以下を参照して下さい。

GlassFishで使用しているライブラリのバージョンアップについては以下を参照して下さい。

また、IntelliJではmavenを使用しなくてもMetaModel Generatorを起動することができます。以下を参照して下さい。*6

GlassFishの登録

GlassFishの場所をIntelliJ IDEAに教えてあげます。
Preferences(Settings)からApplication Serversを選択します。
あとは+を押してGlassfish Serverを選択してあげるだけです。

しかしながら、Librariesにはデフォルトでは不十分なjarしか登録されません。
mavenを使用する場合はpom.xmlで指定するので問題無いですが、IDEA固有のプロジェクトを作る場合は必要に応じてGlassFishが提供してくれるライブラリを追加して下さい。

プロジェクトからのGlassFishの利用

IntelliJのプロジェクトを右クリックするとFramework support...という表記が出てきますので、そちらから先ほど登録したGlassFishを選択します。

※なお、それ以外の項目はmavenには対応していないようですので、使用しないで下さい。

起動

一番上にGlassFishの起動ボタンが出来ているのでそちらを使用して下さい。
プロジェクトができていればデプロイもされるはずです。

これでやっと初期設定が終了しました。
やっとJavaEE6の開発が始められます。

JSFJAX-WSJAX-RSの利用まで

[twitter:@btnrouge]さんの以下の記事を参照して下さい。

まとめ

いろいろ書いたけれども、テンプレートの作成までNetBeansでやってからIntelliJにもってくるというのが一番楽かもしれない。:-p

最後に

IntelliJ初心者を助けていただいた[twitter:@masanobuimai]さん、[twitter:@yusuke]さん、[twitter:@_siosio_]さんありがとうございました。

*1:なので、IntelliJでの記載よりもmavenについての記載が多くなっております。

*2:gistの例にはすでに記述されています。

*3:JPA2.1になるとマシになるのですが。

*4:もちろんEntityクラスを作成していることが前提です。

*5:空気読んでくれたと思いました。

*6:NetBeansではそもそも設定自体不要です。