WildFly Swarmを試すのも今日で3回目です。 だんだんと実装方法に慣れてきました。 この辺で当初の目的であったWildFly SwarmでEJBを使ってみたいと思います。 EJBが使えないのならSpring Bootで全然構わないわけで、 EJBが使えるかどうかはとても大事なところです。

EJBを組み込む

EJBのモジュールを組み込みます。 よくよく考えてみると、EJBだけでは動きを確認するのが大変なので、 リクエストの受け口だけはJAXRSで作ります。 なので、JAXRSのモジュールも合わせて組み込みます。

また、JAXRSのリソースから@InjectでEJBをDIするにはWeldも必要です。 そのため、JAXRSのモジュールはwildfly-swarm-jaxrs-weldを利用することにします。

<dependencies>
    <dependency>
        <groupId>org.wildfly.swarm</groupId>
        <artifactId>wildfly-swarm-jaxrs-weld</artifactId>
        <version>1.0.0.Alpha5</version>
    </dependency>
    <dependency>
        <groupId>org.wildfly.swarm</groupId>
        <artifactId>wildfly-swarm-ejb</artifactId>
        <version>1.0.0.Alpha5</version>
    </dependency>
</dependencies>

EJBを使ったアプリケーションを作る

まずはEJBです。

package org.katsumi.ejb;

import javax.ejb.Stateless;

@Stateless
public class HelloEjb
{
    public String say()
    {
        return "Hello!";
    }
}

EJBを呼び出すRESTリソースです。

package org.katsumi.ejb;

import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;

@Path("/hello")
public class HelloResource
{
    @Inject
    private HelloEjb helloEjb;

    @GET
    public String hello()
    {
        return helloEjb.say();
    }
}
package org.katsumi.ejb;

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("/rest")
public class MyApplication extends Application
{
}

実行する

今回はMainクラスを作るのではなく、Warファイルを生成し、 それを実行する形にします。 まずpom.xmlのpackagingをwarにします。

<packaging>war</packaging>

さらにwarファイルを生成するので下記のプラグインをpom.xmlに追加します。

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.6</version>
        <configuration>
            <failOnMissingWebXml>false</failOnMissingWebXml>
        </configuration>
    </plugin>
    <plugin>
        <groupId>org.wildfly.swarm</groupId>
        <artifactId>wildfly-swarm-plugin</artifactId>
        <version>${version.wildfly-swarm}</version>
    </plugin>
</plugins>

準備ができたので下記のコマンドで実行します。

mvn wildfly-swarm:run

まとめ

WildFLy SwarmでEJBも問題なく呼び出せることがわかりました。 あとはJPAを使うことができれば、システム開発で使う一通りの機能が使えること確認できそうです。