トラブルシューティング
データベース未起動によるエラー
事象
以下のメッセージが表示される。
18:14:17,228 WARN [org.springframework.web.context.support.XmlWebApplicationContext] (ServerService Thread Pool -- 83) Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.jdbc.datasource.init.DataSourceInitializer#0': Invocation of init method failed; nested exception is org.springframework.jdbc.datasource.init.UncategorizedScriptException: Failed to execute database script; nested exception is org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: Cannot create PoolableConnectionFactory (java.net.ConnectException: ポート1,527のサーバーlocalhostへの接続中にメッセージConnection refused: connectでエラーが発生しました。)
原因
ローカル環境のApache Derbyが起動していない。
WildFlyにJDBCデータソースを設定する
手順
JDBCドライバのデプロイ
WildFly管理コンソールのメニューの「Deployments」をクリックする。
画面左上の"Add"ボタンをクリックする。
選択項目から「Upload Deployment」を選択する。
「Add Deployment」画面が表示されるので、前項で入手したPostgreSQL JDBCドライバをドラッグ&ドロップする。
"Next>>"ボタン、"Finish"ボタンをクリックする。
画面の左側に、アップロードしたファイル名が表示されていることを確認する。
JDBCデータソースの設定
管理コンソールを、"Configuration" ⇒ "Subsystems" ⇒ "Datasources" ⇒ "Non-XA" と辿り、画面右上の"Add"ボタンをクリックする。
【要精査】Non-XAだと2フェーズコミットが出来ないはず。それでいいか検証。
ラジオボタンの選択項目から、一番上の"Custom"を選択し、"Next>>"ボタンをクリックする。
Nameに以下を設定する。
ChameleonReadCommitted
JNDI Nameに以下を設定する。ここで設定したJNDI名は、Webアプリケーションから参照される。
java:/jdbc/ChameleonReadCommitted
※ NameとJNDI Nameは、後で設定するトランザクション分離レベルが判るような名前にしておく(ここではREAD COMMITTEDに設定する)。
"Next>>"ボタンをクリックする。
ダイアログ上部の"Detected Driver"をクリックすると、先ほどデプロイした "derbyclient-10.12.1.1.jar" がリストに表示されるので、選択して"Next>>"ボタンをクリックする。
Connection URLに、以下を設定する。
jdbc:derby://localhost:1527/C:/Users/Equinox/Chameleon;create=true
"Next>>"ボタン、"Finish"ボタンをクリックする。
Datasourceの列に "ChameleonReadCommitted" が追加されたことを確認する。
トランザクション分離レベルの設定
作成した "ChameleonReadCommitted" の右側にあるプルダウンの "View" をクリックすると、データソースの編集画面が表示されるので、"Connection"タブをクリックする。
接続設定の画面が表示されるので、"Edit"リンクをクリックすると、画面が編集モードになるので、Transaction Isolation: の項目から TRANSACTION_READ_COMMITTED を選択し、"Save"ボタンをクリックする。
TODO:"Save"ボタンをクリックすると、"The Data Source ChameleonSerializable is still enabled. Please disabled it, to make changes to the configuration."メッセージが表示される。
疎通確認
管理コンソールを"Configuration" ⇒ "Subsystems" ⇒ "Datasources" ⇒ "Non-XA" ⇒ "ChameleonDS"と辿り、"View"をクリックする。
"Connection"をクリックし、"Test Connection"ボタンをクリックする。
ダイアログがポップアップし、メッセージ "Successfully created JDBC connection." が表示されれば疎通OK。
WildFlyの管理コンソールにアクセスする
手順
(WildFlyを展開したディレクトリ)\bin\standalone.bat を実行し、WildFlyを起動する。
Webブラウザから http://localhost:8080/ に接続し、画面中央右の "Administration Console" リンクをクリックする。
ユーザを追加していないと、以下のエラー画面に飛ばされる。
管理ユーザを追加するには、(WildFlyを展開したディレクトリ)\bin\add-user.bat を実行する。
以下のように作成するユーザの種別を聞かれるので、何も入力せずにEnterキーを押下する(管理ユーザが選択される)。
登録するユーザ名とパスワードを聞かれるのでご随意に。
以下のように所属するグループ名を聞かれるので、何も入力せずにEnterキーを押下する。
'ManagementRealm' 領域に作成ユーザを追加するかどうか聞かれるので、"yes" を入力してEnterキーを押下する。
最後のリモート接続設定云々(?)の質問には、"no" を入力してEnterキーを押下する。
以上で管理ユーザ登録の手続きは終わり。
再度 http://localhost:8080/ に接続し、画面中央右の "Administration Console" リンクをクリックすると、ログインダイアログが表示されるので、先刻登録したユーザIDとパスワードを入力。
ログインに成功すると、晴れて管理画面が表示される。
Tilesテンプレートからフッター部分を分離する
手順
タイル定義にフッター枠を追加する
/chameleon-web/src/main/webapp/WEB-INF/tiles/tiles-definitions.xml(Apache Tilesの定義ファイル)に、フッター枠を追加する。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN" "http://tiles.apache.org/dtds/tiles-config_3_0.dtd"> <tiles-definitions> <definition name="layouts" template="/WEB-INF/views/layout/template.jsp"> <put-attribute name="title" value="Chameleon" /> <put-attribute name="header" value="/WEB-INF/views/layout/header.jsp" /> <put-attribute name="body" value="" /> <!-- フッター枠を追加する --> <put-attribute name="footer" value="/WEB-INF/views/layout/footer.jsp" /> </definition> <definition name="*/*" extends="layouts"> <put-attribute name="title" value="title.{1}.{2}" /> <put-attribute name="body" value="/WEB-INF/views/{1}/{2}.jsp" /> </definition> </tiles-definitions>
フッターの記述を移動する
/Chameleon-web/src/main/webapp/WEB-INF/views/layout/template.jsp(レイアウト定義テンプレート) を以下の通りに修正する。
<!DOCTYPE html> <html class="no-js"> <head> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> <meta name="viewport" content="width=device-width" /> <script type="text/javascript"> </script> <c:set var="titleKey"> <tiles:insertAttribute name="title" ignore="true" /> </c:set> <title><spring:message code="${titleKey}" text="chameleon" /></title> <link rel="stylesheet" href="${pageContext.request.contextPath}/resources/app/css/styles.css"> </head> <body> <div class="container"> <tiles:insertAttribute name="header" /> <tiles:insertAttribute name="body" /> <hr> <tiles:insertAttribute name="footer" /> <!-- <p style="text-align: center; background: #e5eCf9;">Copyright © 20XX CompanyName</p> --> </div> </body> </html>
上記でコメントアウトしたフッターの記述を、/Chameleon-web/src/main/webapp/WEB-INF/views/layout/footer.jsp に切り出す。
ついでに表記も修正。
<p style="text-align: center; background: #e5eCf9;">Copyright © 2017 KnowledgeFort</p>
TERASOLUNAブランクアプリケーションを起動してみる
手順
Package Exploler の chameleon-web を右クリックし、Run As ⇒ Run on Server を選択する。
WildFly 10.x を選択し、「Finish」ボタンをクリックする。
ブラウザが起動し、ブランクプロジェクトのサンプル画面が表示される。
TERASOLUNAプロジェクトからデータベースに接続する
手順
chameleon-env.xmlの編集
chameleon-env.xmlに、WildFly上に定義したJDBCデータソースのJNDI名を指定する。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:jdbc="http://www.springframework.org/schema/jdbc" xsi:schemaLocation=" http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd "> <!-- omitted. --> <!-- <bean id="dataSource" class="net.sf.log4jdbc.Log4jdbcProxyDataSource"> <constructor-arg index="0" ref="realDataSource" /> </bean> --> <!-- omitted. --> <jee:jndi-lookup id="dataSource" jndi-name="java:/jdbc/ChameleonDS" /> <!-- omitted. --> </beans>