JPA + EJB + JSF による Web アプリケーション(その 2)
前回の続きで下準備編。
PostgreSQL の下準備
PostgreSQL のインストールとデータベースの作成
ごっそりと割愛。他の人が解説してくれてるよ、きっと(丸投げ)。
データの投入
SQL をぶん投げる。長くなるので折りたたみ。
CREATE TABLE district ( id INT PRIMARY KEY, name VARCHAR(30) ); INSERT INTO district ( id, name ) VALUES (1,'北海道'); INSERT INTO district ( id, name ) VALUES (2,'東北'); INSERT INTO district ( id, name ) VALUES (3,'関東'); INSERT INTO district ( id, name ) VALUES (4,'中部'); INSERT INTO district ( id, name ) VALUES (5,'近畿'); INSERT INTO district ( id, name ) VALUES (6,'中国'); INSERT INTO district ( id, name ) VALUES (7,'四国'); INSERT INTO district ( id, name ) VALUES (8,'九州'); INSERT INTO district ( id, name ) VALUES (9,'沖縄'); CREATE TABLE prefecture ( id INT PRIMARY KEY, name VARCHAR(30), district_id INT REFERENCES district(id) ); INSERT INTO prefecture ( id, name, district_id ) VALUES (1,'北海道',1); INSERT INTO prefecture ( id, name, district_id ) VALUES (2,'青森県',2); INSERT INTO prefecture ( id, name, district_id ) VALUES (3,'岩手県',2); INSERT INTO prefecture ( id, name, district_id ) VALUES (4,'宮城県',2); INSERT INTO prefecture ( id, name, district_id ) VALUES (5,'秋田県',2); INSERT INTO prefecture ( id, name, district_id ) VALUES (6,'山形県',2); INSERT INTO prefecture ( id, name, district_id ) VALUES (7,'福島県',2); INSERT INTO prefecture ( id, name, district_id ) VALUES (8,'茨城県',3); INSERT INTO prefecture ( id, name, district_id ) VALUES (9,'栃木県',3); INSERT INTO prefecture ( id, name, district_id ) VALUES (10,'群馬県',3); INSERT INTO prefecture ( id, name, district_id ) VALUES (11,'埼玉県',3); INSERT INTO prefecture ( id, name, district_id ) VALUES (12,'千葉県',3); INSERT INTO prefecture ( id, name, district_id ) VALUES (13,'東京都',3); INSERT INTO prefecture ( id, name, district_id ) VALUES (14,'神奈川県',3); INSERT INTO prefecture ( id, name, district_id ) VALUES (15,'新潟県',4); INSERT INTO prefecture ( id, name, district_id ) VALUES (16,'富山県',4); INSERT INTO prefecture ( id, name, district_id ) VALUES (17,'石川県',4); INSERT INTO prefecture ( id, name, district_id ) VALUES (18,'福井県',4); INSERT INTO prefecture ( id, name, district_id ) VALUES (19,'山梨県',4); INSERT INTO prefecture ( id, name, district_id ) VALUES (20,'長野県',4); INSERT INTO prefecture ( id, name, district_id ) VALUES (21,'岐阜県',4); INSERT INTO prefecture ( id, name, district_id ) VALUES (22,'静岡県',4); INSERT INTO prefecture ( id, name, district_id ) VALUES (23,'愛知県',4); INSERT INTO prefecture ( id, name, district_id ) VALUES (24,'三重県',5); INSERT INTO prefecture ( id, name, district_id ) VALUES (25,'滋賀県',5); INSERT INTO prefecture ( id, name, district_id ) VALUES (26,'京都府',5); INSERT INTO prefecture ( id, name, district_id ) VALUES (27,'大阪府',5); INSERT INTO prefecture ( id, name, district_id ) VALUES (28,'兵庫県',5); INSERT INTO prefecture ( id, name, district_id ) VALUES (29,'奈良県',5); INSERT INTO prefecture ( id, name, district_id ) VALUES (30,'和歌山県',5); INSERT INTO prefecture ( id, name, district_id ) VALUES (31,'鳥取県',6); INSERT INTO prefecture ( id, name, district_id ) VALUES (32,'島根県',6); INSERT INTO prefecture ( id, name, district_id ) VALUES (33,'岡山県',6); INSERT INTO prefecture ( id, name, district_id ) VALUES (34,'広島県',6); INSERT INTO prefecture ( id, name, district_id ) VALUES (35,'山口県',6); INSERT INTO prefecture ( id, name, district_id ) VALUES (36,'徳島県',7); INSERT INTO prefecture ( id, name, district_id ) VALUES (37,'香川県',7); INSERT INTO prefecture ( id, name, district_id ) VALUES (38,'愛媛県',7); INSERT INTO prefecture ( id, name, district_id ) VALUES (39,'高知県',7); INSERT INTO prefecture ( id, name, district_id ) VALUES (40,'福岡県',8); INSERT INTO prefecture ( id, name, district_id ) VALUES (41,'佐賀県',8); INSERT INTO prefecture ( id, name, district_id ) VALUES (42,'長崎県',8); INSERT INTO prefecture ( id, name, district_id ) VALUES (43,'熊本県',8); INSERT INTO prefecture ( id, name, district_id ) VALUES (44,'大分県',8); INSERT INTO prefecture ( id, name, district_id ) VALUES (45,'宮崎県',8); INSERT INTO prefecture ( id, name, district_id ) VALUES (46,'鹿児島県',8); INSERT INTO prefecture ( id, name, district_id ) VALUES (47,'沖縄県',9); CREATE TABLE city ( id INT PRIMARY KEY, name VARCHAR(30), prefecture_id INT REFERENCES prefecture(id), designated DATE, area DECIMAL(7,2), population INT ); INSERT INTO city ( id, name, prefecture_id, designated, area, population ) VALUES (1,'札幌市',1,'1972-04-01',1121.12,1921245); INSERT INTO city ( id, name, prefecture_id, designated, area, population ) VALUES (2,'仙台市',4,'1989-04-01',785.85,1049493); INSERT INTO city ( id, name, prefecture_id, designated, area, population ) VALUES (3,'さいたま市',11,'2003-04-01',217.49,1229479); INSERT INTO city ( id, name, prefecture_id, designated, area, population ) VALUES (4,'千葉市',12,'1992-04-01',272.08,963120); INSERT INTO city ( id, name, prefecture_id, designated, area, population ) VALUES (5,'横浜市',14,'1956-09-01',437.38,3691693); INSERT INTO city ( id, name, prefecture_id, designated, area, population ) VALUES (6,'川崎市',14,'1972-04-01',142.7,1430773); INSERT INTO city ( id, name, prefecture_id, designated, area, population ) VALUES (7,'相模原市',14,'2010-04-01',328.83,719412); INSERT INTO city ( id, name, prefecture_id, designated, area, population ) VALUES (8,'新潟市',15,'2007-04-01',726.1,812458); INSERT INTO city ( id, name, prefecture_id, designated, area, population ) VALUES (9,'静岡市',22,'2005-04-01',1411.85,714513); INSERT INTO city ( id, name, prefecture_id, designated, area, population ) VALUES (10,'浜松市',22,'2007-04-01',1558.04,798924); INSERT INTO city ( id, name, prefecture_id, designated, area, population ) VALUES (11,'名古屋市',23,'1956-09-01',326.43,2266517); INSERT INTO city ( id, name, prefecture_id, designated, area, population ) VALUES (12,'京都市',26,'1956-09-01',827.9,1473416); INSERT INTO city ( id, name, prefecture_id, designated, area, population ) VALUES (13,'大阪市',27,'1956-09-01',223.0,2670579); INSERT INTO city ( id, name, prefecture_id, designated, area, population ) VALUES (14,'堺市',27,'2006-04-01',149.99,842685); INSERT INTO city ( id, name, prefecture_id, designated, area, population ) VALUES (15,'神戸市',28,'1956-09-01',552.26,1544496); INSERT INTO city ( id, name, prefecture_id, designated, area, population ) VALUES (16,'岡山市',33,'2009-04-01',789.92,710913); INSERT INTO city ( id, name, prefecture_id, designated, area, population ) VALUES (17,'広島市',34,'1980-04-01',905.41,1177711); INSERT INTO city ( id, name, prefecture_id, designated, area, population ) VALUES (18,'北九州市',40,'1963-04-01',488.78,974287); INSERT INTO city ( id, name, prefecture_id, designated, area, population ) VALUES (19,'福岡市',40,'1972-04-01',341.7,1479433); INSERT INTO city ( id, name, prefecture_id, designated, area, population ) VALUES (20,'熊本市',43,'2012-04-01',389.54,736010);
WildFly の下準備
WildFly のインストール
ZIP をダウンロードして好きなフォルダに展開するだけ。特に難しいことはない。
JDBC ドライバの配置
WildFly 推奨の方法(jar をデプロイするやり方)については下記リンク参照。
WildFlyでMySQL datarouceの作成 - Qiita
ここでは直接 jar を配置する方法を紹介。なおこの方法だと domain モードで起動したときにサーバごとに設定をしないといけないが、今回は standalone モードでしか動かさないので気にしなくて良い。
WildFly を展開したフォルダの中の modules\system\layers\base\org
に新たに postgresql
フォルダを作成し、その中に main
フォルダを作って、その中に postgresql-9.3-1100.jdbc4.jar
をコピーする。そして同フォルダに以下の内容で module.xml
を作成する。
<?xml version="1.0" encoding="UTF-8"?> <module xmlns="urn:jboss:module:1.3" name="org.postgresql"> <resources> <resource-root path="postgresql-9.3-1100.jdbc4.jar" /> </resources> <dependencies> <module name="javax.api" /> <module name="javax.transaction.api" /> <module name="javax.servlet.api" optional="true" /> </dependencies> </module>
JDBC ドライバの登録と DataSource の定義
WildFly をインストールしたフォルダの中の standalone\configuration\standalone.xml
を修正して DataSource を定義しておく。
<subsystem xmlns="urn:jboss:domain:datasources:2.0"> <datasources> <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true"> <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url> <driver>h2</driver> <security> <user-name>sa</user-name> <password>sa</password> </security> </datasource> <!-- 追加ここから --> <datasource jta="true" jndi-name="java:jboss/datasources/PostgreSQL/mydb" pool-name="PostgreSQL" enabled="true" use-java-context="true"> <connection-url>jdbc:postgresql://localhost:5432/mydb</connection-url> <driver>postgresql</driver> <security> <user-name>****</user-name> <password>****</password> </security> </datasource> <!-- 追加ここまで --> <drivers> <!-- 追加ここから --> <driver name="postgresql" module="org.postgresql"/> <!-- 追加ここまで --> <driver name="h2" module="com.h2database.h2"> <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class> </driver> </drivers> </datasources> </subsystem>
jndi-name
は自分でわかるものであればこの通りでなくても良い。connection-url
のデータベース名は実際に作成したデータベース名で置き換えること。