【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>(functionloadCordova() {//User Agentを小文字にして比較varuagent = navigator.userAgent.toLowerCase();if(uagent.search("android") > -1) {document.write('<script src="#WORKSPACE_IMAGES#cordova.android.js" type="text/javascript">'+'<//script>');}elseif(uagent.search("iphone") > -1) {document.write('<script type="text/javascript" '+'src="#WORKSPACE_IMAGES#cordova.ios.js">'+'<//script>');}})();</script>
ローカルHTMLファイルには、イベントリスナーを登録しておき、メッセージを受け取ったあと、Cordova APIを呼べるようにしておきます。
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を使ってもいいですし、プロシージャを作成してアップロードしてもよいでしょう。できたアプリはこんな感じです。
functioncapturePhoto() {// カメラで撮影した写真をBase64エンコードで読み出すnavigator.camera.getPicture(onPhotoDataSuccess, onFail, {quality: 50,destinationType: destinationType.DATA_URL});}// 写真の読み取りに成功した場合functiononPhotoDataSuccess(imageData) {// console.log(imageData);// イメージ要素を表示$("#smallImage").css("display","block");// 撮影した写真を表示$("#smallImage").attr("src","data:image/jpg;base64,"+ imageData);// イメージデータをコピーstaticImg = imageData;}// 何かおかしなことが起きた場合functiononFail(message) {alert('Failed because: '+ message);console.log('Failed because: '+ message);}
いかがでしょうか。案外簡単にできそうでしょ。
Oracleのツールだけでさらっとモバイルアプリを作ってみませんか。
明日は、 sh2nd さんのエントリです。
それでは、Happy Christmas!
















