※ 本記事は、Stephen Feltsによる”JSON AJD Database use with WebLogic Server“を翻訳したものです。

2023年1月10日


Oracle AJDデータベースの概要は、https://docs.oracle.com/cd/E83857_01/paas/atp-cloud/index.htmlを参照してください。

JSON AJDデータベースの作成

Oracle Cloudでアカウントを取得することから始める必要があります。無料アカウントにサインアップできます。これらのスクリーンショットの作成には無料アカウントが使用されており、使用可能なオプションを制限する場合もあります。これはホーム・ページです。「ATPデータベースの作成」オプションを選択します。

img01

複数のコンパートメントがある場合は、左側のドロップダウン・ボックスで正しいコンパートメントを選択します(無料アカウントでは1つのみです)。表示名とデータベース名を入力します。WebLogic Serverで使用するために、ワークロードをJSONに変更します。無料のアカウントを使用している場合は、「Always Free構成オプションのみ表示」をオンにする必要があります。管理者の資格証明を入力します。無料ではないデータベースの場合は、CPUとストレージの数を設定します。

img02

MongoDBのデータベースAPIは、「許可されたIpsおよびVCNからのセキュア・アクセスのみ」を定義した場合にのみ使用可能です。そのオプションをクリックします(デフォルトではありません)。現在のマシンから接続するだけの場合は、「Add My IP Address」ボタンを使用します。他のマシン(Oracle Cloud VMなど)から接続する場合は、それらのアドレスも入力できます。接続元のコンピュート・インスタンスが不明な場合は、「IP表記法タイプ」フィールドをCIDRブロックに変更し、値 0.0.0.0/0を入力できます。これにより、どこからでも接続できますが、当然、テストのためにのみ使用してください。

pic 21

次に、「Create Autonomous Database」ボタンをクリックします。

これにより、新しく作成されたデータベースの詳細およびメトリックを示す「メトリック」ビューを含む「Autonomous Databaseの詳細」ページが表示されます。Lifecycle Stateは、設定が完了し、データベースが処理可能になるまで「プロビジョニング中」になります。このページから、データベースのスケール・アップ/ダウン、停止およびバックアップ/リストアを選択できます。

img03

「ツール」タブには、開発に必要なSimple Oracle Document Access(SODA)ドライバをダウンロードできる画面が表示されます。

img04

SODAドライバのバージョンとOracle JDBCドライバのバージョンを一致させることが重要です。WLS 12.2.1.4.0および14.1.1.0.0には、JDBC 19.3.0.0が付属しています。サポートされている最小はJDBC 19.6.0.0.0であるため、ドライバをアップグレードする必要があります。ドライバjarファイルの更新プロセスについては、https://docs.oracle.com/en/middleware/fusion-middleware/weblogic-server/12.2.1.4/jdbca/configure-database-connectivity.htmlを参照してください。SODAドライバ orajsoda-1.1.7.jarは19.6ドライバで動作するため、このバージョンを後で開発するためにダウンロードしてください。

img05

詳細画面で「データベース接続」タブをクリックします。忘れる前に、データベースの「_tp」サービスの名前に注意してください。この場合、「json_tp」です。これは、WebLogic ServerでURLを生成するために必要になります。

img06

次に、データベース資格証明を含むインスタンスWalletをダウンロードします。パスワードを入力し、zipファイルをダウンロードします。

img07

詳細ページに戻り、「データベース・アクション」ボタンを選択します。このページには多くのオプションがあります。

pic 8

「Database Users」をクリックして新しいユーザーを作成します。名前とパスワードを入力します。

img09

次に、「付与されたロール」タブに移動して、いくつかの権限を選択します。CONNECTおよびSODA_APPが最小限必要です。

img10

この場合、ユーザーDEMO1を作成します。

img11

「データベース・アクション」ページに戻り、「SQL」を選択して、前に指定した資格証明を入力します。これにより、スタンドアロンのSQL Developerツールに似たWebビューが表示されます。最初はコレクションがなく、「SODAリスト」はコレクションを返しません。

