管理コンソールを使用してデータソースの定義を行う手順。
環境
やったこと
JDBCドライバのデプロイ
ojdbc6.jarを%WILDFLY_ROOT%standalone\deploymentsに配置する。
JBossを起動する。下記のように、ojdbc6.jarがデプロイされればOK
JBAS015876: Starting deployment of "ojdbc6.jar" (runtime-name: "ojdbc6.jar")
JBAS017100: Listening on 127.0.0.1:9999
JBAS010400: Bound data source [java:jboss/datasources/ExampleDS]
JBAS010403: Deploying JDBC-compliant driver class oracle.jdbc.OracleDriver (version 11.2)
JBAS010417: Started Driver service with driver-name = ojdbc6.jar
JBAS018559: Deployed "ojdbc6.jar" (runtime-name : "ojdbc6.jar")
管理ユーザの作成
管理コンソールで作業するための管理者ユーザを作成する。
下記のように、%WILDFLY_ROOT%\bin\add-user.batを実行して作成する。何箇所から入力を求められるので、その点は後述。
>add-user.bat What type of user do you wish to add? a) Management User (mgmt-users.properties) b) Application User (application-users.properties) (a): Enter the details of the new user to add. Realm (ManagementRealm) : Username : kagamihoge Password : Re-enter Password : What groups do you want this user to belong to? (Please enter a comma separated list, or leave blank for none)[ ]: About to add user 'kagamihoge' for realm 'ManagementRealm' Is this correct yes/no? yes Added user 'kagamihoge' to file 'C:\Java\jboss-as\wildfly-8.0.0.Alpha4_ora\stand alone\configuration\mgmt-users.properties' Added user 'kagamihoge' to file 'C:\Java\jboss-as\wildfly-8.0.0.Alpha4_ora\domai n\configuration\mgmt-users.properties' Added user 'kagamihoge' with groups to file 'C:\Java\jboss-as\wildfly-8.0.0.Alp ha4_ora\standalone\configuration\mgmt-groups.properties' Added user 'kagamihoge' with groups to file 'C:\Java\jboss-as\wildfly-8.0.0.Alp ha4_ora\domain\configuration\mgmt-groups.properties' Is this new user going to be used for one AS process to connect to another AS pr ocess? e.g. for a slave host controller connecting to the master or for a Remoting conn ection for server to server EJB calls. yes/no? yes To represent the user add the following to the server-identities definition <sec ret value="YWFhYXNzc3MxXw==" /> 続行するには何かキーを押してください . . .
管理者ユーザ(a)かアプリケーションユーザ(b)かを選択する。デフォルト(=何も入力しない)は(a)なのでコレを選ぶ。
(a):
ユーザID。任意のもの。
Username : kagamihoge
パスワードと入力確認。英数字記号必須。
Password : Re-enter Password :
所属グループ。とりあえず何も入力せずエンターでOK
What groups do you want this user to belong to? (Please enter a comma separated list, or leave blank for none)[ ]:
実行確認がされる。よければyesと入力。
Is this correct yes/no? yes
新しいユーザがASのプロセスから別のプロセスに接続できてもよいか? とかなんとか。たとえばEJBのリモートコールがうんぬんとかなんとか*1だが、とりあえず関係ないのでyesにしてしまう。
Is this new user going to be used for one AS process to connect to another AS pr ocess? e.g. for a slave host controller connecting to the master or for a Remoting conn ection for server to server EJB calls. yes/no? yes
Administration ConsoleからJDBC Datasourceを追加
http://localhost:8080/console にブラウザからアクセスし、さっき作ったユーザIDでログインする。とりあえずこんな感じの画面が表示される。
左上のProfile -> 左側ツリーのSubsystems -> Connector -> Datasources を選択する。デフォルトで入っているH2のデータソース(ExampleDS)が見て取れる。
Addを押す。新規データソースの名前と、JNDI名を入力する。とりあえず、ここではOracle11gXEDSとjava:jboss/datasources/Oracle11gXEDSにしておく。
JDBCドライバを選択する。さっきデプロイしたojdbc6.jarをクリックして選択状態にしてNext押す。
JDBC URL、ID、パスワードなど接続設定を入力する。
入力し終わると、こんな感じにリストに追加される。ただし、Enableの欄が使用不可になっているとおり、使うことは出来ない。ので、追加したデータソースを選択して表の右上にあるEnableを押す。
最後に、接続確認をする。ページ下部のConnectionタブを開いてTest Connectionを押す。問題が無ければ、下図のようにJDBCのConnectionが作成できましたよ、とメッセージが出る。なお、なんかエラーがあった場合はWildflyのログに出る。ex. パスワードが違ってます、とか。
接続確認
テキトーなサーブレットでも作ってみてJavaから接続確認をする。
とりあえず新しい感じのservletのdependencyを追加する。
<dependency> <groupId>org.jboss.spec.javax.servlet</groupId> <artifactId>jboss-servlet-api_3.1_spec</artifactId> <version>1.0.0.Beta1</version> </dependency>
適当な感じのJavaを書く。フツーはJava EEだとJPA経由になると思うんで、DataSourceからConnection取得とかやらないとは思うけど。まぁ実験ということで。
package kagamihoge.jboss8ora; import java.io.IOException; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.sql.DataSource; @WebServlet("/hoge") public class HogeServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { try { Context ctx = new InitialContext(); DataSource ds = (DataSource)ctx.lookup("java:jboss/datasources/Oracle11gXEDS"); try (Connection connection = ds.getConnection(); PreparedStatement sql = connection.prepareStatement("select * from v$version"); ResultSet r = sql.executeQuery();) { while (r.next()) { String banner = r.getString(1); System.out.println(banner); } } catch (SQLException e) { e.printStackTrace(); } } catch (NamingException e) { e.printStackTrace(); } } }
ログにSQLの実行結果が表示されれればOK
*1:良く理解していない