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 で、テーブルが作成されたことを確認。
よしよし。想定通り想定通り。