MariaDB と サーバアプリケーションをつなげる

<< 戻る   トップ >>

データベース (MariaDB)、JPA、JAX-RS と道具は揃ってきたので、いよいよ制作に移る。まずは、記事番号1024 からタイトルを取り出してウェブページに返す、という単純極まりない JAX-RS だ。本来は JPA⇒DTO⇒JAX-RS と渡すのが正しい (したがって安全な) 作法なのだが、今回はシンプルに DTO (Data Transfer Object) あたりは省略してしまおうかと思っている。

ソースを書いてみて、GlassFish 上で走らすのだが、走るどころか配備 (Deploy) すらさせてくれない。最初のうちは原因すら不明だったのだが、データベースのアクセスコードが問題になっているということまではわかった。そこでよくよく考えてみれば、ウェブアプリケーションとデータベースが継がっているのか、という疑問につきあたる。JPA Tool が動いたので、それですべてがうまくいってるものと思ったが、そうは問屋が卸してくれていないのだ。

最初は "How to setup a JDBC connection in Glassfish" というページを見つけて設定してみた。mysql-connector-java.jar は glassfish/lib/ 直下に置いておいた方が面倒が無いようだ。しかし、それでも「GlassFish とデータベースの接続は JTA(Java Transaction API) でやらなきゃ配備できないよ」というエラーメッセージをいただいた。やはりデータベース周りが原因だったのだ。そうなれば対策は探しやすく、「GlassFish 4.1でのJNDIコネクションプーリングの設定方法」でなんとか設定を完了し、配備までは可能となったのであった。

今度は JAX-RS でエラーが発生しているのだが、これは次の課題だ。

JDBC Connction Pool の設定
ここで JTAとして設定しなくてはならない
JDBC Connection Resource の設定
JNDIにはひどい目に遭っているが、JNDI を使って指定する。
<?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="nanban_web">
		<jta-data-source>jdbc/nanban_web</jta-data-source>

JAX-RS で発生していたエラーは、データベースの EntityMananger が取得できない、というもので、取得できない原因は JAX-RS クラスが EJB じゃないからで、まさかと思ってクラスに @Stateless アノテーションをつけてみたら、ちゃんと動くようになったんだけど、これっておそらくやらない方が良いこと、仕組みが分かっている人からはとんでもないことをやっているんじゃないかなあ。


作成: 2018-09-17 18:53:20.0更新: 2018-09-17 22:59:56.0
http://museo-anonimo.jp/nanban/?id=1363,http://museo-anonimo.jp/nanban/tr/1363