img12

empという名前のコレクションを作成します。

img13

次に、SODA挿入コマンドを使用して、いくつかのドキュメントを入力します。

img14

SteveとTomという名のプログラマーを2人入れました。フィルタとともにsoda getコマンドを使用して、レコードのサブセットを選択できます。単純一致が使用されます。

img15

このフィルタでは、「より大きい」演算子を使用します。

img16

左マージンの「表」リストをリフレッシュすると、すべてのドキュメントで使用可能な列が表示されます。JSON_DOCUMENT列には、ドキュメント・データ自体が含まれます。json_serialize()を使用して、値全体を文字列として出力できます。

img17

 

JSON_DOCUMENTを使用して、個々のフィールド値にアクセスすることもできます。これは、projection、selection、groupingなど、通常のSQL列を使用できる任意の場所で使用できます。

img18

「データベース・アクション」ページに戻り、「JSON」を選択します。このツールでは、JSONドキュメントを直接操作できます。このツールを使用して、ドキュメントを参照できます。

img19

新しいJSONドキュメントを作成することもできます。文字列を入力し、「Create」ボタンを選択します。

img20

MongoDBを使用してデータベースにアクセスする場合は、「データベース・アクション」ページから「ORACLE DATABASE API FOR MONGBODB」を選択し、必要なURLを取得する必要があります。

pic 22

これでJSON AJDデータベースの作成は完了ですが、明らかに、データベース・メトリックの表示、データベース操作の実行、開発ツールの使用に戻ることができます。

WebLogic ServerでのJSON AJDデータベースの使用

この項では、WebLogic Server(WLS)データソースでのOracleのAutonomous JSON Database(AJD)サービスの使用について説明します。

このブログでは、ウォレットのzipファイルをすでにダウンロードして解凍していることを前提としています。サンプル・スクリプトでは、ウォレット・ディレクトリに/tmp/demoJSONを使用します。

WLSTを使用した構成

必要な資格証明ファイル、JDKおよびドライバjarファイルがあるため、データソースを作成する準備ができました。

オンラインWLSTスクリプトはこのオンラインWLSTスクリプト・アタッチメントにアタッチされています(online.pyの名前を変更します)。ドメインが作成されていると仮定してスクリプトを実行するには、サーバーが正しいJDKファイルおよびドライバjarファイルを使用して起動されます。次を実行してください

java weblogic.WLST online.py

このスクリプトは、データソース記述子ファイルを作成し、データソースをサーバーにデプロイします。スクリプトを見て、データソースがどのように構成されているかを確認します。設定する必要がある変数は上部にあるため、スクリプトを迅速に更新でき、ロジックには触れません。WLSTではpython変数を使用します。

「name_tp」形式の別名(serviceName変数)は、tnsnames.oraファイルから取得されます。URLは、@alias形式の”jdbc:oracle:thin:@name_tp”を使用して生成されます。これを有効にするには、”oracle.net.tns_admin”ドライバ・プロパティを使用して、tnsnames.oraファイルが配置されているディレクトリ(”tns_admin”変数)も指定する必要があります。tnsnames.oraのURL情報は、プロトコルをTCPSとして指定できるように長い形式を使用します。

データソース名(変数”dsname”)は、この例で接頭辞”jndi.”を付けてJNDI名を生成するためにも使用されます。アプリケーション要件にあわせて変更できます。

テストとパフォーマンスを最適化するために、推奨されるテスト表名は「SQL ISVALID」です。組織の標準に基づいて、他の接続プール・パラメータを設定できます。

ATP-Sは、コンテナDataBase(CDB)内の単一のプラガブルDataBase(PDB)へのアクセスを提供します。PDBでの操作のほとんどは、通常のOracleデータベースに似ています。ATP-Sの場合、ADMINというユーザーにはSYSDBAロールはありませんが、スキーマ・オブジェクトの作成や権限の付与などの操作を実行するための管理権限があります。

