LoginSignup
1
1

More than 5 years have passed since last update.

RESTEasyとJPAとAngularJSを使ってWebアプリを作ってみる10(JTAに切り替える)

Posted at

RESTEasyとJPAとAngularJSを使ってWebアプリを作ってみる3(persistance.xmlの設定) でローカルリソースで設定していたものをJTAに切り替えたいと思います。

準備

wildfly が使用するモジュールに jdbc の jar を配置します。

MySQL

  • wildfly(E:\develop\pleiades\wildfly\wildfly-9.0.2.Final)配下の modules\system\layers\base\com に mysql\jdbc\main ディレクトリを作成します。
  • Maven のローカルリポジトリ(E:\develop\maven_repo)から mysql\mysql-connector-java\5.1.24 にある mysql-connector-java-5.1.24.jar を上記のディレクトリにコピーします。
  • com\mysql\jdbc\main に module.xml ファイルを作成し、内容は以下のように記述します。
module.xml
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="com.mysql.jdbc">    
    <resources>
        <resource-root path="mysql-connector-java-5.1.24.jar"/>
    </resources>

    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
    </dependencies>
</module>

Log4jdbc

  • wildfly(E:\develop\pleiades\wildfly\wildfly-9.0.2.Final)配下の modules\system\layers\base\net に sf\log4jdbc\main ディレクトリを作成します。
  • Maven のローカルリポジトリ(E:\develop\maven_repo)から org\bgee\log4jdbc-log4j2\log4jdbc-log4j2-jdbc4.1\1.16 にある log4jdbc-log4j2-jdbc4.1-1.16.jar を上記のディレクトリにコピーします。
  • net\sf\log4jbdc\main に module.xml ファイルを作成し、内容は以下のように記述します。
module.xml
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="net.sf.log4jdbc">    
    <resources>
        <resource-root path="log4jdbc-log4j2-jdbc4.1-1.16.jar"/>
    </resources>

    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
        <module name="org.slf4j"/>
        <module name="com.mysql.jdbc" optional="true"/>
    </dependencies>
</module>

standalone.xml の編集

データソースを追記します。

standalone.xml
                <datasource jndi-name="java:jboss/datasources/HomeworkDS" pool-name="HomeworkDS" enabled="true" use-java-context="true">
                    <connection-url>jdbc:log4jdbc:mysql://localhost:3306/homework</connection-url>
                    <driver>log4jdbc</driver>
                    <security>
                        <user-name>db_user</user-name>
                        <password>db_pass</password>
                    </security>
                </datasource>
                <drivers>
                    <driver name="log4jdbc" module="net.sf.log4jdbc">
                        <driver-class>net.sf.log4jdbc.sql.jdbcapi.DriverSpy</driver-class>
                        <xa-datasource-class>net.sf.log4jdbc.sql.jdbcapi.DataSourceSpy</xa-datasource-class>
                    </driver>
                </drivers>

jndi-name を java:jboss/datasources/HomeworkDS にして、データソースを追加しました。

persistance.xml の編集

transaction-type を JTA に変更し、データソースを指定します。

persistance.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    <persistence-unit name="homework" transaction-type="JTA">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <jta-data-source>java:jboss/datasources/HomeworkDS</jta-data-source>
        <mapping-file>homework.xml</mapping-file>
        <class>homework.entity.Answer</class>
        <class>homework.entity.History</class>
        <class>homework.entity.Question</class>
        <class>homework.entity.Subject</class>
        <class>homework.entity.User</class>
        <properties>
            <property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
        </properties>
    </persistence-unit>
    <persistence-unit name="homework_ut" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <mapping-file>homework.xml</mapping-file>
        <class>homework.entity.Answer</class>
        <class>homework.entity.History</class>
        <class>homework.entity.Question</class>
        <class>homework.entity.Subject</class>
        <class>homework.entity.User</class>
        <properties>
            <property name="javax.persistence.jdbc.url" value="jdbc:log4jdbc:mysql://localhost:3306/homework_ut"/>
            <property name="javax.persistence.jdbc.user" value="db_user"/>
            <property name="javax.persistence.jdbc.password" value="db_pass"/>
            <property name="javax.persistence.jdbc.driver" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy"/>
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.format_sql" value="true"/>
        </properties>
    </persistence-unit>
</persistence>

エンティティマネジャーをDIする

サービスの親クラスに @Staleless アノテーションをつけて、サービスクラスをコンテナ管理にします。
インスタンス変数の entityManager に @PersistenceContext アノテーションをつけると DI されるようになります。

BaseService.java
@Stateless
public class BaseService {

    @PersistenceContext(unitName = EMProducer.DEFAULT_UNIT_NAME)
    private EntityManager entityManager;

    public BaseService() {
        super();
    }

    /**
     * 単体テスト用コンストラクタ。
     * @param entityManager エンティティマネジャー
     */
    public BaseService(EntityManager entityManager) {
        super();
        this.entityManager = entityManager;
    }

ソースコード

とりあえず、一通り実装したものは GitHub に上げておきました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1