開発時と稼働時の接続情報は異なる#

Java EE 7 の実装であるJBoss ToolsとWildFlyで開発する時の注意としては次です。
  1. 開発時に使うDB接続は「Database Connections」で設定する。
  2. 稼働時の接続方法は2通りある。以下のうち1を推奨。
    1. アプリケーションサーバー上(WildFlyのこと、以下APサーバー)で設定する。(WildFly上のデータソースとpersistence.xmlでの設定)
    2. アプリケーション個別で設定する(warファイルに含める)。(persistence.xmlとwebアプリケーション-ds.xmlでの設定)
共通した設定もこれ以前にあります。

共通する設定#

MySQLのJDBCドライバをダウンロードする#

APサーバー上に定義したデータソース経由でRDBに接続する場合 (推奨)#

  1. 5.1系の最新をダウンロードする。2016年4月時点では5.1.38。
    https://dev.mysql.com/downloads/connector/j/
  2. ダウンロードしたファイルを展開する。
  3. mysql-connector-java-5.1.38.jarファイルをeclipseフォルダの横並びに配置する。(配下ではなく)
    例えば、mysqljdbc\mysql-connector-java-5.1.38.jar
  4. APサーバー(WildFly)にjarファイルをデプロイする。(手順は後述)

アプリケーション(warファイル内)で定義した設定でRDBに接続する場合#

この方法の場合にはJDBCのjarファイルがAPサーバー上に毎回デプロイされます。APサーバー(WildFly)上のデータソース経由で接続したい場合にこの設定は不要です。
  1. プロジェクトのpom.xmlをエディタで開き、DependenciesタブでAddボタンを押す
  2. 次のように入力する。
    Artifact Idは mysql-connector-java。Versionにはその時点での最新を記述する。
  3. pom.xmlファイルを保存する
  4. 以下のフォルダ配下にjarファイルが出来ていればOK。
    *あなたのユーザーフォルダ\.m2\repository\mysql\mysql-connector-java
もしもファイルが出来ていない場合はpom.xmlの設定を見直した上で以下を実行する。
  1. Project Explorerでプロジェクトを選択して右ボタンクリック。
  2. Maven → Update Project を実行する。

開発時のDB接続設定#

Database ConnectionsにMySQLサーバーへの接続情報を設定する#

  1. Window→Perspective → Open Perspective → Other を開く
  2. JPAを選択する

  1. 開いた中のData Source Explorerをクリック
  2. Database Connectionsを右ボタンクリック
  3. Newをクリック

  1. Connection Profile TypeからMySQLを選択する
  2. Nextボタンを押す。

  1. Drivers選択リストの右にある「+」アイコンを押す。
  2. Name/Typeタブにて5.1(またはさらに新しいもの)をクリックする。
  3. 表示された画面のDriver nameに「MySQL JDBC Driver5.1.38」と記入する。バージョン番号は適宜換える。
  4. JAR Listタブを押す。
  5. Driver Filesに表示されている「mysql-connector-java-5.1.0-bin.jar」を削除する。
  6. Add JAR/ZIP ボタンを押す。
  7. 表示されたファイルオープンダイアログにてダウンロードしておいたmysql-connector-java-5.1.38.jarを選択する。
  1. OKボタンを押す。

  1. 上記画面のそれぞれで接続情報を入力する。
  2. Test Connectionボタンを押して「Ping Succeeded!」と表示されれば成功。エラーが表示された場合はDBが起動されているか、接続情報を誤っていないか確認する。
  3. Finishボタンを押す。
  4. 下記画面が表示されれば完了。

Javax.transaction APIをMavenに記述する#

いや~、これはハマりました。どハマリです。この設定が必要だと判るのに1週間掛かりました!
この設定をしないと、CDI管理でのpersist()が出来ません。実行時に"Transaction is required to perform ・・・" というエラーが出て、ずっと原因が判りませんでした。
CDI管理においては"@Transactional"アノテーションによるトランザクション指定が必要なことを理解してなかった事から来る大きな勘違いもありました。なまじSELECTは正しく動くので余計混乱して時間ロスが。
  1. CDI管理下のテーブル更新では@Transactionalアノテーションが必要。
  2. @Transactionalアノテーションをビルドするためには、Jboss Toolsに入っていないJavax.transaction APIの取得が必要。
ということを皆さんは忘れないよう注意して下さい。以下手順です。
  1. pom.xml の<dependencies>配下に以下を追加する。
    <dependency>
        <groupId>javax.transaction</groupId>
        <artifactId>javax.transaction-api</artifactId>
        <version>1.2</version>
    </dependency>
だけです。 でも、Jboss Toolsにこれが入っていないのってなぜ???

