前回、WASCE を Eclipse+WTP から動かしてみた。今度は、この環境で Java EE 5 の簡単な疎通確認をやろうと思う。
確認したいのは ブラウザ→ Servlet→ SessionBean→ JPA→ MySQL という連携だけど、まずは Servlet まで通し、続いて SessionBean、最後に JPA+MySQL という段取りで、疎通してみる。
■ Servlet まで疎通
◆ hello-ear プロジェクト作成
適当に新規 Enterprise Application Project を作る。以下、入力例。
target runtime | IBM WASCE v2.1 |
EAR version | 5.0 |
Configuration | Default Configuration ・・・ |
Group Id | net.yasuabe.studies.wasce |
Artifact Id | hello-ear |
Artifact Type | ear |
◆ hello-war プロジェクト作成適当に新規 Dynamic Web Project を作る。以下、入力例。
target runtime | IBM WASCE v2.1 |
Dynamic Web Module version | 2.5 |
Configuration | Default Configuration ・・・ |
Add project to EAR | check |
EAR project name | hello-ear |
Group Id | net.yasuabe.studies.wasce |
Artifact Id | hello-ear |
Artifact Type | war |
◆ hello-ear に プロジェクト依存を追加
プロジェクトの Properties を開いて、"Java EE Module Dependencies" で hello-war にチェック
◆hello-war
HTTP/GET を受け取って、文字列 "Hello, Servlet!" を返すサーブレットを作る。
- [New]/[Other...]/[Servlet] を実行し、net.yasuabe.studies.wasce.war.HelloServlet.java を作成。
- 以下のようにコードを書き換える
public class HelloServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(
HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.getWriter().write("Hello, Servlet!");
}
}
◆ 確認
・Servers ビューで hello-ear を WASCE に追加して、起動。
・http://localhost:8080/hello-war/HelloServlet をブラウザで開くと、Hello, Servlet!と表示されるはず。
以上、ブラウザ→ Servlet まで。
■ SessionBean まで疎通
続いて、文字列 "Hello, SessionBean!" を返すメソッド sayHello() を持つ SessionBean を書く。
◆ hello-ejb 作成
適当に新規 EJB Project を作成。以下、入力例。
target runtime | IBM WASCE v2.1 |
EJB Module version | 3.0 |
Configuration | Default Configuration ・・・ |
Add project to EAR | check |
EAR project name | hello-ear |
Group Id | net.yasuabe.studies.wasce |
Artifact Id | hello-ejb |
Artifact Type | ejb |
◆ hello-ear に プロジェクト依存を追加
プロジェクトの Properties を開いて、"Java EE Module Dependencies" で hello-ejb にチェック
◆ HelloService EJB 作成
hello-ejb プロジェクトで [New]/[Session Bean (EJB 3.x)] を実行。以下入力例。
パッケージ名 | net.yasuabe.studies.wasce.ejb |
クラス名 | HelloService |
コードは以下のような感じ。
@Local
public interface HelloServiceLocal {
String sayHello();
}
@Stateless
public class HelloService implements HelloServiceLocal {
@Override public String sayHello() {
return "Hello, SessionBean!";
}
}
◆ hello-war での呼び出しコード記述
◆ 確認
再び、http://localhost:8080/hello-war/HelloServlet を開いて、今度は「Hello, SessionBean!」と表示されるのを確認する。
これで EJB3 に届いた。
■ JPA+MySQL まで疎通
JPA による データベース・アクセスを以下の流れでやってみる。
- まずテーブルを用意
- データソースの設定
- JPA によるアクセスコード
◆ テーブルの準備
mysql> use test;
mysql> CREATE TABLE t1 (c1 int primary key, c2 varchar(20));
mysql> insert into t1(c1, c2) values(1, 'Hello, JPA!');
mysql> select * from t1;
+----+-------------+
| c1 | c2 |
+----+-------------+
| 1 | Hello, JPA! |
+----+-------------+
◆ データソースの準備
- WASCE が ドライバの jar を使えるように、"Services"/Repository から mysql-connector を登録する。内部的には以下のようにファイルが置かれる。
{WASCE_HOME}/repository |
└ mysql |
└ mysql-connector-java |
└ 5.1.10 |
└ mysql-connector-java-5.1.10.jar |
- WASCE 管理画面で、Database Pools >Using the Geronimo database pool wizardの順に選択し、以下のように入力
Name of Database Pool | jdbc/HelloDS |
Database Type | MySQL |
Database Name | test |
◆ HelloEntity 作成
以下、hello-ejb プロジェクトでの作業。
まず、hello-ejb プロジェクトに以下のようなクラスを書く
package net.yasuabe.studies.wasce.entity;
@Entity(name="t1")
public class HelloEntity {
@Id @Column(name="c1") private int id;
@Column(name="c2") private String message;
...getter/setter 略
}
次に、META-INF 下にpersistence.xml を作り、以下のように記述する。
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="HelloUnit" transaction-type="JTA">
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
<jta-data-source>jdbc/HelloDS</jta-data-source>
</persistence-unit>
</persistence>
◆ geronimo-application.xml に依存追加
hello-ear プロジェクトの geronimo-application.xml に以下のように依存を追加する。
<dep:dependencies>
<dep:dependency>
<dep:groupId>console.dbpool</dep:groupId>
<dep:artifactId>jdbc_HelloDS</dep:artifactId>
<dep:version>1.0</dep:version>
<dep:type>rar</dep:type>
</dep:dependency>
</dep:dependencies>
これは Geronimo Deployment Plan Editor の Deployment タブから、Server Dependencies の [Add] で追加することもできる。
この記述が無いと、「Unable to resolve reference "JtaDataSourceWrapper"」という文言のエラーが出て、気づくまでかなり悩むことになったりする。plan というものに慣れるのが、ツボらしい。
ちなみに groupId, artifactId は WASCE の管理コンソールから確認することができる。(Database Pools ページの、jdbc/HelloDS 行 Actions 列から Usage を選択)
◆ 実行
再び、http://localhost:8080/hello-war/HelloServlet を開いて、今度は「Hello, JPA!」と表示されるのを確認する。
これでプレゼンテーション層からデータ層まで疎通できた。
====
◆ 手間取ったところ- Deployment Plan というのが最初分かりにくくて、geronimo-application.xml への追記を発見するまで手間取った。
- MySQL の場合、データソースを追加するに先立って、予め repository に データベースドライバを含む jar を置いてないと駄目らしく、気付くまでちょっと悩んだ。他のいくつかの DB は Out-of-the-box で使える。
0 件のコメント:
コメントを投稿