Java EE 7 検証環境構築(3) JPAからMySQLに接続するユニットテストをArquillianで実行

  1. Java EE 7 検証環境構築(1) WildFly + JBoss Tools で EARプロジェクトを作成し Arquillian で ユニットテストをグリーンにするところまで
  2. Java EE 7 検証環境構築(2) WildFly に DataSourceを作成
  3. Java EE 7 検証環境構築(3) JPAからMySQLに接続するユニットテストをArquillianで実行
  4. Java EE 7 検証環境構築(4) Java EE での DI(Dependency Injection) および CDI(Contexts and Dependency Injection)をながめる
  5. Java EE 7 検証環境構築(5) JBoss Toolsが生成したサンプルソースのCDIを確認する
  6. Java EE 7 検証環境構築(6) JPA エンティティの作成と挿入
  7. Java EE 7 検証環境構築(7) JPA 問い合わせ(1) 名前付きクエリを使ってみる。テストでトランザクションも意識する
  8. Java EE 7 検証環境構築(8) JPA 問い合わせ(2) 動的クエリとCriteria API を試す
  9. Java EE 7 検証環境構築(9) jBatch 概要をおさえる
  10. Java EE 7 検証環境構築(10) JBoss Tools で作成した EARプロジェクトをJava EE 6 から 7 に変更する
  11. Java EE 7 検証環境構築(11) jBatch用 プロジェクトの作成を行う
  12. Java EE 7 検証環境構築(12) jBatch 簡易サンプル作成と Arquillian でユニットテスト
  13. Java EE 7 検証環境構築(13) jBatch REST サービス経由で実行する
  14. Java EE 7 検証環境構築(14) WildFly の管理をGUIで行う
  15. Java EE 7 検証環境構築(15) WildFly を サービスとして設定する(Windows/Linux)
  16. 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 の動作確認)

  1. jta-data-source を作成した DataSource の JNDI名に合わせる
  2. hibernate.hbm2ddl.auto の値を create-drop から create にする(テスト後テーブル等削除されないように)
  3. 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 いずれでも成功することを確認

datasource_unit_test_success01

3.MySQLを確認

MySQL Workbench で、テーブルが作成されたことを確認。

jpa_create_scheme01

よしよし。想定通り想定通り。

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です