jboss-web.xmlにエンコーディングを記述する#

これもプチはまりでした。
SELECTする時の検索条件に日本語を書くと初回サブミット時だけ文字化けしたり、更新時の値として書くと毎回文字化けしたりと色々現象が出ましたがこれで解決しました。
  1. WEB-INF 直下に以下の内容の jboss-web.xml ファイルを配置する。
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
	<default-encoding>UTF-8</default-encoding>
</jboss-web>
当然の事ですが、エンコーディングの値(上記ではUTF-8)は各環境に合わせて換えて下さい。
また、このXMLファイルのネームスペースやスキーマロケーション(SchemaLocation)などの定義を書くとEclipse上でエラーが表示されます。エラーの内容を見ると、スキーマ定義ファイル(XSD)自体に誤りがあると怒っていますが、書かなくても動くので上記の通りでいいと思います。(整形式XML文書として使う)
参考 https://github.com/jboss/metadata/blob/master/web/src/main/resources/schema/jboss-web_8_0.xsd

稼働時のDB接続設定#

稼働時のDB接続設定は2通りあります。

アプリケーションサーバーの設定によってDBに接続する (推奨)#

アプリケーションサーバー(WildFly 9.0.2.Final)上に定義されているデータソースを基にDBに接続する方法です。WildFly 10.0.0.Final でも同じです。WildFly 9.0.1.Final では画面構成が少し異なりますが基本的な手順は同じです。
この方法の場合、接続先リソースを持つファイル(persistence.xml)をどの環境でも同じにしておいて、 アプリケーションサーバー側の設定によって検証DBサーバーや本番DBサーバーなどの接続先を決めることが出来ます。

JDBCドライバのデプロイ#

  1. EclipseのServers窓にてWildFlyを起動する。
  2. ブラウザにて http://localhost:9990/console/ にアクセスする。
  3. JBoss Toolsのインストールと設定にて設定したユーザー/パスワードでログインする。
  4. 以下の画面が表示される。
  1. 上記画面左上のDeploymentsをクリックする。

  1. Addボタンを押し、表示された画面で "Upload a new deployment" を選択し、"Next"ボタンを押す。

  1. "ファイルを選択" ボタンを押す。
  2. ダウンロードしておいたjarファイルを選択する(この例ではmysql-connector-java-5.1.38.jar)。
  3. Nextボタンを押す。

  1. Finishボタンを押す。
  2. 次の画面が表示されれば完了。

データソースを定義する#

  1. Configurationタブ → Subsystems → Datasources → Non-XA → Addボタンを押す。

  1. MySQL Datasourceを選択して"Next"ボタンを押す。

  1. "Name"に自分が付けたい名前を入力する。
  2. "JNDI Name"にデータソース名を入力する。「java:jboss/datasources/自分が付けたい名前」
    ★このデータソース名をpersistence.xmlに後で記述する。
  3. Nextボタンを押す。

  1. Detected Driverをクリックする。
  2. 先ほどデプロイしたバージョンのJDBCドライバーのうち、mysql-connector-java-5.1.38.jar_com.mysql.jdbc.Driver_5_1 の方を選ぶ(Fabricでない方)。
  3. Nextボタンを押す。

  1. "Connection URL"に jdbc:mysql://localhost:3306/DB名 を入力する。
  2. 該当DBに接続可能なMySQLのユーザー名とパスワードを"Username"と"Password"に入力する。
  3. Test Connectionボタンを押す。
  4. "Successfully created JDBC connection."と表示されたら成功。
  5. OKボタンを押す。

persistence.xmlにMySQLサーバーへの接続情報を設定する#

APサーバー上に定義したデータソース経由でRDBに接続する場合 (推奨)#

この方法の場合は persistence.xml のみ定義します。
src/main/resources/META-INF/persistence.xmlをエディタで開き、Sourceタグに次のように設定します。
<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="primary">
		<!-- If you are running in a production environment, add a managed 
         data source, this example data source is just for development and testing! -->
		<!-- The datasource is deployed as WEB-INF/jboss-javaee-webapp-ds.xml, you
         can find it in the source at src/main/webapp/WEB-INF/jboss-javaee-webapp-ds.xml -->
		<jta-data-source>java:jboss/datasources/jboss-javaee-webappDS</jta-data-source>
		<properties>
			<!-- Properties for Hibernate -->
			<property name="hibernate.hbm2ddl.auto" value="validate" />
			<property name="hibernate.show_sql" value="true" />
			<!-- added by ytp -->
			<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
		</properties>
	</persistence-unit>
