Java EE 7 検証環境構築(3) JPAからMySQLに接続するユニットテストをArquillianで実行
- Java EE 7 検証環境構築(1) WildFly + JBoss Tools で EARプロジェクトを作成し Arquillian で ユニットテストをグリーンにするところまで
- Java EE 7 検証環境構築(2) WildFly に DataSourceを作成
- Java EE 7 検証環境構築(3) JPAからMySQLに接続するユニットテストをArquillianで実行
- Java EE 7 検証環境構築(4) Java EE での DI(Dependency Injection) および CDI(Contexts and Dependency Injection)をながめる
- Java EE 7 検証環境構築(5) JBoss Toolsが生成したサンプルソースのCDIを確認する
- Java EE 7 検証環境構築(6) JPA エンティティの作成と挿入
- Java EE 7 検証環境構築(7) JPA 問い合わせ(1) 名前付きクエリを使ってみる。テストでトランザクションも意識する
- Java EE 7 検証環境構築(8) JPA 問い合わせ(2) 動的クエリとCriteria API を試す
- Java EE 7 検証環境構築(9) jBatch 概要をおさえる
- Java EE 7 検証環境構築(10) JBoss Tools で作成した EARプロジェクトをJava EE 6 から 7 に変更する
- Java EE 7 検証環境構築(11) jBatch用 プロジェクトの作成を行う
- Java EE 7 検証環境構築(12) jBatch 簡易サンプル作成と Arquillian でユニットテスト
- Java EE 7 検証環境構築(13) jBatch REST サービス経由で実行する
- Java EE 7 検証環境構築(14) WildFly の管理をGUIで行う
- Java EE 7 検証環境構築(15) WildFly を サービスとして設定する(Windows/Linux)
- Java EE 7 検証環境構築(16) WildFly と Apache を mod_jk で連携させる(Widows)
ようやく、外堀が埋まってきた。
Java EE 7 の検証環境と言っているのは、EARに、JAX-RS と EJB と JSFをまとめたものをイメージしていたので、JBoss Tools の EAR プロジェクトでどんびしゃ。
Arquilian を使って、ユニットテストが緑になることを確認し、データソースもWildFlyに作成できたので、それを利用して、JPAのユニットテスト(もともと組み込まれているものだが)を成功させたい。
1.ユニットテストをWildFlyにデータソースを構成したMySQLにつなぐ
1.1 テスト用 persistence.xml の修正
まず、/src/test/resource/META-INF/test-persistence.xml を修正する。
(以下の1.以外は、Hibernate の動作確認)
- jta-data-source を作成した DataSource の JNDI名に合わせる
- hibernate.hbm2ddl.auto の値を create-drop から create にする(テスト後テーブル等削除されないように)
- hibernate.show_sql の値を false から true にし、SQLステートメントをコンソールに出力させる
Hibernate の設定値については、以下を参照
http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html
- <?xml version="1.0" encoding="UTF-8"?>
- <persistence version="2.0"
- xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="
- http://java.sun.com/xml/ns/persistence
- http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
- <persistence-unit name="primary">
- <jta-data-source>java:jboss/datasources/TallaricoDS</jta-data-source>
- <properties>
- <!-- Properties for Hibernate -->
- <property name="hibernate.hbm2ddl.auto" value="create" />
- <property name="hibernate.show_sql" value="true" />
- </properties>
- </persistence-unit>
- </persistence>
1.2 テストクラスの修正
MemberRegistrationTest クラスを開いて、@Deploymentが付与されているメソッドを編集する。
@Deployment が付与されたメソッドは、Arquillianが、テスト用のアーカイブ(JAR、WAR)を作成するために、テスト実施前に呼び出される。
初期状態では、/src/test/resource/test-ds.xml に記述されているデータソースが、テスト実行時に、META-INF配下におかれ、記述されているJNDI名で登録され、そのJNDI名を、persistence.xml から参照するというテストの流れになっている。persistence.xml のデータソース名に、WildFlyに登録したデータソースJNDIを指定し、そちらを利用するため、以下を修正する。
// Deploy our test datasource の次の行、.addAsWebInfResource 行をコメントアウトする。
この行でテスト用のデータソースが test-ds.xmlから、読み込まれる、test-ds.xml にはH2データベース接続のデータソースの設定があり、JNDI名がコンテナに登録されるようになっている。
しなしながら、WildFly にデータソースを構成し、そちらをつかうため、不要。
- @Deployment
- public static Archive<?> createTestArchive() {
- return ShrinkWrap.create(WebArchive.class, "test.war")
- .addClasses(Member.class, MemberRegistration.class, Resources.class)
- .addAsResource("META-INF/test-persistence.xml", "META-INF/persistence.xml")
- .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml")
- // Deploy our test datasource
- //.addAsWebInfResource("test-ds.xml", "test-ds.xml")
- ;
- }
2.ユニットテスト実行
成功!managed と remote いずれでも成功することを確認
3.MySQLを確認
MySQL Workbench で、テーブルが作成されたことを確認。
よしよし。想定通り想定通り。