Get Started Faster with Forge
このガイドでは、JBoss ForgeのArquillianプラグインについて解説します。このガイドを読むと、以下のことができるようになります:
- Forge環境にArquillainプラグインをインストールする
- このプラグインを使って、MavenベースのJavaプロジェクトに、Arquillianインフラストラクチャを追加する
- コンポーネントと、対応するArquillianのテストを生成する
- 複数のコンテナで手動設定なしにArquillianテストを実行する
読者は、 Getting Started guide で説明されているたくさんの重複したステップを実行しているでしょう。それらの煩雑な作業はForgeに実行させます。このガイドは、これまでのガイドよりも、早く始められるよう、早く読めるように作成しました。
前提
このガイドは、 JBoss Forge がセットアップ済みであることが前提です。Forgeのインストールは、比較的短い手順です。ダウンロードやインストールの説明は、"Getting Started guide"や official Forge documentation を参照してください。また、 JDK 1.6 以降が必要です。
プロジェクトを作成する
Arquillianを始める前に、プロジェクトが必要です。まだ作成していなければ、以下のForgeのコマンドでJPAを含むシンプルなJava EE 6プロジェクトを作成してください。
$ new-project --named arquillian-demo --topLevelPackage demo
? Use [/Users/paul/arquillian-demo] as project directory? [Y/n]
***SUCCESS*** Created project [arquillian-demo] in new working directory [/Users/paul/arquillian-demo]
Wrote /Users/paul/arquillian-demo
Wrote /Users/paul/arquillian-demo/pom.xml
Wrote /Users/paul/arquillian-demo/src/main/java
Wrote /Users/paul/arquillian-demo/src/test/java
Wrote /Users/paul/arquillian-demo/src/main/resources
Wrote /Users/paul/arquillian-demo/src/test/resources
Wrote /Users/paul/arquillian-demo/src/main/resources/META-INF/forge.xml
新しいプロジェクトが作成されました。次に、テスト対象のコードが必要です。Forgeを使って新しいCDI beanを作成しましょう。
まず、"beans"プラグインを使って、CDIをプロジェクトにインストールします。
$ beans setup
***SUCCESS*** Installed [forge.spec.cdi] successfully. ? Do you want to install CDI APIs? [y/N]Wrote /Users/paul/arquillian-demo/src/main/resources/META-INF/beans.xml
それから、新しいbeanをつくりましょう。
$ beans new-bean --type demo.MySimpleBean --scoped DEPENDENT
Picked up type <JavaResource>: demo.MySimpleBean
Wrote /Users/paul/arquillian-demo/src/main/java/demo/MySimpleBean.java
プロジェクトはセットアップされました。テストの時間です!
スタート
すでに general getting started guide で見ているかもしれませんが、Arquillianのセットアップは簡単です。pom.xmlにArquillianで使う新しいコンテナを設定するのは、たくさんのコピー/ペースト作業です。Forgeでやれば、一つのコマンドです!
まず、Arquillianプラグインをインストールします。
$ forge install-plugin arquillian
次に、Arquillianとコンテナ設定をセットアップします。最初はJBoss AS7にしてみましょう。
$ arquillian setup --container JBOSS_AS_7_MANAGED
ForgeはどのバージョンのJUnitやArquillian、JBoss AS7を使用するか、聞いてきます。それぞれ、最新のfinalバージョンを使ってください。Forgeはもしユーザーがまだダウンロードしていなければ、JBoss AS7のダウンロードまでも行います。
これだけです!Arquillianの設定は終わりました。作成したプロジェクトのpom.xmlを確認すると、dependenciesとprofileが追加されていることが見て取れます。同じくForgeはarquillian.xmlファイルをsrc/test/resourcesに作成します
テストを書く
では、テストを書きましょう。繰り返しますが、Forgeを使えば素早くスタートできます。
$ arquillian create-test --class demo.MySimpleBean.java
Picked up type <JavaResource>: demo.MySimpleBeanTest
Wrote /Users/paul/arquillian-demo/src/test/java/demo/MySimpleBeanTest.java
デプロイメントとテストメソッドを持った新しいテストクラスが追加されました。これはCDIを使って、テスト対象クラスをインジェクトするので、このテストが本当にコンテナ内で実行されるか確認しましょう。もし、IDEでインポートできなければ、前に作成したMavenのプロファイルを有効にしてください。これでIDEや、直接Mavenで、あるいはForgeからテストを実行できます。
$ build --profile arq-jbossas-7-managed
おめでとう! ArquillianとForgeを使った最初の グリーンバー が表示されました!
ではJPAコードのテストを試してみましょう。
永続化のテスト
Java Persistence API (JPA)を使ったテストを書き始める前に、JPAの設定が必要です。それから、エンティティとシンプルなデータ・アクセス・オブジェクトを作ります。これらはテスト対象のクラスです。
$ persistence setup --provider HIBERNATE --container JBOSS_AS7
***SUCCESS*** Installed [forge.spec.jpa] successfully.
***INFO*** Setting transaction-type="JTA"
***INFO*** Using example data source [java:jboss/datasources/ExampleDS]
Warning: The encoding 'UTF-8' is not supported by the Java runtime.
? The JPA provider [HIBERNATE], also supplies extended APIs. Install these as well? [y/N] [false]
Wrote /Users/paul/arquillian-demo/pom.xml
Wrote /Users/paul/arquillian-demo/src/main/resources/META-INF/persistence.xml
では、エンティティを作成します。
$ entity --named Language --package demo.entities
Created @Entity [demo.entities.Language]
Picked up type <JavaResource>: demo.entities.Language
Wrote /Users/paul/arquillian-demo/src/main/java/demo/entities/Language.java
そして、エンティティにフィールドを追加します。
$ field string --named name
Added field to demo.entities.Language: @Column private String name;
Wrote /Users/paul/arquillian-demo/src/main/java/demo/entities/Language.java
次のファイルをあなたのプロジェクトに作成してください。
package demo.dao;import demo.entities.Language; import javax.annotation.PostConstruct; import javax.ejb.Singleton; import javax.ejb.Startup; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import java.util.List;@Singleton @Startup public class LanguageDao { @PersistenceContext EntityManager em;public List<Language> listLanguages() { return em.createQuery("select l from Language l").getResultList(); }@PostConstruct public void insertTestData() { Language java = new Language(); java.setName("Java"); em.persist(java);Language ruby = new Language(); ruby.setName("Ruby"); em.persist(ruby);Language groovy = new Language(); groovy.setName("Groovy"); em.persist(groovy); } }
さて、テストクラスを作るときです。このチュートリアルの前半を実行していれば、次のコマンドは見慣れたものでしょう。
$ arquillian create-test --class demo.dao.LanguageDao.java --enableJPA
Picked up type <JavaResource>: demo.dao.LanguageDemoTest
Wrote /Users/paul/arquillian-demo/src/test/java/demo/dao/LanguageDemoTest.java
ここでまた、新しいテストを作成し、persistence.xmlをデプロイメントに追加します。IDEでこのテストを開き、 Language エンティティをデプロイメントに追加します。
テストアサーションを記述します:
@Test
public void testListLanguages() {
Assert.assertEquals(3, languagedao.listLanguages().size());
}
おめでとう! Arquillianを使った二つ目の グリーンバー です!
別コンテナの追加
コンテナを追加するのは、セットアップコマンドをまた実行するだけで、簡単です。例えば、Glassfishを追加します。
$ arquillian setup --container GLASSFISH_3_1_REMOTE
Mavenプロファイルを変えると、コンテナが切り替わります。例えばForgeでは:
$ build test --profile glassfish-remote-3
デプロイメントパッケージのエクスポート
ファイルにエクスポートすると、デバッグにとても便利です。Forgeでは、以下のように行います。
まず、Arquillianテストに移動します:
$ cd src/test/java/demo/MySimpleBeanTest.java
デプロイメントをエクスポートします:
$ arquillian export
アーカイブはプロジェクトのtargetディレクトリにエクスポートされています。
Share the Knowledge
Find this guide useful?
There’s a lot more about Arquillian to cover. If you’re ready to learn more, check out the other available guides.
Feedback
Find a bug in the guide? Something missing? You can fix it by forking this website, making the correction and sending a pull request. If you’re just plain stuck, feel free to ask a question in the user discussion forum.
Recent Changelog
- Apr 19, 2012: Remove redundant metadata (internal change) by Dan Allen
- Apr 05, 2012: Add reference_rev prolog field for translations by Dan Allen
- Apr 05, 2012: Use description in prolog for guide summary by Dan Allen
- Feb 10, 2012: Identify authors & translators by site identity by Dan Allen
- Jan 30, 2012: Add translator field to metadata by Dan Allen
- Jan 29, 2012: Add translator as author by Takayuki Konishi
- Jan 10, 2012: Japanese translation by Takayuki Konishi










