LoginSignup
1
1

More than 5 years have passed since last update.

Docker上のWebLogic ServerでDerbyを使ってJDBCのデータベース接続を簡単に試す方法

Posted at

はじめに

Dockerを使って、簡単にWebLogic Serverを起動して自分のPCで試せるようになりました。
参照:Dockerで実践! WebLogic Server 12.2.1のマルチテナントのサンプル環境を簡単に作成する

せっかくだからWebLogic Serverでのデータベース接続も使ってみたいと思います。とはいえ、同じDockerコンテナに色々ソフトを詰め込むのはDockerコンテナも重くなってよろしくないので、別のDockerコンテナにDBを入れて、そことつなぐのが思い浮かびますが、ちょっと手間かかりそうです。
そこで、とりあえずどんなDBでもいいから試したいという場合、WebLogic Server起動時に一緒に起動してくるDerbyデータベースが利用できます。
上の記事の中のMedrecというサンプルアプリケーションでもDerbyを使っていましたが、このときは勝手に構成されてしまっていたので、やり方がよくわからないと思います。

そこでデータソースの定義でDerbyを使う方法を書こうと思ったのですが、最新のWebLogic 12.2.1にはDefaultDatasourceというJava EE7の機能が使えるということを発見しました。

デフォルト・データ・ソースの使用
http://docs.oracle.com/cd/E72987_01/wls/JDBCA/default_datasource.htm

このDefaultDataSourceを使うと、データソースの定義をせずに決まったJNDI名(java:comp/DefaultDataSource)でアプリケーションからデータソースを参照するだけでJDBCが利用できます。WebLogic Serverの場合はデフォルト・データ・ソースとしてDerbyに勝手に接続してくれます。

せっかくですので、Derby用のデータソースを定義する方法と、DefaultDataSourceを使う両方のやり方をまとめます。前者はWebLogic Server 12.1.3などの下位バージョンでも使える手順ですが、後者はJava EE7前提なため、12.2.1である必要があります。

DefaultDataSourceを使ってDerbyへアクセス

Dockerを使っている場合は、dockerコマンドでWebLogic Server 12.2.1を起動します。今回はさらのドメインである1221-domainのDockerイメージを使います。

docker run -it -p 8001:8001 1221-domain

そして、WebLogicの管理コンソールにログインします。

あとデフォルトデータソースを参照しているアプリケーションをデプロイして、その中でJDBCを使うだけです。具体的には、以下のようなコードでデフォルトデータソースを参照します。

例1

@Resource(lookup="java:comp/DefaultDataSource")
DataSource myDS;

例2

InitialContext ctx = new InitialContext();
DataSource myDS = (DataSource) ctx.lookup("java:comp/DefaultDataSource");

今回はテストとして、自作のDBテスト用のアプリケーションを使ってみます。
GitHubに登録してありますので、よければ使ってみてください。
easydbtester.war(リンク先の"View Raw"をクリックするとダウンロードが開始されます。)

これをデプロイし、アプリケーションにブラウザからアクセスします。(IPアドレスやポートなどは自分の環境に合わせてください)
http://192.168.99.100:8001/easydbtester/

SQLを発行できるテストアプリケーションです。
まずはUpdateの方で、以下の用に「Use DefaultDataSource」をtrueにしてみてください。
Image.png

内部のソースコードはこんな感じで、trueにした場合にデフォルトデータソースを利用するための固定の文字列java:comp/DefaultDataSourceでデータソースを参照するようになっています。

        if (useDefaultDatasource) {
            datasource = "java:comp/DefaultDataSource";
        } else {
        InitialContext ctx;
        Connection conn = null;
        try {
            ctx = new InitialContext();
            DataSource ds = (DataSource) ctx.lookup(datasource);
            conn = ds.getConnection();

上の例のようにcreate table文を入れてsubmitします。
create table dummy (dummy_message varchar(300))
以下のような出力が出たら、テーブル作成できました。

datasource: java:comp/DefaultDataSource
sql: create table dummy (dummy_message varchar(300))
loop: 1
update count: 0
success

あとは、以下のようなSQLで色々と遊んでみてください。select系はselectのフォームを使ってください。selectしてもデータは見れません。行数だけわかる簡単なアプリです。
insert into dummy (dummy_message) values ('dummy_data')
select * from dummy

マニュアルに書かれていますが、デフォルトデータソースは基本的に設定などを変更できません。(別途カスタムのデフォルトデータソースというのは作れるようです)

見たとおりデータソースの画面には定義は表示されません。
Image.png

しかし、モニタリングタブを見ると確認できました。どうやら初めてデフォルトデータソースが参照されたときにここに表示されるようです。
Image.png

サーバーログからこのデフォルトデータソースの作成時の様子が見えます。

####<Apr 15, 2016 9:36:30 AM UTC> <Info> <JDBC> <e3659ea2d59b> <AdminServer> <[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <710e17a1-c937-4d3a-81a4-0625c9285ee9-00000011> <1460712990580> <[severity-value: 64] [rid: 0] [partition-id: 0] [partition-name: DOMAIN] > <BEA-001503> <Creating application-scoped data source connection pool java:comp/DefaultDataSource for Application easydbtester, Module easydbtester, URL = jdbc:derby://localhost:1527/DefaultDataSource;ServerName=localhost;databaseName=DefaultDataSource;create=true, Properties = portNumber=1527;databaseName=DefaultDataSource;create=true;serverName=localhost;.> 

※ちなみにDockerでサーバーログをPC(Docker クライアント)にダウンロードして見るにはこうしました。コンテナIDはdocker psコマンドで確認してください。
$ docker cp e3659ea2d59b:/u01/oracle/user_projects/domains/base_domain/servers/AdminServer/logs/AdminServer.log AdminServer.log

自分でDerby用のデータソースを作成する方法

デフォルトデータソースを使わない方法です。

データソースのリンクをクリックし、(編集ロック解除した上で)新規で汎用データソースを選択します。
Image.png

下の例のように入力します。
Image.png

次の画面では今回client datasourceというやつを選択しました。
Image.png

次の画面は何も変更せずに次へ行きます。
Image.png

次の画面で以下の例のように入力します。データベース名やユーザー名は、事前作成なく使えますので、何でもいいです。
Image.png

次の画面でテストボタンでテストします。
Image.png

最後に、ターゲットとしてAdminServerを選択します。
Image.png

easydbtesterで今度は、Use DefaultDatasourceをfalseにし、いま作ったデータソースのJNDI名を入力します。そしてcreate table文を流します。
Image.png

そのあとは前と同じ様にinsertやselectをしてみると、ちゃんとDBとして使えていることがわかります。(selectの方もUse DefaultDatasourceをfalseにしておくのを忘れずに)

以上

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1