JavaEE(JSF・CDI・JPA)の開発においてGlassFishを使っていますが、APPサーバーの起動にとっても時間がかかること、IDEがEclipseのためか起動に失敗することも多々あり正直JavaEE(JSF・CDI・JPA)開発にうんざりしています。
なんとかならないものかと考えてTomcatベースでJavaEE(JSF・CDI・JPA)が開発できないか挑戦しています。
途中経過含めて以下に記しておきます。
開発環境
- Eclipse4.5 or 4.6(Tomcat8系が利用できればなんでもOKです)
- JDKは1.8系
- Tomcatは8系(今回は8.0.42を利用しています)
- Tomcatの起動はWTP3.1
- JavaEE7(GlassFishでいうと4.1系をベースとします。JSF2.2・CDI1.2・JPA2.1)
- JSF:mojarra
- CDI:weld
- JPA:Eclipse Link
- ライブラリはMavenで取得
プロジェクトの作成からライブラリの取得
こちらを参考にプロジェクトを作成
上記設定後pom.xmlができるので以下を追記します。
<dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>7.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.faces</groupId> <artifactId>javax.faces-api</artifactId> <version>2.2</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.glassfish</groupId> <artifactId>javax.faces</artifactId> <version>2.2.8-02</version> <scope>runtime</scope> </dependency> <dependency> <groupId>javax.enterprise</groupId> <artifactId>cdi-api</artifactId> <version>1.2</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.jboss.weld.servlet</groupId> <artifactId>weld-servlet</artifactId> <version>2.2.6.Final</version> <scope>runtime</scope> </dependency>
※現時点ではまだJPAまでの動作確認はできていません。JSF・CDIまでとなります。
設定
GlassFishを直接利用するときはわざわざ設定しなくてもよいものもあるようですが、Eclipse×Tomcatで環境を作る場合は以下の設定が必要になります。
beans.xmlの作成
web.xmlと同じディレクトリにbeans.xmlを作成します。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd" bean-discovery-mode="annotated" > </beans>
web.xmlの修正
以下の設定を追加します。
<resource-env-ref> <resource-env-ref-name>BeanManager</resource-env-ref-name> <resource-env-ref-type>javax.enterprise.inject.spi.BeanManager</resource-env-ref-type> </resource-env-ref> <context-param> <param-name>javax.faces.PROJECT_STAGE</param-name> <param-value>Development</param-value> </context-param>
context.xmlの修正
WTPでTomcatの設定を実施するとプロジェクトの一覧に「Servers」というフォルダができます。その中にcontext.xmlというファイルがありますので、このファイルを修正します。
以下の設定を追記してください。
<Resource name="BeanManager" auth="Container" type="javax.enterprise.inject.spi.BeanManager" factory="org.jboss.weld.resources.ManagerObjectFactory" />
以上で設定は完了です。GlassFishを利用していた時と同じようにコーディングし動作確認してみてください。
終わりに
今回はまずはJSF・CDIが動作するところまでを確認しました。しかし、まだJPAを含めた確認ができていなことと、JavaEEにはもっとたくさんの機能があります。
また、基本的なプログラムしか動作確認できていないのでGlassFishと完璧に同じ動作なのかは保証できません。ご了承ください。
今後も、GlassFishでできることと同等のことをするために何が必要かは少しずつ調査して追記していきたいと思います。
ぜひ、皆様からの情報提供もお待ちしております。