</persistence>
NameValue説明
persistence-unit nameprimary任意の接続名。ここで定義した名前を@PersistenceContextアノテーションのunitName属性に記述する
jta-data-sourcejava:jboss/datasources/任意の名前WildFlyに定義したデータソース名。ここで定義したのと同じ文字列でWildFlyにも登録しておくこと。
hibernate.hbm2ddl.autonone実行時にテーブルなどの作成を行うかどうか。規定値はcreate-drop。
hibernate.show_sqltrueHibernateのログにSQLを出力する。規定値はfalse。
hibernate.format_sqlfalseHibernateのログに出力するSQLを整形する。
hibernate.dialectorg.hibernate.dialect.MySQLDialectSQLの方言を指定する。この場合はMySQL。

persistence.xmlのより詳しい内容はここが参考になります。 Hibernateを使ったシンプルなJPA環境構築

アプリケーション個別で設定する(warファイルに含める)場合#

この方法の場合は、上記の persistence.xml とアプリケーション用データソース定義ファイル(-ds.xml)に設定します。
webapp/WEB-INF/アプリケーション名-ds.xmlをエディタで開き、下記のように設定します。
<datasources xmlns="http://www.jboss.org/ironjacamar/schema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.jboss.org/ironjacamar/schema http://docs.jboss.org/ironjacamar/schema/datasources_1_0.xsd">
    <!-- The datasource is bound into JNDI at this location. We reference 
        this in META-INF/persistence.xml -->
    <datasource jndi-name="java:jboss/datasources/jboss-javaee-webappDS"
        pool-name="jboss-javaee-webapp" enabled="true"
        use-java-context="true">
        <!-- these are defined on the wildfly datasource -->
        <connection-url>jdbc:mysql://localhost:3306/test</connection-url>
        <driver>jboss-javaee-webapp.war_com.mysql.jdbc.Driver_5_1</driver>
        <driver-class>com.mysql.jdbc.Driver</driver-class>
        <security>
            <user-name>testadmin</user-name>
            <password>pass</password>
        </security>
    </datasource>
</datasources>
NameValue説明
jndi-namejava:jboss/datasources/任意の名前persistence.xmlで定義したデータソース名。この名前で紐付けられます。
connection-urljdbc:mysql://localhost:3306/testポート番号の後ろはSchema(DATABASE)名を書く。
driverjboss-javaee-webapp.war_com.mysql.jdbc.Driver_5_1ドライバーバージョンが5.1の場合が左記。
driver-classcom.mysql.jdbc.Driverドライバークラス。jarファイルの中の META-INF/services/java.sql.Driverファイルの中に記述されている。
user-nametestuserスキーマに接続するユーザー。
passwordpassユーザーのパスワード。
■注意
この-ds.xmlファイルを使った設定は将来使えなくなる可能性があります。
このファイルの設定方法を確認しながらWildFlyを起動している最中に、-ds.xml will be deprecated というメッセージが表示されたことがありました。(設定の誤りによってあるエラーが発生した時だけ表示された)

添付ファイルの追加

ログイン済のユーザのみが添付ファイルをアップロード出来ます。

添付ファイル一覧

Kind Attachment Name Size Version Date Modified Author Change note
png
connection-profile.png 66.5 kB 2 13-1-2016 15:38 ytp
png
database-connections-fin.png 137.2 kB 2 14-1-2016 00:07 ytp
png
database-connections.png 124.6 kB 1 13-1-2016 23:56 ytp
png
deployments1.png 111.9 kB 1 19-4-2016 17:04 ytp
png
deployments2.png 133.8 kB 1 19-4-2016 22:08 ytp
png
deployments3.png 134.1 kB 1 19-4-2016 22:08 ytp
png
deployments4.png 105.0 kB 1 19-4-2016 22:08 ytp
png
driver-definition.png 101.4 kB 3 13-1-2016 16:10 ytp
png
driver-jar-list.png 42.8 kB 1 13-1-2016 16:14 ytp
png
driver-properties.png 64.6 kB 2 13-1-2016 16:45 ytp
png
mysql-dependency.png 38.7 kB 1 11-1-2016 23:32 ytp
png
persistence-properties.png 136.8 kB 3 14-1-2016 00:36 ytp
png
wildfly-console.png 74.4 kB 1 19-4-2016 15:31 ytp
png
wildfly-ds1.png 111.7 kB 1 20-4-2016 01:31 ytp
png
wildfly-ds2.png 153.3 kB 1 20-4-2016 00:38 ytp
png
wildfly-ds3.png 150.9 kB 1 20-4-2016 00:13 ytp
png
wildfly-ds4.png 160.7 kB 1 20-4-2016 00:13 ytp
png
wildfly-ds5.png 170.1 kB 1 20-4-2016 00:14 ytp
« This page (revision-421) was last changed on 26-8-2016 23:38 by ytp