【Oracle】【性能】SQL_ID指定でトレースを設定する方法今日はOracle製品に含まれる機能を使って、モバイルデバイスの機能を利用するモバイルアプリケーション(具体的には、簡単な日記アプリケーション)を作るお作法をまとめてみました。
http://blog.livedoor.jp/y_db_y/archives/2013-12-21.html
必要なもの
- Oracle Database + Oracle Database Application Express(以下、APEX)
- Oracle JDeveloper 11.1.2.4
- 各プラットフォームのSDK
JDeveloper 11.1.2.4は、Oracleのモバイル向け開発フレームワークであるADF Mobileを開発するためのIDE(統合開発環境)です。このADF MobileがOSの違いを吸収し、Android、iOS上で動作するモバイルアプリケーションを作成することができます。UIの開発はJSF2ライクなADFを使って開発できますが、このエントリでは、APEXのUIを表示することにします。
なお、あみゅーさん(@amyu_san)がAndroidからJDBCでOracle Database 12cに接続したい、と仰有っていましたが、ADF MobileではJavaコードを実行することができますので、JDBCで接続するようなコードを書いてみる、なんてことも可能です。
Android と Oracle の仲直り(あみゅーの奮闘記)
http://orclemast.blog.fc2.com/blog-entry-315.html
(こっそり)
ロジ子としては、WebLogic ServerやGlassFishのようなアプリケーションサーバー、Coherenceのような分散キャッシュを使うことを推奨しますが、今回は「簡単に」作ることを意図しているので、このような構成にしています。実際に運用することを考慮すれば、セキュリティ要件も考慮する必要がありますので、「あー、こんな感じで作れるんだ」ぐらいに感じてもらえれば。
JDeveloper 11.1.2.4をダウンロード・インストールする
OTNからダウンロードするのですが、12cや11gR1 (11.1.1.7)用のJDeveloperではADF Mobileを使った開発ができませんので、ご注意ください。Mac OSXへのインストールはちょっと追加作業が必要なので、詳しくは以下のWikiを参考にして下さい。Oracle ADF Mobile Mac Installation Guide
https://wikis.oracle.com/display/jdeveloperandadf/Oracle+ADF+Mobile+Mac+Installation+Guide
Android SDK、XCodeをインストールしておく
動作させたいプラットフォームのSDKを用意しておきましょう。動作保証済みのバージョンをお使い下さい。APEXでMobile Webアプリケーションを作る
前述の通り、APEXにはモバイルWebアプリケーションを作成するための機能が備わっています。作り方はデスクトップWebアプリケーションと同じですが、UIのスキンをモバイルWebアプリケーション用に変更しましょう。あと、もう1点注意が必要な箇所があります。日本語でAPEXを利用している場合、次のようなエラーが出てモバイルアプリケーションを作ることができない場合があります。スクリーンショットからもわかるように、日本語環境で作成すると、DISPLAY_NAMEが30Byteを超過してしまうという
モバイルデバイスの機能を使えるようにする
今回は、カメラで撮影した写真をデータベースにUpしたいのですが、ここで3つの方法があります。- PhoneGap(Cordova)のライブラリをAPEXに組み込む
- ローカルHTMLのIFRAME内でAPEXのWebページを表示し、クロスドキュメントメッセージングを使ってイベントをADF Mobileに伝播する
- ADF MobileでリモートHTMLを表示し、www/js/base.jsライブラリを参照する<script>タグを使う
2はローカルHTMLに対しイベントを発行し、その結果を受け取る、というものです。IFRAME内のWebアプリケーションからは以下の方法でメッセージを送信することができます。<script> (function loadCordova() { //User Agentを小文字にして比較 var uagent = navigator.userAgent.toLowerCase(); if (uagent.search("android") > -1) { document.write('<script src="#WORKSPACE_IMAGES#cordova.android.js" type="text/javascript">' + '<//script>'); } else if (uagent.search("iphone") > -1) { document.write('<script type="text/javascript" ' + 'src="#WORKSPACE_IMAGES#cordova.ios.js">' + '<//script>'); } })(); </script>
ローカルHTMLファイルには、イベントリスナーを登録しておき、メッセージを受け取ったあと、Cordova APIを呼べるようにしておきます。window.parent.postMessage({data: "yourData"}, "file://"); iframe.parent.postMessage({data: "rad"}, "http://yourdomain.com");
3は、リモートURLをadfmf-feature.xmlに登録、ホワイトリストを設定するというもので、カメラを使うためのJavaScriptコードはAPEXに記載します。具体的にはADF Mobileのドキュメントにも記載されています。一番設定の手間が少ないので、こちらを利用されることをお勧めします。window.addEventListener("message", function(event) { // 期待する送信元からのイベントかどうかをチェックする if (event.origin == url) { // メッセージの処理コードを追加 } });
Oracle® Fusion Middleware Oracle Application Development Frameworkモバイル開発者ガイド 11g リリース2 (11.1.2.4.0)1〜3のいずれも、あとはCordova APIを呼び出すだけです(2はイベントリスナーを実装する必要がありますが)。例えばこんなJavaScriptを作り、ボタンにバインドすれば、デバイスのカメラで写真を撮ることができます。
リモートURL実装によるApache Cordovaへのアクセスの有効化の概要
http://docs.oracle.com/cd/E48694_01/doc.111240/b70750/remoteurl.htm#BABCIBHE
その後、この写真をデータベースにアップロードすればいいですね。アップロードはAPEXのJavaScript APIを使ってもいいですし、プロシージャを作成してアップロードしてもよいでしょう。できたアプリはこんな感じです。function capturePhoto() { // カメラで撮影した写真をBase64エンコードで読み出す navigator.camera.getPicture(onPhotoDataSuccess, onFail, { quality: 50, destinationType: destinationType.DATA_URL });} // 写真の読み取りに成功した場合 function onPhotoDataSuccess(imageData) { // console.log(imageData); // イメージ要素を表示 $("#smallImage").css("display", "block"); // 撮影した写真を表示 $("#smallImage").attr("src", "data:image/jpg;base64," + imageData); // イメージデータをコピー staticImg = imageData; } // 何かおかしなことが起きた場合 function onFail(message) { alert('Failed because: ' + message); console.log('Failed because: ' + message); }
いかがでしょうか。案外簡単にできそうでしょ。
Oracleのツールだけでさらっとモバイルアプリを作ってみませんか。
明日は、 sh2nd さんのエントリです。
それでは、Happy Christmas!