normalian blog

Let's talk about Microsoft Azure, ASP.NET and Java!

Web サイト上の JavaEE アプリからVPN経由で Oracle DB を参照する!

最近記載した以下の記事により、Web サイト上で Java EE のアプリケーションが稼働することは理解できたと思う。

しかし、これだけでは肝心のデータベースに接続する方法を記載していない。そのため、今回は仮想マシン上に Oracle DB を作成して Web サイトからデータを参照する方法を紹介する。

大枠の流れは以下になる。

  1. 仮想ネットワークとゲートウェイを作成する
  2. Azure 上に仮想マシンOracle DB を作成してセットアップする
  3. クライアント端末の NetBeansJavaEE のアプリケーションを作成する
  4. Web サイトと仮想ネットワークを VPN で接続する
  5. Web サイトを作成し、Tomcat EE をデプロイする

上記で作成されるアプリケーションの構成は以下になる。
f:id:waritohutsu:20150111034103p:plain

今回は上記の構成を目指した JavaEE アプリケーションを作成する。

仮想ネットワークとゲートウェイを作成する

まずは管理ポータルから仮想ネットワークを新規し、チュートリアル: サイト間クロスプレミス接続用の仮想ネットワークの作成を参考に「ゲートウェイの起動」までを参考にゲートウェイを作成する。以下のような画面になればOKだ。
f:id:waritohutsu:20150111034401p:plain

Azure 上に仮想マシンOracle DB を作成してセットアップする

仮想ネットワークとゲートウェイを作成した後、仮想ネットワーク上に配置する形で Oracle DB の仮想マシンインスタンスを作成する。このあたりについては私がちまちま情報を書くよりは Creating an Oracle Database 12c virtual machine in Azure を参照していただいた方がいいだろう。
こちらで注意が必要な点は三つだ。その一は Oracle Listener を立ち上げること(デフォルトだと立ち上がっていなかった)だ。こちらは以下を参考に管理ツールを弄れば簡単だろう。
f:id:waritohutsu:20150111034155p:plain:w400

その二は、Windows ファイヤウォールのポートを Oracle DB 向けにあけること(今回はオフにしたが、本番環境では 1521 ポートのみ有効にする)。
f:id:waritohutsu:20150111034222p:plain:w400

その三は、NetBeans 上でアプリケーションを開発するために Oracle DB のエンドポイントで 1521 をオープンにする。
f:id:waritohutsu:20150111034308p:plain:w400

クライアント端末の NetBeansJavaEE のアプリケーションを作成する

次に JavaEEのアプリケーションを作成する。まずは NetBeans 8.0.1 で JavaEE7 な CDI を利用する際の注意点 を参考にして JavaEE のアプリケーションを作成し、更に JavaEE の実行環境を Microsoft Azure の Web サイト上で稼働させる を参考に NetBeans に TomcatEE を導入する。

以上の下準備が済んだ後、NetBeasn 以下の画面より作成した JavaeEE アプリケーションから [新規接続] を選択する。
f:id:waritohutsu:20150111034957p:plain

ここからは以下の新規接続ウィザードが起動するので、Oracle Thin を選んで[次 >]を押下するが、ojdbc6.jar or ojdbc7.jar が存在しない場合は別途取得して[追加]ボタンからドライバファイルを追加する。
f:id:waritohutsu:20150111035302p:plain:w300f:id:waritohutsu:20150111035306p:plain:w300

また、Microsoft Azure 上に配置された Oracle DB への接続文字列を以下を参考に記載する。この際、Oracle の SID は「Azure 上に仮想マシンOracle DB を作成してセットアップする」にて自身で作成したものになるはずなのでご留意頂きたい。
f:id:waritohutsu:20150111035349p:plain:w400

最後にスキーマを選択するが、今回は伝統のある SCOTT スキーマのデータを参照したいので以下を参考に接続文字列の終了を確認する。
f:id:waritohutsu:20150111035400p:plain:w400

また、以下の様に ojdbc7.jar を WEB-INF/lib 以下の配置して、アプリケーションが Oracle DB に接続する準備をすること。
f:id:waritohutsu:20150111035542p:plain

次に、以下の画面から [新規]-[その他]メニューを選択し、[持続性]-[データベースからのエンティティ・クラス]を選択する。
f:id:waritohutsu:20150111035456p:plain:w300f:id:waritohutsu:20150111035500p:plain:w300

ここから以下のウィザードが表示され、SCOTT スキーマのテーブルを選択できるので、DEPT と EMP を療法選択する。
f:id:waritohutsu:20150111035632p:plain:w400

ウィザードから XHTMLJava クラスが全て自動生成されるので、この時点で一度ローカルで TomcatEE を起動して疎通を確認するといいだろう。

Web サイトと仮想ネットワークを VPN で接続する

こちらは新管理ポータルである https://portal.azure.com/ にアクセスし、以下の画面を参考に仮想ネットワークと接続する(この際、Web サイトが無料の構成では設定できない点に注意すること)。
f:id:waritohutsu:20150111035921p:plain

この際、仮想ネットワークのゲートウェイ作成が完了していないと以下のようなエラーメッセージがでるので注意してほしい。
f:id:waritohutsu:20150111040216p:plain

Web サイトを作成し、Tomcat EE をデプロイする

こちらについては JavaEE の実行環境を Microsoft Azure の Web サイト上で稼働させる を参照して TomcatEE をデプロイする。デプロイ前に、META-INF/persistence.xml を編集し、接続先を以下の様に仮想マシン上のローカルIPとする。

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="com.mycompany_MavenWebApp_war_1.0-SNAPSHOTPU" transaction-type="JTA">
        <jta-data-source>exampledb</jta-data-source>
        <exclude-unlisted-classes>false</exclude-unlisted-classes>
        <properties>
            <property name="javax.persistence.jdbc.driver"   value="oracle.jdbc.OracleDriver"/>
            <property name="javax.persistence.jdbc.url"      value="jdbc\:oracle\:thin\:@10.0.1.4\:1521\:example" />
            <!-- 
            <property name="javax.persistence.jdbc.url"      value="jdbc\:oracle\:thin\:@winoracledb12c.cloudapp.net\:1521\:example" />
            -->
            <property name="javax.persistence.jdbc.user"     value="SCOTT" />
            <property name="javax.persistence.jdbc.password" value="<password>" />
        </properties>
    </persistence-unit>
</persistence>

以下を実施した後、NetBeans で作成した war ファイルを Web サイト上の TomcatEE 上にデプロイしよう。正しくアプリケーションが動作していれば以下のようになる。
f:id:waritohutsu:20150111040600p:plain