ATP-Sは、GRIDまたはRACがインストールされていないように構成されています。つまり、FANはサポートされておらず、WLS GENERICデータソースのみを作成できます(マルチ・データ・ソースとActive GridLinkは使用できません)。

接続を作成するには、データソースのユーザーとパスワード(変数名”user”および”password”)を指定する必要があります。この例では、データベースの作成時に構成されたAdminユーザーを使用します。さらに、アプリケーションで使用するために追加のユーザーを作成する可能性が高くなります。パスワードはデータソース記述子で暗号化されます。

構成の残りの部分は、クライアントとデータベースの間に双方向SSLを設定することに重点を置いています。これを構成するためのオプションは2つあり、資格証明はウォレットzipファイルの両方で使用できます。

どちらのオプションでも、2つのドライバプロパティーを設定します

oracle.net.ssl_server_dn_match=true
oracle.net.ssl_version=1.2  (this should be required only for the 12.x driver)

最初のオプションは、Oracle自動オープンSSOウォレット cwallet.oraを使用することです。このウォレットの使用は、データベースへの双方向SSL接続の情報を提供することです。ウォレットを使用してデータベース・ユーザー/パスワード資格証明を含めることと混同しないようにして、データソース記述子から削除してください。このオプションを使用する場合、設定する必要があるドライバ・プロパティは、ウォレットがあるディレクトリへのoracle.net.wallet_location(変数wallet_location)のみです。

2つ目のオプションは、Java KeyStore(JKS)ファイルtruststore.jksおよびkeystore.jksを使用することです。このオプションでは、javax.net.ssl.keyStoreType、javax.net.ssl.trustStoreType、javax.net.ssl.trustStore、javax.net.ssl.trustStorePassword、javax.net.ssl.keyStore、および javax.net.ssl.keyStorePasswordのドライバ・プロパティーを設定する必要があります。また、パスワード値が暗号化文字列として格納されていることも確認する必要があります。

WebLogic ServerデータソースでのJavaでのSODAの使用

WLS環境でSODAを使用して開発するには、orajsoda jarをクライアントのCLASSPATHまたはAPIが使用されているサーバーPRE_CLASSPATHに追加する必要があります。次に例を示します。

export CLASSPATH=”$HOME/orajsoda-1.1.7.jar:$CLASSPATH”

これは、WebLogic ServerのCLASSPATHを設定した後に実行されます。

アタッチされたプログラムは、JNDIからデータソースを取得し、接続に対して操作を実行するクライアント・プログラムです。コードはサーバー・アプリケーションでも同様です。

WebLogic 12.2.1.4.0にはJSON-PのJEE7バージョンがありますが、SODAではJEE8バージョンが必要であるため、プログラムはdoc.getContentAs()の実行時にjavax.json.JsonObjectのかわりにoracle.sql.json.OracleJsonObjectを使用します。

前述のSQLツールと同様に、SODAまたはSQLを使用してJSONドキュメントにアクセスできます。アタッチされたプログラムは両方を行います。

添付されたプログラムのコードはここにあります。名前をJSONTest.javaに変更します。

次に、プログラムを実行したときの出力を示します。

javac JSONTest.java
java -cp “$CLASSPATH:.” JSONTest
Using SODA
 name: Steve     salary: 100000  job: programmer
 name: Tom       salary: 800000  job: programmer
 name: Susan     salary: 120000  job: Manager
Using SQL serialized document
{“name”:”Steve”,”job”:”programmer”,”salary”:100000}
{“name”:”Tom”,”job”:”programmer”,”salary”:800000}
{“name”:”Susan”,”job”:”Manager”,”salary”:120000}
Using SQL columns
 name: Steve     salary: 100000  job: programmer
 name: Tom       salary: 800000  job: programmer
 name: Susan     salary: 120000  job: Manager