David Chouのエントリ:Run Java with GlassFish in Windows Azure
http://blogs.msdn.com/b/dachou/archive/2011/01/17/run-java-with-glassfish-in-windows-azure.aspx
今日のTip Of The Day(TOTD)は、AzureでGlassFishを実行するための手順をご紹介します。
- 30日間無料のWindows Azureパスを入手しましょう。発行までに15日ほどかかりますので、それに応じて計画します。パス入手は http://www.windowsazurepass.com/ か、Dorisのエントリ(http://blogs.msdn.com/b/dorischen/archive/2010/12/13/free-windows-azure-platform-pass-no-credit-card-required-try-it.aspx )を参考に。
- ソフトウェアをダウンロードし、インストールします。
- Visual Studio Expressをダウンロードし、インストールします。
Visual Studio Expressのダウンロード:http://www.microsoft.com/express/Downloads/
- ISOイメージを簡単にマウントできるようなツールがあると簡単にインストールできます(例えば Virtual Clone Drive など)。
- Azure SDK and Toolsをダウンロード、インストールします。
Azure SDK and Tools : http://www.microsoft.com/downloads/en/details.aspx?FamilyID=7A1089B6-4050-4307-86C4-9DADAA5ED018&displaylang=en
"VCloudService.exe"がVisual Studioのプラグインで、Azure ToolsをVisual Studioに統合します。SDKはVisual Studioにない機能を提供しており、コマンドラインから実行したり、Compute Emulator、Storage Emulatorを使ったプロジェクトのテストができます(後述します)。
- IIS 7.0をWindows Vistaにインストールします(手順はこちら)
[訳注] Windows 7のIIS 7.5でも動作します。
- ”World Wide Webサービス”と”アプリケーション開発機能”、”.NET拡張機能”、”ASP.NET”をコントロールパネルで選択します(以下はWindows7のコントロールパネルの例)。
- 最新のWindows用JDK1.6 をダウンロードし、Windowsマシンにインストールします。
JDKのダウンロード: http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html
- GlassFish3.1 b40をダウンロードします。
最新のGlassFishのダウンロード:
http://dlc.sun.com.edgesuite.net/glassfish/3.1/promoted/latest-glassfish.zip
[訳注]筆者の執筆段階のバージョンですので、最新のものではバージョンが異なることがあります。
- インストールするファイルをAzureのBlobストレージサービスにアップロードします。アップロードするファイルは以下の通りです。
- GlassFishのZipファイル
- JDKのインストールZipファイル
- Azure Management Consoleを開いて、新しいストレージアカウントを作成します。
- Blobストレージに複数個のコンテナを作成し、アプリケーションはappsコンテナ、JDKインストーラはjavaコンテナに配置します。Azureストレージサービス管理ツールはNeudesic社の Azure Storage Explorer やCerebrata社の Cloud Storage Studio など色々ありますが、Cloud Storage Studioを利用しています。
[注意]これらのツールで新しいアカウントを作成する場合には、Azure Management Consoleで新しいストレージアカウントを作成し、アカウント資格情報には、プライマリアクセスキーとアカウント名を使います。
ここでは後のプロジェクトで指定しているアクセスキーと同じものを使っています。今回はGlassFish 3.1 build 40を使い、JDKをローカルPCにインストールして、Blobストレージにアップロードしました。別のオプションとしてJDKのサイレントインストールも可能です。
アップロード後のAzure Blog ストレージの状況を見てみましょう。下の2枚のスナップショットのうち、Azure Storage Explorerが上図、Cloud Storage Studioが下図です。接続を作成する際は"HTTPS"のチェックボックスを忘れずに。
- Visual Studioのプロジェクトを作成します。
- IDE内部からAzure Compute Emulator(ローカル環境でテストに使用)に後で作成するサービスパッケージをデプロイするため、管理者権限でVisual Studioを起動します。
- ”ファイル”>”新しいプロジェクト”からcloud-basedプロジェクトを作成します。
- 新しいワーカーロールを作成します。
”Worker Role”を選択し 名前を”GlassFishWorker”としておきます。
- MinimalJavaWorkerRole.zip を展開し、次のファイルを”JettyWorkerRole”からこの新規作成しているソリューションにコピーします。
- lib\ICSharpCode.SharpZipLib.dll
- Run.cmd
- Launch.ps1
http://blogs.msdn.com/b/mariok/archive/2011/01/05/deploying-java-applications-in-azure.aspx
コピー後のディレクトリ構成は以下のようになります。
- ”Launch.ps1”と”Run.cmd”を”名前を付けて保存”します。エンコードはUTF-8ではなく、”西ヨーロッパ(Windows)-Codepage 1252” とします。
- コピーしたファイルのプロパティを変更し、コンパイル、パッケージングのために出力ファイルにコピーできるようにします。ソリューションエクスプローラで、各ファイルを右クリックし、”プロパティ”を選択、”コピーしない”から”コピーする”に変更します。
- ”Launch.ps1”を編集し、2個の事前定義した関数はそのままで、以下のようにテキストを変更します。”jdk1.6.0_23.zip”はAzure BlobストレージにUpしたJDK6のZipファイルで、同様に”glassfish-3.1-b40.zip”はGlassFish 3.1のZipファイルです。
$connection_string = 'DefaultEndpointsProtocol=http;AccountName=YOUR-STORAGE;AccountKey=YOUR-KEY' # JDK $jdk = 'jdk1.6.0_23.zip' download_from_storage 'java' $jdk $connection_string (Get-Location).Path unzip ((Get-Location).Path + "\" + $jdk) (Get-Location).Path # GlassFish $glassfish = 'glassfish-3.1-b40.zip' download_from_storage 'apps' $glassfish $connection_string (Get-Location).Path unzip ((Get-Location).Path + "\" + $glassfish) (Get-Location).Path # Launch GlassFish .\jdk1.6.0_23\bin\java `-jar .\glassfish3\glassfish\modules\admin-cli.jar start-domain --verbose
- ”ServiceDefinition.csdef”ファイルのサービス定義を修正し、次の定義を追加します。
<Startup> <Task commandLine="Run.cmd" executionContext="limited"taskType="background" /> </Startup> <Endpoints> <InputEndpoint name="Http_Listener_1" protocol="tcp" port="80" localPort="8080" /> <InputEndpoint name="Http_Listener_2" protocol="tcp" port="8181" localPort="8181" /> <InputEndpoint name="Http_Listener_3" protocol="tcp" port="4848" localPort="4848" /> <InputEndpoint name="JMX_Connector_Port" protocol="tcp" port="8686" localPort="8686" /> <InputEndpoint name="Remote_Debug_Port" protocol="tcp" port="9009" localPort="9009" /> </Endpoints>
追加すると次のようになります。
なお、”HTTP_Listener_1”の外部向けポートは80ですが、ローカルポートは8080になっていますので注意してください。この設定で、外部からのリクエストは特にポート番号を指定しなくても受信できます。内部ではGlassFishが実行しているところでは8080にルーティングされます。その他はデフォルトのままです。 - Visual Studioからプロジェクトをデプロイします。完全な手順が以下のURLにありますので参考にしてください。関連するところをキャプチャしました。
- 新しいHosted ServiceをAzure Management Consoleを使って作成します。”New Hosted Serviceをクリックし、詳細情報を入力します。繰り返しになりますが、外部ポートとして80、リダイレクトされる内部ポートとして8080を設定しましたので、”glassfish-service.cloudapp.net:80”もしくは”glassfish-service.cloudapp.net”でリクエストを受け付け、準備したインスタンス上で動作するGlassFish 3.1 b40へリダイレクトされます。サービス名はデプロイしたサービスのURLになるので注意してください。
- ソリューションエクスプローラでプロジェクトを右クリックして、”発行”を選択します。準備されているデフォルトのOSWindows Server 2008 SP2となっているので、ServiceConfiguration.csdef 中の”osFamily”と”osVersion”という2個の属性を修正します。例えばosFamilyを2にするとWindows Server 2008 R2になるという具合です。
- 資格情報を指定します。
- ”Copy the full path”をクリックして、証明書をManagement Portalの”Management Certificates”の欄にコピーします。
- ”production”環境を選択します。
- オプションとして、後で準備したシステムを確認したい場合にはリモートデスクトップ接続を構成することができます。
詳細はこのURLを参照してください。注意点は以下の通りです。 - パスワードには大文字、小文字、数字、記号を含んでいる必要があります。エラー時にはメッセージは出ず、右側に赤いアイコンが現れます。
- 証明書のエクスポート
- 証明書作成後、”View...”>”Details”タブをクリックし、”Copy to file”ボタンを押すと生成した証明書をファイルにコピーできます。この証明書はManagement Portalにインポートする必要があります。
- ”Yes, export the private key”を選択していることを確認します。
- ”Delete the private key if the export is successful”を選択します。
- この証明書を(先ほどプロジェクトを発行した)Management Portalにアップロードします。このURLの”To upload a certificate using the management portal”を参考にしてください。
設定に失敗すると、以下のエラーが出ます。
There was no endpoint listening at https://management.core.windows.net/SUBSCRIPTION-ID/services/hostedservices/glassfish-service/deploymentslots/Production that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details. - ”Windows Azure Activity Log”にプロジェクトをAzureへデプロイしたときのログが表示されます。成功した場合のログがこちら。
”WebSite URL”にアクセスしてみましょう。
Webベースの管理コンソールも見ることができます。
もう一度、 David Chou に感謝の言葉を贈りたいと思います。この間ずっと助けてくれて、本当に感謝の念に堪えません。ありがとう。
将来のエントリのためにいくつかToDoをまとめておきます。
- Java EE 6アプリケーションをNetBeansで作成し、このインスタンスにリモートデプロイする
- このインストールを Azure Compute Emulator と Storage Emulator.を使ってローカルでやってみる
- Power Shell.を使ってLaunch.ps1スクリプトをデバッグする
- JPAを使ってSQL Azureのデータにアクセスする
- リモートデスクトップ接続でSOAPActionエラーをデバッグする
- JDKインストールのためのWindows Azure の VM Role 機能を使ってみる
- ServiceConfigurationが拡張可能か、このファイルの属性がJDK/GlassFishインストールをコントロールしてもらいたい。
- GlassFish 3.1クラスタをAzureクラスタやAzureロードバランシングと統合する
原文はこちら。
http://blogs.sun.com/arungupta/entry/ttod_155_glassfish_in_azure
0 件のコメント:
コメントを投稿