2013年12月 9日 (月)
JPOUG Advent Calendar 2013 、9日目のエントリー、かつ、チューニングネタではなく Java on OS X の話という変化球 :) です。
OS X版Oracle SQL DeveloperやOracle JDeveloperで、OCI/Thick JDBCを利用しようとして以下のようなメッセージに遭遇したら...みなさんどうしてるのだろう?
no ocijdbc11 in java.library.path
と考えだしたら眠れなくなったので、役に立つのか、たたないのかわからないけど書いておきます
私は、Oracle SQL DeveloperやOracle JDeveloperの起動シェルでDYLD_LIBRARY_PATHなどの環境変数をセットすることで対処しています。
(今となってはこれが楽だと思います。 environment.plistでなんとかできた時代もありましたけど...いまは使えないしね)
no ocijdbc11 in java.library.pathとなっている状態から解決するまでの操作をYouTubeで....
映像では、ユーザーのホームディレクトリーにOracle向け環境変数設定ファイル (この例では、oracleenvというファイルを作成してあります) を作成しておき、その設定ファイルをOracle SQL Developer等の起動シェルで読み込ませて問題を解決するまでの操作を行っています。
主演
MacBook Air (mid2013)
ホストOS、その他
OS X 10.9 Maveriks Oracle Instant Client 11g 11.2.0.3.0 for OS X (64bit) Terminal 2.4 VirtualBox 4.3.4 for OS X Oracle SQL Developer 4.0.0 for OS X Oracle JDeveloper12c 12.1.2.0.0 Studio Edition Generic
ゲストOS、その他
Oracle Linux Server 6.4 x86_64 Oracle Database 12c EE R1 for Linux x86_64
映像では見づらい方向けの解説。
事前にOracle向け設定ファイルを該当ユーザーのホームディレクトリーに作成しておきます。
この例では、oracleenvとして作成しました。(不過視ファイルとしてもよいかもしれません。)
Oracle SQL Developer 4.0 for OS X
「Oracle SQL Developerメニュー」→「Preference...」を選択
「データベース」→「拡張」→「OCI/Thickドライバの使用」チェックボックス」をチェック→「テスト」ボタンをクリック
no ocijdbc11 in java.library.pathエラーとなる(ライブラリーへのパスが通ってないので当然ですよね)
「Finder」→「アプリケーション」→「SQL Developer」→「右クリック」→ポップアップメニューの「パッケージの内容表示」
「Contents」→「MacOS」→「sqldeveloper.sh」を選択
ポップアップメニュー「このアプリケーションで開く」でお好きなテキストエティタを選択
oracle向け環境設定ファイルを読み込ませるように編集。この例ではユーザーホームディレクトリにある oracleenvというファイルを読み込むように変更。
Oracle SQL Developer 4.0を再起動しOCI/Thick JDBCドライバーで接続可能か再確認
Oracle JDeveloper12c 12.1.2.0.0 Studio Edition Generic
「データベース接続編集」ダイアログの「接続のテスト」ボタンをクリックするとno ocijdbc11 in java.library.pathエラー(これもパスが通ってないのが原因なので...)
「Finder」でOracle JDeveloper12cのインストールディレクトリーからアプリケーション「JDeveloper」を右クリック
→ポップアップメニューの「パッケージの内容を表示」を選択
「Contents」→「MacOS」→「JDeveloper」を選択して右クリック→「このアプリケーションを開く」でお好きなテキストエディタを選択
oracle向け環境設定ファイルを読み込ませるように編集。この例ではユーザーホームディレクトリにある oracleenvというファイルを読み込むように変更。
Oracle JDeveloper12cを再起動し、OCI/Thick JDBCドライバーで接続可能か再確認
明日は、@dekasasaki さんの担当です。引き続き、JPOUG Advent Calendar 2013 をお楽しみください。:)
| 固定リンク | 0
|
| トラックバック (0)
2013年2月 3日 (日)
2013年1月14日 (月)
2012年12月15日 (土)
きてた。
| 固定リンク | 0
|
| トラックバック (0)
2012年11月10日 (土)
以前は「アプリケーション」>「ユーティリティ」フォルダにあったけど、Javaのコントロールパネルはめでたく「システム環境設定」に移動しましたとさ。OS Xだとこの位置の方が自然だよね。
これでオッケー。
| 固定リンク | 0
|
| トラックバック (0)
2010年12月 5日 (日)
MacOS XのDeveloper ToolsのUtilitiesでJava VisualVMをたまたまクリックしたら…。
あら、こんなところでおめにかかるとはOracle Sun しっかりロゴが入れ替わっておりましたね :)
| 固定リンク | 0
|
| トラックバック (0)
2010年4月 6日 (火)
Googleさんいろいろやってくれます。あの3Dゲームをブラウザで! ですと! :)
HTML 5の機能を使いまくっているいるようで、いまのところSafariとChromeで動作するとのこと。
すごい。Quake 2のjavaのコードも見れるのね :).
http://code.google.com/p/quake2-gwt-port/
-以下抜粋-
In the port, we use WebGL, the Canvas API, HTML 5 <audio> elements, the local storage API, and WebSockets to demonstrate the possibilities of pure web applications in modern browsers such as Safari and Chrome.
| 固定リンク | 0
|
| トラックバック (0)
2010年2月27日 (土)
Javaのサイトが変り過ぎてて間違ったとこに来たかと勘違いしたw
| 固定リンク | 0
|
| トラックバック (0)
2010年1月30日 (土)
2009年5月16日 (土)
Java 2つ じゃないよ。東ティモールのフェアトレードコーヒー2つ だよ。@カフェフロンティア
という前置きは置いといて、 Oracle Japanさんからの新たなNews Letterが届いたので見てみたら第二回 WebLogic Server勉強会開催 ・・・・・の情報が・・・・・ 申し込んでおくかとクリックしてみたら。。。既に満席でした。
| 固定リンク | 0
|
| トラックバック (0)
2009年4月10日 (金)
でもやっぱり、Java のカップに見えちゃう。
| 固定リンク | 0
|
| トラックバック (1)
2009年3月30日 (月)
Oracle JDeveloper 11gのQuickStartからオンラインマニュアルへジャンプできなくても大した問題ではないのですが・・・とりあえず書いときます。 QuickStartからオンラインドキュメントへジャンプできるようになっているようなのだが、クリックすると、「ブラウザが見つかりません」と言われ、「了解」ボタンをクリックすると開く「ブラウザ選択」でSafariを選んでも「ブラウザが見つかりません」と言われる。ン〜〜。という状態、QuickStartにはPerferenceも無いようなのでFirefoxで試すことはしてない・・・面倒なのとQUickStartから開けなくても困らないから。というの理由で。
| 固定リンク | 0
|
| トラックバック (0)
2009年3月27日 (金)
PowerMac G5 + Java SE6.0 DP1 de Oracle JDeveloper 11gとOracle Weblogic Server 10.3をインストールしちゃうぞ〜の最終回。
前回はJDeveloper 11gを起動して超簡単な動作確認まで だった。 今回はBEA Weblogic Server改めOracle WebLogic Server 10.3のコンフィギュレーションから起動確認までQuickStartから「Oracle ADFのドメインコンフィギュレーション」をクリック (2009/4/11画像が間違っていたので入れ替えた) 見慣れない(当然ですが)スプラッシュが..
| 固定リンク | 0
|
| トラックバック (0)
2009年3月26日 (木)
PowerMac G5 + Java SE6.0 DP1 de Oracle JDeveloper 11gとOracle Weblogic Server 10.3をインストールしちゃうぞ〜の続きです。
前回はJDeveloper 11gをインストールしてQuickStartが起動したところまでだった。今回はそのつづきでインストールしたJDeveloper 11gを起動し、JDeveloper 10gで作成したProjectを取込むところまでを確認しておく。 「JDeveloper 11g の起動」をクリック
| 固定リンク | 0
|
| トラックバック (0)
2009年3月25日 (水)
PowerMac G5 + Java SE6.0 DP1 de Oracle JDeveloper 11gとOracle Weblogic Server 10.3をインストールしちゃうぞ〜の続きです。
前回はローカルJDKをInstallerが認識できるようにした ところまでだった。
今回はそのそのつづき。 JDeveloper 11gのインストールからQuickStartが起動するまで。
JDKを認識したので「次へ」ボタンをクリックしてインストール開始
あとは終了まで、暫し待つ・・・
「QuickStart実行」チェックボックスをチェックして「完了ボタン」をクリック。
Installerが終了するとQuickStartが起動する。
うまくインストールできたようですね。 次回は、インストールしたJDeveloper 11gを起動してみる。ということでつづく。。
バックナンバー ・Oracle JDeveloper 11g (Build 5188) - with Oracle WebLogic Server 10.3 - #1 ・Oracle JDeveloper 11g (Build 5188) - with Oracle WebLogic Server 10.3 - #2
| 固定リンク | 0
|
| トラックバック (0)
2009年3月24日 (火)
PowerMac G5 + Java SE6.0 DP1 de Oracle JDeveloper 11gとOracle Weblogic Server 10.3をインストールしちゃうぞ〜の続きです。
前回はOTNからJDeveloper 11g Studio Edition (Base Install For all the platforms without JDK 6)を入手したところまでだったので、今回はOracleあたらしいインストーラ?!(どうもBEAさんのものをベースにしたみたい・・・インストーラを起動するとcom.bea・・・と表示されるし)を起動するところまで。 ということで早速取りかかる..
・ダウンロードしたJDeveloper 11g installのjarファイル
ファインダーからアプリケーション→ユーティリティ→Java→Java SE 6→Java Preferenceを起動し、Java Application Running SettingでJava SE 6が一番上に来ていることを確認。(このようになっていないとダブルクリックでは起動できないのでご注意を。)
Java SE 6.0 PD1のJava PreferenceのJava Application Running Settingだけではshell上のパスまでは変更してくれないので、手動でJDKへのパスをJava SE 5.0からava SE 6.0へ変更しちゃいます。(PowerPC版のMacOSXではJava SE 6は正式にはリリースされていないので面倒なのは仕方ないですね。) シンボリックリンク CurrentJDKが1.5を指してしるので1.6に切り替えちゃいます。これでJava SE 6.0 DP1が動きます。
G5Server:˜ discus$ cd /System/Library/Frameworks/javaVM.framework/Versions G5Server:/System/Library/Frameworks/javaVM.framework/Versions discus$ ll total 48 lrwxr-xr-x 1 root wheel 5 Sep 25 21:27 1.3 -> 1.3.1 drwxr-xr-x 8 root wheel 272 Jul 21 2005 1.3.1 lrwxr-xr-x 1 root wheel 5 Sep 25 21:27 1.4 -> 1.4.2 drwxr-xr-x 8 root wheel 272 Jul 21 2005 1.4.2 lrwxr-xr-x 1 root wheel 5 Sep 25 21:27 1.5 -> 1.5.0 drwxr-xr-x 9 root wheel 306 Mar 17 19:54 1.5.0 lrwxr-xr-x 1 root wheel 5 Jul 21 2007 1.6 -> 1.6.0 drwxr-xr-x 10 root wheel 340 Mar 24 10:30 1.6.0 drwxr-xr-x 6 root wheel 204 Mar 17 19:53 A lrwxr-xr-x 1 root wheel 1 Sep 25 21:27 Current -> A lrwxr-xr-x 1 root wheel 3 Mar 24 10:32 CurrentJDK -> 1.5 G5Server:/System/Library/Frameworks/javaVM.framework/Versions discus$ java -version java version "1.5.0_16" Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_16-b06-275) Java HotSpot(TM) Client VM (build 1.5.0_16-132, mixed mode) G5Server:/System/Library/Frameworks/javaVM.framework/Versions discus$ ll total 48 lrwxr-xr-x 1 root wheel 5 Sep 25 21:27 1.3 -> 1.3.1 drwxr-xr-x 8 root wheel 272 Jul 21 2005 1.3.1 lrwxr-xr-x 1 root wheel 5 Sep 25 21:27 1.4 -> 1.4.2 drwxr-xr-x 8 root wheel 272 Jul 21 2005 1.4.2 lrwxr-xr-x 1 root wheel 5 Sep 25 21:27 1.5 -> 1.5.0 drwxr-xr-x 9 root wheel 306 Mar 17 19:54 1.5.0 lrwxr-xr-x 1 root wheel 5 Jul 21 2007 1.6 -> 1.6.0 drwxr-xr-x 10 root wheel 340 Mar 24 10:30 1.6.0 drwxr-xr-x 6 root wheel 204 Mar 17 19:53 A lrwxr-xr-x 1 root wheel 1 Sep 25 21:27 Current -> A lrwxr-xr-x 1 root wheel 3 Mar 24 10:32 CurrentJDK -> 1.5 G5Server:/System/Library/Frameworks/javaVM.framework/Versions discus$ sudo rm CurrentJDK G5Server:/System/Library/Frameworks/javaVM.framework/Versions discus$ sudo ln -s 1.6 CurrentJDK G5Server:/System/Library/Frameworks/javaVM.framework/Versions discus$ cd G5Server:˜ discus$ G5Server:˜ discus$ java -version java version "1.6.0-dp" Java(TM) SE Runtime Environment (build 1.6.0-dp-b88-34) Java HotSpot(TM) Core VM (build 1.6.0-b88-17-release, interpreted mode) G5Server:˜ discus$
ということで、jdevstudio11110install.jarをダブルクリックしてinstallerを起動! お〜〜起動しました〜〜パチパチ。
あとはインストーラの指示にしたがいクリックしていくだけ。 (この例ではOracle MIddleware Home Directoryを/Volumes/DiscusWork/Development/Oracle/Middlewareにしてあります。)
ん、ん、あれ〜、Java Perference及びJava SE 6.0 DP1へのパスを変更したのにJDKが見えないとでますね〜。
あ〜、忘れてました。これはRelease Note に書かれていた既知の問題の一つですね。 Release NoteにはClasses.jarとrt.jarへシンボリックリンクを張るように記載されていますが、この例では山本祐介さんのWebLogic Server 10g Release 3 を Mac OSX にインストール で紹介されている方法で対処しました。
G5Server:˜ discus$ cd /System/Library/Frameworks/javaVM.framework/Versions/CurrentJDK/Home G5Server:/System/Library/Frameworks/javaVM.framework/Versions/CurrentJDK/Home discus$ ll total 8 drwxr-xr-x 42 root wheel 1428 Jul 21 2007 bin lrwxr-xr-x 1 root wheel 10 Jul 21 2007 include -> ../Headers drwxr-xr-x 38 root wheel 1292 Mar 17 19:56 lib drwxr-xr-x 24 root wheel 816 Jul 21 2007 man G5Server:/System/Library/Frameworks/javaVM.framework/Versions/CurrentJDK/Home discus$ sudo mkdir jre Password: G5Server:/System/Library/Frameworks/javaVM.framework/Versions/CurrentJDK/Home discus$ sudo mkdir jre/lib G5Server:/System/Library/Frameworks/javaVM.framework/Versions/CurrentJDK/Home discus$ sudo touch jre/lib/rt.jar G5Server:/System/Library/Frameworks/javaVM.framework/Versions/CurrentJDK/Home discus$ sudo touch jre/lib/core.jar G5Server:/System/Library/Frameworks/javaVM.framework/Versions/CurrentJDK/Home discus$
前述の対処でローカルJDKを認識したようですね。ただし、unknown JDK :)
次回へつづく。。。
バックナンバー ・Oracle JDeveloper 11g (Build 5188) - with Oracle WebLogic Server 10.3 - #1
| 固定リンク | 0
|
| トラックバック (0)
2009年3月23日 (月)
Oracle JDeveloper 11g (Build 5188) - Base Install (For all the platforms without JDK6.0 で、Oracle JDeveloper11g にOracle WebLogic Server 10.3がバンドルされリリースされていたのでいままで使っていたJDeveloper10gと入れ替えてみた。 尚、 MacOSX 10.4.11 Tiger/PowerPC G5かつ今は多分入手できないんじゃないかと思うけどPowerPC/MacOSX Tiger向けJava SE6.0 Developer Preview 1という環境なので、ちょっとした確認なら使えない事もないかな〜ぐらいの軽い気持ちで使うのが吉ですよん。たぶん。 Java SE6.0 DP1を使うので。 (あ、そうそう、Intel版の64bit環境かつMacOSX 10.5 Leopardはすんなり出来そうなので後日。)
尚、MacOSXへインストールする際の注意があるので事前に把握しておくといいですよ。
・JDeveloper 11g Release Notes ・Installing JDeveloper on Mac OS それと山本祐介さんのWebLogic Server 10g Release 3 を Mac OSX にインストール の記事も参考にさせて頂いた。
まずは今回の環境から:
・H/W : Apple PowerMac G5 Dual 2.7Ghz RAM 3GB ・OS : MacOSX 10.4.11 Tiger Server(Serverである必要はないですよ。) ・JDK : Java SE 6.0 Developer Preview 1 という環境へOracle JDeveloper 11g とOracle WebLogic Server 10.3をインストールする。 OTNからOracle JDeveloper 11g Studio Edition (Base Install
For all the platforms without JDK 6)をダウンロードする。 ながくなるので次回へつづく。
| 固定リンク | 0
|
| トラックバック (0)
2008年12月 4日 (木)
Sun Tech Days 2008 in Tokyo 2日目 は(J)Ruby and Railsにだけ。JRuby関連で知らなかったことと知っているところ半々 という内容だったので今後の参考になる内容だった、私にとってはいろいろな遊びのネタになりそう。 ところで、Sunの方のMac率、かなり高いよね。GoslingからしてMacBookだし(^^)
頂いたノベルティは「ブログ de ノベルティ」にて。
| 固定リンク | 0
|
| トラックバック (0)
2008年12月 3日 (水)
今日はSun Tech Days 2008 in Tokyo 1日目に行って来た。 受講セッションは、Key note、Java SE 6 Update 10 and Deployment、Java Persistence APIs そしてなぜかレセプションも。というのも、うちの奥さんがレセプションの終わり頃なら帰れるよん。というメールをくれたので、うちの子供を連れて行けばレセプションへ参加できる状況になったから。(子育て中の身では時間調整やらなんやらで、こちらの思う通りにはなかなか出来ないのだが、子育ての負荷分散に貢献している妻にも感謝。ベコリ) そんな苦労などおかまいなしの息子は、展示会会場のSun方たちに愛想振りまいて大はしゃぎ。うちの息子は基本的に人見知りしないので・・・相手の顔をじ〜〜〜〜〜っと見てから、ニッコリ。最近はその次に何故かニコニコしながら拍手を始めます。(場の雰囲気作りが上手いのは息子の特技のようです。w)
余計な話が多くなったのでこの辺で・・ いつものように頂いたノベルティは「ブログ de ノベルティ 」にて。
追記: そういえばSun Tech Daysに中学生が参加していたなぁ。 私はうちの子供に気を取られて話すチャンスなかったけどレセプションで目の前を歩いてたっけ。 将来、この業界で仕事しちゃう少年かもね
あ、忘れてた。VirtualBoxの話をブースで聞いたこともあり少々遊んでみたくなった。NetBeans6.5も良さげなのでそれも後であそんでみようかと・・
何故アナグリグ? D-Traceで取得した情報をJMonkey Engine を利用して3Dで可視化するデモの為だったんです。個人的にはJavaFXの高速デモの方が面白かったのですがね。
Goslingさんのプレゼン。前の方の頭が見切れて上手く撮影できず。そしてお約束のT-シャツ。しかしゲットできず。
レセプションの軽食の一部。。。
さて妻も六本木に着いたようなので帰宅しますか〜
ここ最近、子育ての負荷分散を妻と実践?実験?しているのだが、実際にやってみると、地下鉄のエレベータもまだまだ未整備なことが気になったりいろいろ気付くことは多い。そういえば、この手のこのコンファレンスに参加しているエンジニアの方々にも小さい子供を育てているおとうさん、おかあさんは沢山いると思うので、子育て中のおとうさん、おかあさん応援セッションみたいな枠があってもいいんじゃないかと。 その時間帯とその前後くらいの時間は託児ルームも開設してあったら便利かも・・・と勝手に想像してたりして。
| 固定リンク | 0
|
| トラックバック (0)
2008年9月20日 (土)
2008年4月22日 (火)
前回、つまらないところでモタモタしてしまった が、Oracle Application Express 3.0.xを使わず、単純に mod_plsql を使えばいいじゃんと言うことで。。。。
Level17は、以前にも書いたがWeb Applicationを書いたことのある人なら簡単に解けると思います。 今回は一部を除き、約90%がPL/SQL、残りをJava stored procedureで処理した。;) ということで答えを導きだしたスクリーンショット。(答えはぼかしてますよ!)
次回、Python Challenge Level 18はこれまた気が向いたときにても。。。Enjoy Python Challenge!
| 固定リンク | 0
|
| トラックバック (0)
2008年4月14日 (月)
megawattさんのブログ は見ていたものここ数日コメント欄までは見ていなかったよ。megawattさんが忙しいのは知ってたけどメールくれれば調べといたのに〜。 :)
megawattさんのブログの日本の借金時計は私のブログ内にあるアプレット を呼び出しているだけですから。
ということで調べてみた。 おかげで、何ヶ月か振りでWindowsを起動しちゃったよ。(笑
結論から言うと、Java SE6.0 update 5のバグっぽい。
試してみたところWindows XP SP1(32bit)にJ2SE5.0のJREのみインストールしてある場合にはIE6、FIrefox2、Safari3.1とも特に問題もなくapplet動作する
次に、J2SE5.0をアンインストールした後にJavaSE6.0のJREのみインストールし、IE6、FIrefox2、Safari3.1でappletを起動してみると、IE6以外はappletが正しく動作せず、Firefox2やSafari3.1ではその後挙動があやしくなりHang upしたり、強制終了すると起動しなくなったりと散々な結果になった。IEはやはり動きが特殊なのなかぁ。 以下、その時のスクリーンショット。
それは置いといて、JavaSE6.0でappletを動作させる方法は、このブログに書かれていた。(ありがとうございます) ので早速試してみると、お〜〜お見事! 回避できた。
ちなみに、MacOSXではJavaSE6.0はPreview ReleaseのままですがWindowsのコントロールパネルと違い、Appletを実行するjavaのversionを簡単に切り替えられる。 とは言ってもMacOSX版では今のところ今回のような問題は起きていない(ようだ)。
ちなみに、MacOSX 10.4.11 PowerPC G5ではOpera9.25/Safari3.1/Firefox2.0.0.13ともOKだった。
| 固定リンク | 0
|
| トラックバック (0)
2008年4月13日 (日)
さて、前回、解き方は見えたような気がすると書いたが いろいろな罠?に見事に引っかかったが解けました。はい。 今、Level18の問題が見えたのだが、また画像問題なのかな?
Level17は、Web Applicationを作った経験のある方ならLevel17の質問の画像自体がヒント。 なんですが、2重、3重の仕掛けがあるのでイライラするよ。ですが、基本的にはいままでの問題を解いてきたテクニックやコードを再利用すれば十分なので特に新しいことが必要でもない。。。
ということで、次回のPL/SQL で Python ChallengeはLevel17のヒントにならないヒント。でLevel17を締めくくろう。
以下のスクリーンショットは、最後の仕掛けを通り抜ける為のヒントを取り出す事に成功した場面。Level18のURLを導きだした時のスクリーンショットではありません。:)
| 固定リンク | 0
|
| トラックバック (0)
2008年3月26日 (水)
さて、ココログのデータベースのデフラグ?作業 でログインできなかったので今書いてますが。 Level 17、少々ハマったが解き方は見えた(ような気がする)ので次回はその経過でも。 Level 17は、Web Applicationを作った経験のあるかたなら案外すんなり解けるかもしれない。
問題の画像にそのすべてのヒントが!
Enjoy! Python Challenge! (Python じゃなくても楽しめるのだ!)
| 固定リンク | 0
|
| トラックバック (0)
2008年3月24日 (月)
前回の続きです
さて、Level 16のページには、"let me get this straight" というタイトルが付けられている。これ自体が大きなヒント。なのでこれ以上は何も言うまい。
問題の解くjavaアプリケーションの内容は、以前、Level 11の処理の流れを書いていたが、その3、4以外の部分は同じ。 但し、Level7で利用した Level7.getBfile()とLevel9で作成したLevel9.writeImageFile()というファンクションとプロシージャを以下のPL/SQLパッケージに纏めた。
CREATE OR REPLACE PACKAGE PYTHONCHALLENGE_UTL AS FUNCTION getBfile ( i_dir_name IN VARCHAR2, i_file_name IN vARCHAR2 ) RETURN BFILE; PROCEDURE writeImageFile( directoryName IN VARCHAR2, fileName IN VARCHAR2, srcImage IN OUT NOCOPY BLOB ); END PYTHONCHALLENGE_UTL; CREATE OR REPLACE PACKAGE BODY PYTHONCHALLENGE_UTL AS FUNCTION getBfile ( i_dir_name IN VARCHAR2, i_file_name IN VARCHAR2 ) RETURN bfile AS v_file BFILE; BEGIN v_file := BFILENAME(UPPER(i_dir_name),i_file_name); RETURN v_file; END getBfile; PROCEDURE writeImageFile( directoryName IN VARCHAR2, fileName IN VARCHAR2, srcImage IN OUT NOCOPY BLOB ) IS file utl_file.file_type; BEGIN file := UTL_FILE.FOPEN(UPPER(directoryName), fileName, 'w', 32767); DBMS_LOB.OPEN(srcImage, DBMS_LOB.LOB_READONLY); DECLARE v_raw RAW(32767); amount INTEGER; offset INTEGER; BEGIN offset := 1; LOOP amount := 32767; DBMS_LOB.READ(srcImage, amount, offset, v_raw); UTL_FILE.PUT_RAW(file, v_raw, true); offset := offset + amount; END LOOP; EXCEPTION WHEN no_data_found THEN NULL; WHEN OTHERS THEN UTL_FILE.FCLOSE(file); DBMS_LOB.CLOSE(srcImage); RAISE_APPLICATION_ERROR(-20001, sqlerrm()); END; UTL_FILE.FCLOSE(file); DBMS_LOB.CLOSE(srcImage); END writeImageFile; END PYTHONCHALLENGE_UTL; /
上記のパッケージをJava Stored Procedureから利用するわけです。javaのソースコードは載せませんよ。ネタバレになっちゃいますから。
次に、デプロイしたjava classは以下のようにしてJava Stored Procedureとして定義します。
CREATE OR REPLACE PACKAGE LEVEL16 AS FUNCTION getResult RETURN NUMBER AS LANGUAGE JAVA NAME 'jp.macdeoracle.Level16.getResult() return java.lang.boolean'; END LEVEL16;
では、SQL*Plusから実行してみましょう!
Last login: Sun Mar 23 20:29:41 on ttyp2 Welcome to Darwin! G5Server:˜ discus$ ssh oracle@corydoras oracle@corydoras's password: Last login: Sun Mar 23 20:31:49 2008 from 192.168.1.19 [oracle@corydoras ˜]$ cd python_challenge [oracle@corydoras python_challenge]$ ll 合計 264 -rw-r--r-- 1 oracle oinstall 254006 3月 23 16:26 level16.gif [oracle@corydoras python_challenge]$ sqlplus /nolog SQL*Plus: Release 11.1.0.6.0 - Production on 日 3月 23 20:58:34 2008 Copyright (c) 1982, 2007, Oracle. All rights reserved. > conn scott/tiger 接続されました。 SCOTT> l 1 select 2 case 3 when level16.getResult() = 1 then '成功!' 4 else '失敗!' 5 end as "Level16" 6* from dual SCOTT> / Level16 --------- 成功! SCOTT> !ls -l 合計 504 -rw-r--r-- 1 oracle oinstall 254006 3月 23 16:26 level16.gif -rw-r--r-- 1 oracle oinstall 239515 3月 23 21:02 level16_result.png SCOTT>
これだけでもかなりのヒントになっているような気もしますが。。。 MacOSXのChicken of the VNC(MacOSX向けのVNC Client) 経由でLinux(CentOS5)にある結果を確認!
ということで、Python Challenge Level 16完。 Level 17は気が向いたら載せると思います。 Enjoy Python Challenge!
| 固定リンク | 0
|
| トラックバック (0)
2008年3月23日 (日)
そう、あれは、このブログをはじめたころ、Oracle10g R1 for MacOSX ServerとPL/SQL(画像処理関係はjava stored procedure)を利用し、Python Challengeに PL/SQLでチャレンジしていたっけ〜〜。遠い目。
アクセスログを見ていたら最近、またPython Challenge のキーワード検索が多くヒットしているのにびっくり!。 前述のエントリを書いていたのが約2年半前になるわけですから! ということで、久々にちょっとだけ再開してみようかと。。Level 16を見てみる。
Level 16の問題の画像を見ると、いかにもわざとらしい柄というか模様が目につく!。
で、Level 16のページタイトルもいつものようにヒントになっている。
画像にある模様を眺めつつ、ページタイトルの英文(簡単な英文です)を読み試しにJavaだけで作ってみると、考え方はいいと思うのだが全然答えにはなっていない。。。
こうか? ん、、、、それとも、こうか? でも違う。 あ、横にしてたよ。。。あはは。。(^^;;
と独り言を言いつつ何とか答えを見つけました。。は〜〜っ。暫くぶりだと疲れるわ。
次回は答えは書きませんが、Level 16の結果をぼかしたスナップショットを載せる予定。
ちなみに、今回の環境は以下。Database Server : Oracle11g R1 EE for Linux x86
開発用クライアント:JDeveloper10g 10.1.3 for MacOSX Oracle SQL Developer 1.1.3 for MacOSX (Java Stored Procedure、PL/SQL package、Java関連で利用した)
準備が整ったらMacOSXからsshでLinuxのOracle11gへ接続して実行! 結果確認は、MacOSXのVNCからLinuxへ接続して確認するという面倒なことまでしてMacを絡めている。 (Mac de Oracle ですから! 笑)
尚、以前のように、なるべくPL/SQLやSQLレベルで問題を解いて行くがPL/SQLやSQLでは不可能な処理はJava stored procedureで行う。Level 16もLevel14 と同じような処理になっている。
| 固定リンク | 0
|
| トラックバック (0)
2008年2月21日 (木)
1つ忘れていました。
何故、「Relational dataをXMLへ」というネタを取り上げようと思ったのか?
それはOTN-Jのこのスレに回答 したことがきっかけだった。OTN-Jのスレ のネタはMacOSX環境下ではないのだけれど、Oracle XML DBを調べていたこともあり、その次いでに Eclipse for MacOSXではどうなるのか単純に知りたかっただけだった。そしてその準備段階のネタがMacOSXのEclipseを日本語化という記事だった。
ということで、前回はJDeveloperを使って試したことを書いた。今回はおまけとして、
Eclipse 3.3.1.1 for MacOSX(日本語化済み) とNetBeans IDE 6.0.1 for MacOSX でやってみた。。(ただそれだけなんですけど・・・・)
利用したOracle JDBCドライバなどは前々回の記事を参照 してください。
どれを使っても同じ結果にはなるのですが・・・・NetBeans6.0.1は随分といい感じに仕上がっているように感じた。(^^
| 固定リンク | 0
|
| トラックバック (0)
1つ忘れていました。
何故、「Relational dataをXMLへ」というネタを取り上げようと思ったのか?
それはOTN-Jのこのスレに回答 したことがきっかけだった。OTN-Jのスレ のネタはMacOSX環境下ではないのだけれど、Oracle XML DBを調べていたこともあり、その次いでに Eclipse for MacOSXではどうなるのか単純に知りたかっただけだった。そしてその準備段階のネタがMacOSXのEclipseを日本語化という記事だった。
ということで、前回はJDeveloperを使って試したことを書いた。今回はおまけとして、
Eclipse 3.3.1.1 for MacOSX(日本語化済み) とNetBeans IDE 6.0.1 for MacOSX でやってみた。。(ただそれだけなんですけど・・・・)
利用したOracle JDBCドライバなどは前々回の記事を参照 してください。
どれを使っても同じ結果にはなるのですが・・・・NetBeans6.0.1は随分といい感じに仕上がっているように感じた。(^^
| 固定リンク | 0
|
| トラックバック (0)
以下の例は、SQL/XMLとOracleが提供しているXQuery関数 ora:view()を利用し、リレーショナルデータからXMLTypeインスタンスを作るまでをOracleデータベース側で行い、クライアントではXMLTypeインスタンスを受け取るだけというもの。
package jp.macdeoracle.sample; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.SQLException; import java.sql.Statement; import oracle.jdbc.OracleResultSet; import oracle.jdbc.pool.OracleDataSource; import oracle.xdb.XMLType; public class Table2Xml2 { public Table2Xml2() throws SQLException { OracleDataSource ods; ods = new OracleDataSource(); ods.setURL( "jdbc:oracle:thin:scott/tiger@192.168.1.20:1521:lampeye" ); Connection conn = ods.getConnection(); Statement stmt = conn.createStatement(); OracleResultSet rs = (OracleResultSet)stmt.executeQuery( "SELECT " + "XMLROOT(" + "XMLQuery(" + "'<ROWSET> {" + " for $d in ora:view(\"EMP\") " + " order by $d" + " return $d" + "} </ROWSET>'" + "RETURNING CONTENT), VERSION '1.0') " + "FROM dual" ); DatabaseMetaData meta = conn.getMetaData(); System.out.println(meta.getDatabaseProductVersion()); System.out.println(meta.getDriverName()+":"+meta.getDriverVersion()); while(rs.next()) { System.out.println( "=======================\n" +((XMLType)rs.getObject(1)).getStringVal() ); } rs.close(); stmt.close(); conn.close(); } public static void main(String[] args) throws SQLException { Table2Xml2 dbXml = new Table2Xml2(); } }
実行結果は以下の通り。
Oracle Database 11g Release 11.1.0.0.0 - Production Oracle JDBC driver:10.1.0.3.0 ======================= <?xml version="1.0"?> <ROWSET> <ROW> <EMPNO>7369</EMPNO> <ENAME>SMITH</ENAME> <JOB>CLERK</JOB> <MGR>7902</MGR> <HIREDATE>1980-12-17</HIREDATE> <SAL>800</SAL> <DEPTNO>20</DEPTNO> </ROW> <ROW> <EMPNO>7499</EMPNO> <ENAME>ALLEN</ENAME> <JOB>SALESMAN</JOB> <MGR>7698</MGR> <HIREDATE>1981-02-20</HIREDATE> <SAL>1600</SAL> <COMM>300</COMM> <DEPTNO>30</DEPTNO> </ROW> <ROW> <EMPNO>7521</EMPNO> <ENAME>WARD</ENAME> <JOB>SALESMAN</JOB> <MGR>7698</MGR> <HIREDATE>1981-02-22</HIREDATE> <SAL>1250</SAL> <COMM>500</COMM> <DEPTNO>30</DEPTNO> </ROW> <ROW> <EMPNO>7566</EMPNO> <ENAME>JONES</ENAME> <JOB>MANAGER</JOB> <MGR>7839</MGR> <HIREDATE>1981-04-02</HIREDATE> <SAL>2975</SAL> <DEPTNO>20</DEPTNO> </ROW> <ROW> <EMPNO>7654</EMPNO> <ENAME>MARTIN</ENAME> <JOB>SALESMAN</JOB> <MGR>7698</MGR> <HIREDATE>1981-09-28</HIREDATE> <SAL>1250</SAL> <COMM>1400</COMM> <DEPTNO>30</DEPTNO> </ROW> <ROW> <EMPNO>7698</EMPNO> <ENAME>BLAKE</ENAME> <JOB>MANAGER</JOB> <MGR>7839</MGR> <HIREDATE>1981-05-01</HIREDATE> <SAL>2850</SAL> <DEPTNO>30</DEPTNO> </ROW> <ROW> <EMPNO>7782</EMPNO> <ENAME>CLARK</ENAME> <JOB>MANAGER</JOB> <MGR>7839</MGR> <HIREDATE>1981-06-09</HIREDATE> <SAL>2450</SAL> <DEPTNO>10</DEPTNO> </ROW> <ROW> <EMPNO>7839</EMPNO> <ENAME>KING</ENAME> <JOB>PRESIDENT</JOB> <HIREDATE>1981-11-17</HIREDATE> <SAL>5000</SAL> <DEPTNO>10</DEPTNO> </ROW> <ROW> <EMPNO>7844</EMPNO> <ENAME>TURNER</ENAME> <JOB>SALESMAN</JOB> <MGR>7698</MGR> <HIREDATE>1981-09-08</HIREDATE> <SAL>1500</SAL> <COMM>0</COMM> <DEPTNO>30</DEPTNO> </ROW> <ROW> <EMPNO>7900</EMPNO> <ENAME>JAMES</ENAME> <JOB>CLERK</JOB> <MGR>7698</MGR> <HIREDATE>1981-12-03</HIREDATE> <SAL>950</SAL> <DEPTNO>30</DEPTNO> </ROW> <ROW> <EMPNO>7902</EMPNO> <ENAME>FORD</ENAME> <JOB>ANALYST</JOB> <MGR>7566</MGR> <HIREDATE>1981-12-03</HIREDATE> <SAL>3000</SAL> <DEPTNO>20</DEPTNO> </ROW> <ROW> <EMPNO>7934</EMPNO> <ENAME>MILLER</ENAME> <JOB>CLERK</JOB> <MGR>7782</MGR> <HIREDATE>1982-01-23</HIREDATE> <SAL>1300</SAL> <DEPTNO>10</DEPTNO> </ROW> <ROW> <EMPNO>9999</EMPNO> <ENAME>ほげ</ENAME> <JOB>ENGINEER</JOB> <MGR>7566</MGR> <HIREDATE>2008-01-01</HIREDATE> <SAL>2500</SAL> <DEPTNO>20</DEPTNO> </ROW> </ROWSET> プロセスが終了コード0で終了しました。
いろいろな方法があるので悩みそうな気もするなぁ。。。。やっぱり。。。
| 固定リンク | 0
|
| トラックバック (0)
2008年2月20日 (水)
さて、Oracleデータベース側だけでリレーショナルデータをXMLTypeインスタンスへ変換する方法は一通り試したので、今度はリレーショナルデータを取り出しクライアント側でXMLへ変換してみた。
接続するOracleデータベースはいままで通り、Oracle11g R1 EE 11.1.0.6.0 for Linux(x86) なのだが、クライアントとして利用するMacOSX 10.4.11の構成は多少異なるので以下に示しておく。
IDE : Oracle JDeveloper10g Studio Edition 10.1.3.0.4 for MacOSX Oracle XML Developer's Kit(XDK) for Java - 10.2.0.2.0 Linux Production JDBCドライバ : Oracle Instant Client for MacOSX(PPC) 10.1.0.3.0 付属の ojdbc14.jar Oracle XML Parser : JDeveloper 10g Studio Edition for MacOSX version 10.1.3.0.4に付属するOracle XML Parser v2 (xmlparserv2.jar) Oracle XML SQL Utility : JDeveloper 10g Studio Edition for MacOSX version 10.1.3.0.4に付属するOracle XML SQL Utiliry (xsu12.jar)
バックナンバー: Oracle de XMLDB #18 - Relational dataをXMLへ #1
Oracle de XMLDB #19 - Relational dataをXMLへ #2 Oracle de XMLDB #20 - Relational dataをXMLへ #3 Oracle de XMLDB #21 - Relational dataをXMLへ #4 Oracle de XMLDB #22 - Relational dataをXMLへ #5
以下の例では、emp表をempno順にソートして読み込み、Oracle XML SQL Utilityを利用して読み込んだResultsetからXMLへ変換。
package jp.macdeoracle.sample; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import oracle.jdbc.pool.OracleDataSource; import oracle.xml.sql.query.OracleXMLQuery; public class Table2Xml1 { public Table2Xml1() throws SQLException { OracleDataSource ods; ods = new OracleDataSource(); ods.setURL( "jdbc:oracle:thin:scott/tiger@192.168.1.20:1521:lampeye" ); Connection conn = ods.getConnection(); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("select * from emp order by empno"); OracleXMLQuery xmlqry = new OracleXMLQuery(conn, rs); String xmlString = xmlqry.getXMLString(); DatabaseMetaData meta = conn.getMetaData(); System.out.println(meta.getDatabaseProductVersion()); System.out.println(meta.getDriverName()+":"+meta.getDriverVersion()); System.out.println("=====================\n"+xmlString); rs.close(); stmt.close(); conn.close(); } public static void main(String[] args) throws SQLException { Table2Xml1 Table2Xml1 = new Table2Xml1(); } }
出力結果は以下の通り。ROW要素にnum属性がある以外、データベース側だけで変換した場合と内容的には変らない。
データベースサーバ側で変換まで行うか、クライアント側で変換するか、どちらが良いかといういうより、どのように負荷分散するかという戦略に合わせて考えればいいんじゃないかと思う。
Oracle Database 11g Release 11.1.0.0.0 - Production Oracle JDBC driver:10.1.0.3.0 ===================== <?xml version = '1.0'?> <ROWSET> <ROW num="1"> <EMPNO>7369</EMPNO> <ENAME>SMITH</ENAME> <JOB>CLERK</JOB> <MGR>7902</MGR> <HIREDATE>12/17/1980 0:0:0</HIREDATE> <SAL>800</SAL> <DEPTNO>20</DEPTNO> </ROW> <ROW num="2"> <EMPNO>7499</EMPNO> <ENAME>ALLEN</ENAME> <JOB>SALESMAN</JOB> <MGR>7698</MGR> <HIREDATE>2/20/1981 0:0:0</HIREDATE> <SAL>1600</SAL> <COMM>300</COMM> <DEPTNO>30</DEPTNO> </ROW> <ROW num="3"> <EMPNO>7521</EMPNO> <ENAME>WARD</ENAME> <JOB>SALESMAN</JOB> <MGR>7698</MGR> <HIREDATE>2/22/1981 0:0:0</HIREDATE> <SAL>1250</SAL> <COMM>500</COMM> <DEPTNO>30</DEPTNO> </ROW> <ROW num="4"> <EMPNO>7566</EMPNO> <ENAME>JONES</ENAME> <JOB>MANAGER</JOB> <MGR>7839</MGR> <HIREDATE>4/2/1981 0:0:0</HIREDATE> <SAL>2975</SAL> <DEPTNO>20</DEPTNO> </ROW> <ROW num="5"> <EMPNO>7654</EMPNO> <ENAME>MARTIN</ENAME> <JOB>SALESMAN</JOB> <MGR>7698</MGR> <HIREDATE>9/28/1981 0:0:0</HIREDATE> <SAL>1250</SAL> <COMM>1400</COMM> <DEPTNO>30</DEPTNO> </ROW> <ROW num="6"> <EMPNO>7698</EMPNO> <ENAME>BLAKE</ENAME> <JOB>MANAGER</JOB> <MGR>7839</MGR> <HIREDATE>5/1/1981 0:0:0</HIREDATE> <SAL>2850</SAL> <DEPTNO>30</DEPTNO> </ROW> <ROW num="7"> <EMPNO>7782</EMPNO> <ENAME>CLARK</ENAME> <JOB>MANAGER</JOB> <MGR>7839</MGR> <HIREDATE>6/9/1981 0:0:0</HIREDATE> <SAL>2450</SAL> <DEPTNO>10</DEPTNO> </ROW> <ROW num="8"> <EMPNO>7839</EMPNO> <ENAME>KING</ENAME> <JOB>PRESIDENT</JOB> <HIREDATE>11/17/1981 0:0:0</HIREDATE> <SAL>5000</SAL> <DEPTNO>10</DEPTNO> </ROW> <ROW num="9"> <EMPNO>7844</EMPNO> <ENAME>TURNER</ENAME> <JOB>SALESMAN</JOB> <MGR>7698</MGR> <HIREDATE>9/8/1981 0:0:0</HIREDATE> <SAL>1500</SAL> <COMM>0</COMM> <DEPTNO>30</DEPTNO> </ROW> <ROW num="10"> <EMPNO>7900</EMPNO> <ENAME>JAMES</ENAME> <JOB>CLERK</JOB> <MGR>7698</MGR> <HIREDATE>12/3/1981 0:0:0</HIREDATE> <SAL>950</SAL> <DEPTNO>30</DEPTNO> </ROW> <ROW num="11"> <EMPNO>7902</EMPNO> <ENAME>FORD</ENAME> <JOB>ANALYST</JOB> <MGR>7566</MGR> <HIREDATE>12/3/1981 0:0:0</HIREDATE> <SAL>3000</SAL> <DEPTNO>20</DEPTNO> </ROW> <ROW num="12"> <EMPNO>7934</EMPNO> <ENAME>MILLER</ENAME> <JOB>CLERK</JOB> <MGR>7782</MGR> <HIREDATE>1/23/1982 0:0:0</HIREDATE> <SAL>1300</SAL> <DEPTNO>10</DEPTNO> </ROW> <ROW num="13"> <EMPNO>9999</EMPNO> <ENAME>ほげ</ENAME> <JOB>ENGINEER</JOB> <MGR>7566</MGR> <HIREDATE>1/1/2008 0:0:0</HIREDATE> <SAL>2500</SAL> <DEPTNO>20</DEPTNO> </ROW> </ROWSET> プロセスが終了コード0で終了しました。
次回は、データベース側でXMLへの変換まで行いクライアント側ではその結果を受け取るだけの例を一つ。
| 固定リンク | 0
|
| トラックバック (0)
2008年1月27日 (日)
Eclipseの日本語化プラグインのインストール手順について以下を参考にしたのだが、MacOSX以外の記述もあり少々分かりにくかったので自分なりの備忘録として書いておく。 とはいってもMacOSX上で利用する可能性は低いのだけれど・・・Eclipse Wiki - 日本語化に関する記述
だったら何故、EclipseをMacOSXで使おうと思ったのか?・・・・
先日、OTN-Jのエントリに回答した のがきっかけで・・・、仕事ではEclipseを利用する事が多いウチの奥さんと
私 :「MacOSXでEclipseを日本語化する手順ってブログで書いてたっけ? 」
ウチの奥さん:「書いてないと思う」
という話になりこのエントリを書く気になったというわけ。。。(個人的には日本語化しないと使いにくいというわけでもないのですが・・・)
2008/1/28追記 奥さん曰く、Eclipseネタは沢山あるからネタとしてはつまらないし、誰かがもう書いていると思ったからだとか。。。
今回利用した Eclipse for MacOSXのバージョンは、3.3.1.1
日本語化プラグインは、pleiades-all-in-one-java-wtp_20071121.zip
MacOSX : version 10.4.11
http://www.eclipse.org/downloads/ http://mergedoc.sourceforge.jp/
※ダウンロードしたEclipseと日本語化プラグインはぞれぞれ適当なフォルダで解凍済み。
以下の例では、Eclpseと日本語化プラグインはそれぞれ/Volumes/ExtraDisk/Application と /Volumes/DiscusWork/temp 以下に解凍した。
Last login: Wed Jan 23 17:16:05 on console Welcome to Darwin! G5Server:˜ discus$ G5Server:˜ discus$ cd /Volumes/ExtraDisk/Application/eclipse/ G5Server:/Volumes/ExtraDisk/Application/eclipse discus$ ls -l total 64 drwxr-xr-x 3 discus discus 102 Nov 4 02:47 Eclipse.app drwxr-xr-x 10 discus discus 340 Jan 23 18:06 configuration lrwxrwxrwx 1 discus discus 34 Jan 23 17:48 eclipse -> Eclipse.app/Contents/MacOS/eclipse -rw-r--r-- 1 discus discus 16536 Nov 4 02:47 epl-v10.html drwxr-xr-x 104 discus discus 3536 Jan 23 17:50 features -rw-r--r-- 1 discus discus 6506 Nov 4 02:47 notice.html drwxr-xr-x 461 discus discus 15674 Jan 23 17:52 plugins drwxr-xr-x 3 discus discus 102 Nov 4 02:47 readme G5Server:/Volumes/ExtraDisk/Application/eclipse discus$
※これが重要。
日本語化パッケージのconfiguration、features、pluginsの各ディレクトリ以下にある全ファイルをコピーする(注:ディレクトリごと上書きしないように!)
G5Server:/Volumes/ExtraDisk/Application/eclipse discus$ cp -Rf /Volumes/DiscusWork/temp/pleiades-all-in-one-java-wtp_20071121/configuration/*.* configuration G5Server:/Volumes/ExtraDisk/Application/eclipse discus$ cp -Rf /Volumes/DiscusWork/temp/pleiades-all-in-one-java-wtp_20071121/features/*.* features G5Server:/Volumes/ExtraDisk/Application/eclipse discus$ cp -Rf /Volumes/DiscusWork/temp/pleiades-all-in-one-java-wtp_20071121/plugins/*.* plugins G5Server:/Volumes/ExtraDisk/Application/eclipse discus$
※eclipse.iniを編集。
(configuration以下のelipse.iniではないので注意。)
G5Server:/Volumes/ExtraDisk/Application/eclipse discus$ cat Eclipse.app/Contents/MacOS/eclipse.ini -showsplash org.eclipse.platform -vmargs -Xdock:icon=../Resources/Eclipse.icns -XstartOnFirstThread -Xms40m -Xmx512m -XX:MaxPermSize=256m-javaagent:/Volumes/ExtraDisk/Application/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar=no.mnemonic -Dosgi.requiredJavaVersion=1.5 -Dorg.eclipse.swt.internal.carbon.smallFonts
※細かいことは考えずにとりあえず、-cleanを付けて起動しちゃう。(日本語プラグイン追加後に一度だけ。)
G5Server:/Volumes/ExtraDisk/Application/eclipse discus$ G5Server:/Volumes/ExtraDisk/Application/eclipse discus$ ./eclipse -clean & [1] 1814 2008-01-23 18:06:41.005 eclipse[1704] [Java CocoaComponent compatibility mode]: Enabled 2008-01-23 18:06:41.005 eclipse[1704] [Java CocoaComponent compatibility mode]: Setting timeout for SWT to 0.100000 G5Server:/Volumes/ExtraDisk/Application/eclipse discus$ [1]+ Done ./eclipse -clean G5Server:/Volumes/ExtraDisk/Application/eclipse discus$
上手くできました〜。 :)
最後の画像は、最初に
先日、OTN-Jのエントリに回答した のがきっかけで・・・、
と書いた”きっかけ”の話題に関連したおまけ・・・次回のエントリはそのネタにしようかと思う。
| 固定リンク | 0
|
| トラックバック (0)
2008年1月17日 (木)
2008年1月 2日 (水)
「XMLマスター:プロフェッショナル(データベース) 試験」のサンプル問題がXML技術者育成推進委員会のサイトに掲載 されている。 この問題の幾つかは直接XML DBを操作して確認することができる問題なのだが、それらの問題をOracle11g R1 11.1.0.6.0 を利用して試す場合には次の2点には注意しておいたほうがよいだろう。
● 最初はSQL*Plusの仕様による影響。
SQL*PlusのXQueryコマンドで試す場合以下のように@がSQL*PlusのSTARTコマンとして実行されてしまう。
SCOTT> xquery 2 for $n in fn:doc("/public/scott/xml/example2.xml")/list 3 return 4 <codeList> 5 <code> { 6 @code SP2-0310: ファイル"code.sql"をオープンできません。 6 . SCOTT>
これを回避する方法は以前も紹介した方法でSQL*PlusのSTARTコマンドして実行されることを回避できる。
SCOTT> xquery 2 for $n in fn:doc("/public/scott/xml/example2.xml")/list 3 return 4 <codeList> 5 <code>{ 6 (::) @code 7 }</code> ・・・以下省略・・・
「XMLマスター:プロフェッショナル(データベース) 試験のサンプル問題」の問題2 をOracle11g R1 11.1.0.6.0で試す場合には忘れずに!
● もう一つはテキストノードのwhitespaceの取扱いに関するもの。
Oracle11g R1 11.1.0.6.0のXMLDB ではテキストノードに対するwhitespaceの取扱いは常にstripであること。以下の例を見ていただければ一目瞭然。 ということで「XMLマスター:プロフェッショナル(データベース) 試験のサンプル問題」の問題3 をOracle11g R1 11.1.0.6.0で実行した場合<space> </space>というノードの空白は削除されてしまうのでこれまたOracle11g R1ではそのような実装になっているということをお忘れなく。
SCOTT> !cat sample.xml <?xml version="1.0" encoding="utf-8"?><space> </space> SCOTT> declare 2 r boolean; 3 begin 4 r := dbms_xdb.createresource( 5 '/public/scott/xml/sample.xml', 6 bfilename('SCOTT_XMLDIR','sample.xml'), 7 nls_charset_id('AL32UTF8')); 8 commit; 9 end; 10 / PL/SQLプロシージャが正常に完了しました。 SCOTT> SCOTT> xquery 2 fn:doc("/public/scott/xml/sample.xml")/space 3 / Result Sequence --------------------------------------------------------------------------------<space/> SCOTT>
ちなみにオープンソースのSaxon B ではテキストノードのwhitespaceの扱いは指定可能なのでXMLマスタープロフェッショナル(データベース)のようなベンダー比依存の試験勉強の為だけであればSaxon B を使ったほうが無難かもしれない。ただ、プロジェクトでOracle11g R1のXML DBを利用するのであればOracle11g R1を利用して検証したほうがいいのは言うまでもない。
以下、saxon 9.0.0J(saxon B 9.0.0.2のjava版) を利用して上記2点に関連する部分を実行した例
環境:MacOSX Server 10.4.11 Tiger
● SAXON B 9.0.0.2(java版)をダウンロード、unzipする。
今回は/User/Sharedで作業を行うことにした。Webブラウザでダウンロードしてもいいのだが折角なので全部コマンドで行っちゃいましょう。curlコマンド でSAXON B 9.0.0.2(Java版)をダウンロード後、unzip。
G5Server:˜ oracle$ java -version java version "1.5.0_13" Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_13-b05-241) Java HotSpot(TM) Client VM (build 1.5.0_13-121, mixed mode) G5Server:˜ oracle$ G5Server:˜ oracle$ cd /Users/Shared/ G5Server:/Users/Shared oracle$ G5Server:/Users/Shared oracle$ curl -L -o saxonb9-0-0-2j.zip http://prdownloads.sourceforge.net/saxon/saxonb9-0-0-2j.zip % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 1862k 100 1862k 0 0 144k 0 0:00:12 0:00:12 --:--:-- 144k G5Server:/Users/Shared oracle$ unzip saxonb9-0-0-2j.zip -d saxonb9-0-0-2j Archive: saxonb9-0-0-2j.zip inflating: saxonb9-0-0-2j/saxon9-ant.jar inflating: saxonb9-0-0-2j/saxon9-dom.jar inflating: saxonb9-0-0-2j/saxon9-dom4j.jar inflating: saxonb9-0-0-2j/saxon9-jdom.jar inflating: saxonb9-0-0-2j/saxon9-s9api.jar inflating: saxonb9-0-0-2j/saxon9-sql.jar inflating: saxonb9-0-0-2j/saxon9-xom.jar inflating: saxonb9-0-0-2j/saxon9-xpath.jar inflating: saxonb9-0-0-2j/saxon9-xqj.jar inflating: saxonb9-0-0-2j/saxon9.jar G5Server:/Users/Shared oracle$ cd saxonb9-0-0-2j
● XMLファイルとXQueryファイルを用意する。
前述したXMLマスタープロフェッショナル(データベース)試験のサンプル問題 元にXMLファイルとXQueryファイルを準備しておく。 (SAXON B のコマンドラインでは直接XQueryを記述できずXQueryを記述したファイルを指定する必要がある為。)
G5Server:/Users/Shared/saxonb9-0-0-2j oracle$ ll total 10584 -rw-r--r-- 1 oracle wheel 444 Dec 31 17:38 example.xml -rw-r--r-- 1 oracle wheel 40 Dec 31 17:38 query1.xql -rw-r--r-- 1 oracle wheel 58 Dec 31 17:38 query2.xql -rw-r--r-- 1 oracle wheel 199 Dec 31 17:38 query_a.xql -rw-r--r-- 1 oracle wheel 188 Dec 31 17:38 query_b.xql -rw-r--r-- 1 oracle wheel 204 Dec 31 17:38 query_c.xql -rw-r--r-- 1 oracle wheel 189 Dec 31 17:38 query_d.xql -rw-r--r-- 1 oracle wheel 57 Dec 31 17:38 result.xml -rw-r--r-- 1 oracle wheel 108 Dec 31 17:38 sample.xml -rw-r--r-- 1 oracle wheel 56 Dec 31 17:38 sample2.xml -rw-r--r-- 1 oracle wheel 23963 Nov 30 14:35 saxon9-ant.jar -rw-r--r-- 1 oracle wheel 110602 Nov 30 14:35 saxon9-dom.jar -rw-r--r-- 1 oracle wheel 30000 Nov 30 14:35 saxon9-dom4j.jar -rw-r--r-- 1 oracle wheel 32743 Nov 30 14:35 saxon9-jdom.jar -rw-r--r-- 1 oracle wheel 110818 Nov 30 14:35 saxon9-s9api.jar -rw-r--r-- 1 oracle wheel 45598 Nov 30 14:35 saxon9-sql.jar -rw-r--r-- 1 oracle wheel 45218 Nov 30 14:35 saxon9-xom.jar -rw-r--r-- 1 oracle wheel 43536 Nov 30 14:35 saxon9-xpath.jar -rw-r--r-- 1 oracle wheel 173255 Nov 30 14:35 saxon9-xqj.jar -rw-r--r-- 1 oracle wheel 4737705 Nov 30 14:35 saxon9.jar G5Server:/Users/Shared/saxonb9-0-0-2j oracle$
● SAXON B のXQueryのコマンド形式は以下のようにして確認できます。
G5Server:/Users/Shared/saxonb9-0-0-2j oracle$ java -cp saxon9.jar net.sf.saxon.Query -? Saxon 9.0.0.2J from Saxonica Usage: java net.sf.saxon.Query [options] query {param=value}... Options: -cr:classname Use specified CollectionURIResolver class -dtd:on|off Validate using DTD -expand:on|off Expand defaults defined in schema/DTD -explain[:filename] Display compiled expression tree -ext:[on|off] Allow|Disallow external Java functions -l:on|off Line numbering for source document -mr:classname Use specified ModuleURIResolver class -o:filename Send output to named file -outval:recover|fatal Handling of validation errors on result document -p Recognize Saxon file extensions and query parameters -pipe:push|pull Execute internally in push or pull mode -projection:[on|off] Use|Don't use source document projection -r:classname Use URIResolver class -repeat:N Repeat N times for performance measurement -s:file|URI Provide initial context document -sa Schema-aware query (requires Saxon-SA) -strip:all|none|ignorable Strip whitespace text nodes -t Display version and timing information -tree:tiny|linked Select tree model -T[:classname] Use TraceListener class -TJ Trace calls to external Java functions -u Names are URLs not filenames -val:strict|lax Validate using schema -wrap:on|off Wrap result sequence in XML elements -x:classname Parser (XMLReader) used for source files -xi:on|off Expand XInclude on all documents -xmlversion:1.0|1.1 Version of XML to be handled -? Display this message param=value Set query string parameter +param=value Set query document parameter !option=value Set serialization option G5Server:/Users/Shared/saxonb9-0-0-2j oracle$
SAXON B で「XMLマスター:プロフェッショナル(データベース) 試験のサンプル問題」の問題2 を試す。
G5Server:/Users/Shared/saxonb9-0-0-2j oracle$ cat example.xml <?xml version="1.0" encoding="utf-8"?> <logList> <list code="w001" message="警告1"/> <list code="w002" message="警告2"/> <list code="e001" message="エラー1"/> <list code="e002" message="エラー2"/> <day date="2007-12-01"> <log time="10:00:00" code="w001"/> <log time="14:00:00" code="e001"/> </day> <day date="2007-12-02"> <log time="13:00:00" code="e002"/> <log time="15:00:00" code="e001"/> </day> </logList> G5Server:/Users/Shared/saxonb9-0-0-2j oracle$ cat -n query_a.xql 1 <result>{ 2 let $doc := fn:doc("example.xml") 3 for $log in $doc//log 4 return 5 <log>{ 6 $log/../@date, 7 $log/@time, 8 $doc//list[@code eq $log/@code]/@message 9 }</log> 10 }</result> G5Server:/Users/Shared/saxonb9-0-0-2j oracle$ java -cp saxon9.jar net.sf.saxon.Query query_a.xql <?xml version="1.0" encoding="UTF-8"?> <result> <log date="2007-12-01" time="10:00:00" message="警告1"/> <log date="2007-12-01" time="14:00:00" message="エラー1"/> <log date="2007-12-02" time="13:00:00" message="エラー2"/> <log date="2007-12-02" time="15:00:00" message="エラー1"/> </result> G5Server:/Users/Shared/saxonb9-0-0-2j oracle$ cat -n query_b.xql 1 <result>{ 2 let $doc := fn:doc("example.xml") 3 for $log in $doc//log 4 return 5 <log>{ 6 ../@date, 7 @time, 8 ../../list[@code = $log/@code]/@message 9 }</log> 10 }</result> G5Server:/Users/Shared/saxonb9-0-0-2j oracle$ java -cp saxon9.jar net.sf.saxon.Query query_b.xql Error on line 6 of file:/Users/Shared/saxonb9-0-0-2j/query_b.xql: XPDY0002: The context item is not set Query processing failed: Run-time errors were reported G5Server:/Users/Shared/saxonb9-0-0-2j oracle$ cat -n query_c.xql 1 <result>{ 2 let $doc := fn:doc("example.xml") 3 for $day in $doc//day 4 return 5 <log>{ 6 $day/@date, 7 $day/log/@time, 8 $doc//list[@code eq $day/log/@code]/@message 9 }</log> 10 }</result> G5Server:/Users/Shared/saxonb9-0-0-2j oracle$ java -cp saxon9.jar net.sf.saxon.Query query_c.xql Error on line 7 of file:/Users/Shared/saxonb9-0-0-2j/query_c.xql: XQDY0025: Cannot create an element having two attributes with the same name: @time Query processing failed: Run-time errors were reported G5Server:/Users/Shared/saxonb9-0-0-2j oracle$ cat -n query_d.xql 1 <result>{ 2 let $doc := fn:doc("example.xml") 3 for $day in $doc//day 4 return 5 <log>{ 6 @date, 7 log/@time, 8 ../list[@code = $day/log/@code]/@message 9 }</log> 10 }</result> G5Server:/Users/Shared/saxonb9-0-0-2j oracle$ java -cp saxon9.jar net.sf.saxon.Query query_d.xql Error on line 6 of file:/Users/Shared/saxonb9-0-0-2j/query_d.xql: XPDY0002: The context item for axis step attribute::attribute(date, xs:anyAtomicType) is undefined Query processing failed: Run-time errors were reported
● SAXON B ではテキストノードのwhitespaceの取扱いを-stripオプション で指示できる。
G5Server:/Users/shared/saxonb9-0-0-2j oracle$ cat -n sample2.xml 1 <?xml version="1.0" encoding="utf-8"?> 2 <space> </space> G5Server:/Users/shared/saxonb9-0-0-2j oracle$ cat -n query2.xql 1 fn:doc("sample2.xml")/space G5Server:/Users/shared/saxonb9-0-0-2j oracle$ G5Server:/Users/Shared/saxonb9-0-0-2j oracle$ java -cp saxon9.jar net.sf.saxon.Query query2.xql <?xml version="1.0" encoding="UTF-8"?><space> </space> G5Server:/Users/Shared/saxonb9-0-0-2j oracle$ java -cp saxon9.jar net.sf.saxon.Query -strip:all query2.xql <?xml version="1.0" encoding="UTF-8"?><space/> G5Server:/Users/Shared/saxonb9-0-0-2j oracle$ java -cp saxon9.jar net.sf.saxon.Query -strip:none query2.xql <?xml version="1.0" encoding="UTF-8"?><space> </space> G5Server:/Users/Shared/saxonb9-0-0-2j oracle$ java -cp saxon9.jar net.sf.saxon.Query -strip:ignorable query2.xql <?xml version="1.0" encoding="UTF-8"?><space> </space>
● バックナンバー
Oracle de XMLDB #1
Oracle de XMLDB #2
Oracle de XMLDB #3 - Oracle10g XEではどうよ?
Oracle de XMLDB #4
Oracle de XMLDB #5 - Oracle11g環境再構築完了
Oracle de XMLDB #6 - Linux x86版再び。
Oracle de XMLDB #7 - 何かが違う!?
Oracle de XMLDB #8 - またまた少々脱線
Oracle de XMLDB #9 - またまた少々脱線の続き
Oracle de XMLDB #10 - 三度脱線
Oracle de XMLDB #11 - 三度脱線のおまけ
Oracle de XMLDB #12
Oracle de XMLDB #13
Oracle de XMLDB #14
Oracle de XMLDB #15
Oracle de XMLDB #16
| 固定リンク | 0
|
| トラックバック (0)
2007年11月16日 (金)
いや〜〜、行く予定だったんですが、行けなかった〜〜〜残念!〜〜。
Sunの岡崎さんのブログでその映像が配信されたようですね。行けなかったこともあり、内容を見る事ができてうれしいです。
YouTubeで配信してもらえるといいかも。(やっぱり、MacOSX Leopard使ってるのねぇ〜)
http://mediacast.sun.com/share/okazaki/jMaki20071115.mov
http://blogs.sun.com/okazaki/entry/昨日のhot_topic_seminar_jmaki開発者gregによるセミナー_jmaki
| 固定リンク | 0
|
| トラックバック (0)
2007年11月 8日 (木)
やはり、気になったので、有楽町の無印での買い物ついでにSun Tech Days 2007 in Tokyoの最終日の最終セッション へ。
MacOSX Leopardへも組み込まれているDtrace関連と昨日は全く聞けなかったPostgraSQL 関連セッション。
Solarisはないので、LeopardのbashからMacOSX 10.5 Leopardで確認だけ。。ちゃんと入ってますDtrace
その他、いろいろ試してみたいのだが、それは後日時間を取ってやってみようかと。。。予定は未定。
| 固定リンク | 0
|
| トラックバック (0)
2007年11月 7日 (水)
今日も行ってきましたSun Tech Days 。
明日も行くかは微妙だけど、Dtrace for Web 2.0,JavaScript, PHP and CoolStack (SAMP)やEnterprise Database Inside: The PostgreSQLなんてセッションが夕方からあるので行くかも。
基調講演と以下の3セッション。
基調講演では、ロボットのデモがあったけど、ウチの奥さんも居たら涙もんですな、絶対。
(ところでウチのケイトー君の作り込みの記事は停滞中です。 なにせ奥さん と1エントリ毎の交代で書いているので。。)
Ajax関連では、Ajax and Web 2.0 Related Frameworks and Toolkits
Gregさんが日本語でプレゼンしてました。このプレゼンが面白いこと。(^^;
いや〜マジでMac OS X Leopard のデモなんじゃないかと勘違いするくらいMacOSX Leopardバリバリ使っていましたよ。
Parallels Desktop 3.0 for Mac でWindows XP上のデモやってました。やっぱりParallelsは必須だな。
(jMaki使ってみるか。。 )
それに、DTraceのセッション。
DTraceはMacOSX Leopardでも採用 されているのでね。
それとDBがらみなので、Java Persistence API: Simplifying Persistence。
(PostgreSQLは時間がバッティングしていたので諦めた。)
| 固定リンク | 0
|
| トラックバック (0)
2007年11月 6日 (火)
今日は、Sun Tech Days 2007 Tokyo - Community Day へ。
最初の2セッションだけでしたけど、NetBeans 6.0の進化が見れてよかったかな。
現在は、NetBeans 6.0 Beta 2がダウンロードできるようだ。
プレゼンする方も見る側もMacBook/PowerBook? 持っている方はやはり多いですね。:-)
Javaはうちの奥さん の得意分野。客先ではEclipseを利用する場合が多いのだが、Sun Java StudioのMacOS版の使い易さに感動していたのを思い出す。おそらくNetBeans6.0を触れば気に入るんじゃないかな。
しかもEclipseのプロジェクトをImportしたり共有できるようになるんだからねぇ。
こんな色合い、好きなんですよね〜。熱帯魚好きな私好み。。。これがターコイズ系ならもっと好きなんだが。。
| 固定リンク | 0
|
| トラックバック (0)
2007年8月24日 (金)
少々、おそくなったが、 先日、JJUG主催の「クロスコニュニティ IDE」 に参加してきた。 このセミナー申し込みが多かったらしく、抽選でした。うちは奥さんと二人個別に申し込んでいたのだが、当選したのは私だけ!。 奥さんも当選していたら会場にいたJDeveloperファン?は、もう少し増えてたかも。。(笑い) 私の場合、無償になる以前からJDeveloperを仕事で利用していたこともあり、考えてみると、 JDeveloper > Eclipse > NetBeans という順で、利用経験が少なくなって行く。。 そういえば、無償になる前のJDeveloperは、ソースネクストから1980円で発売されていたこともあり、ある人からプレゼントに使った分の残りが少しあるから、私と奥さんの分を貰ったこともあったっけ。 前置きはこれくらいにして、セミナーの内容は、ストリーミングで配信されるようなのでそちらを見て頂いた方がよさそう。http://ustream.tv/yoichiro/videos/T0rVTPSassJOp6yi2bLenA
http://ustream.tv/yoichiro/videos/G1IWObKZ9majKs2sdEiHdg 私個人の感想としては、前日、睡眠時間4時間(仕事ではなく、単に熱帯夜で、寝苦しくて。。。)の影響と祭り見物のための移動準備の疲れか?、Eclipseの時は、目は開いていたもののセミナー内容の記憶はほとんどなし。。。 (^^;;; 後半、ようやく、覚醒してきたところが、デモがうまくいかなかった、NetBeansのあたり。 (実は、Rubyでも遊びたくて、NetBeansインストールしてあるんですよ、Macに。)佐藤直樹さん は、やはり、プレゼン慣れしていますな〜。
うちの奥さんは? といえば、プロジェクトの標準で、Eclipseを利用していることが多いのだが、最近、自宅のMacでは、JDeveloper11gを起動してあそんでいる姿を多く目にする。。。 本人曰く、Eclipseは仕事で十分使っているから、自分の趣味?で調べもしたり確かめたりするのにまで、Eclipseは使いたくないらしい。
ということで、今日からお祭り見物だ〜。
| 固定リンク | 0
|
| トラックバック (0)
2007年7月22日 (日)
前回のエントリ の勢いで、Glossitope をPowerMac G5 Dual 2.7GhzのMacOSX 10.4.10にインストールしてみた。
Konfabulator(現Yahoo Widgets) から始まったWidgetsブーム?!ですが、Javaでもってとこですかね。
次回は、Dashboard de Aquarium をWidgetコンテナへも移植してみますかね。。な〜〜んて。
(まあ、気まぐれですから、どうするかは気分しだいですけど。)
前置きはこれくらいにして、早速インストール。
● まず、Java SE 6.0 R1 Developer Preview をインストール
Java SE 6.0 R1 Developer Previewは、Java SE 5.0を置き換えたりしないのでご安心を。
● Glossitopeをダウンロード
今回は、Exterm versionをダウンロードしてみた。
Glossitope_buffered.jnlp がダウンロードされる
● ダウンロードした Glossitope_buffered.jnlpをダブルクリックしてインストール開始
「Trust」ボタンをクリックして。
お好きな場所に保存する。
● Glossttopeの起動
Glossitope Bufferedというアプリケーションをダブルクリックして起動。
Desklets(WidgetsのことをGlossitopeではDeskletsというらしい)をダウンロードするので「Yes」をクリック
● 起動した!
● ダブルクリックで広げると、
あら、DashboardのWidgetsにも似た、カレンダーや、目玉オヤジも!
● 設定ダイアログは開発途上のようで、イマイチ。。。。(^^;;;;
● Deskletsの管理
×ボタンをクリックするとDeskletsをunloadできる。
Dashboardとちがって、Deskletsがバラバラになるアニメーションで消えていく
ということで動きました. (^^;;;;
| 固定リンク | 0
|
| トラックバック (0)
2007年7月21日 (土)
そういえば、Dashcode Beta版の使用期限って、7月15日までだったことを思い出した。。(^^;;
TIgerでの正式版は出ないとも聞いているので、なんとなく残念な感じもする。便利な開発ツールですし。
まぁ、Leopardがリリースされたら移行すれば済むことなんだけど。。手に入るのはまだ先だろうし。それまではDashcodeに頼らずに作ろうかな。。。作りたいWidgetもあるし。。。
Please note that the December 2006 beta of Dashcode compatible with Mac OS X 10.4 Tiger will cease to function on July 15, 2007.
なんて思っていたタイミングで、Glossitope のことを、今月の2時間で学ぶ Java Hot Topic (7月号) で知り、むくむくと制作意欲が。。。Glossitopeは、JavaVM上で動作するWidgetコンテナで、Java SE 6.0のスクリプトサポートを利用するか、javascript, Python, JRubyなど複数のスクリプト言語で記述することができるとのこと。
MacOSXでもOK。デモもMacOSXでしたし。
Glossitope のデモムービー
--追記
あ、忘れてました、Glossitopeは、Java SE 6.0 が必要とのこと。
| 固定リンク | 0
|
| トラックバック (0)
2007年7月14日 (土)
Oracle Database 11g の OracleJVMでは、Java SE 5をサポートするようですね。
ということは、先日のエントリのようなJava Stored Procedure も Java SE 5対応になるといことですね、ついに。:)
Oracle Database 11g Application Development whitepapaerより引用
Java: OracleJVM Compliance with Java 5
OracleJVM allows reusing Java SE applications and libraries directly in the database
resulting in significant productivity and performance gains. This release supports
Java SE 5 (i.e., compatibility with JDK 1.5), out of the box.
| 固定リンク | 0
|
| トラックバック (0)
2007年7月 8日 (日)
前回からの続きです。
さて、前回は、javaクラスをOracle Databaseへデプロイしたところまでだった。
ということで、デプロイしたクラスとメソッドを確認しておきましょう! (以下の例は、 user_java_methods ビューを問い合わせたもの)
このマニュアル も参考になるのでリンクしておきます。
SQL> conn scott/tiger SQL> select name,method_name,accessibility,is_static,return_class from user_java_methods; NAME METHOD_NAM ACCESSIBILITY IS_STA RETURN_CLA ---------------------------------------- ---------- ------------------ ------ ---------- jp/macdeoracle/CommandOutputReader $init$ NO - jp/macdeoracle/CommandOutputReader <init> PUBLIC NO - jp/macdeoracle/CommandOutputReader run PUBLIC NO - jp/macdeoracle/HostCommandExecuter <clinit> YES - jp/macdeoracle/HostCommandExecuter exec PRIVATE YES - jp/macdeoracle/HostCommandExecuter ls PUBLIC YES - jp/macdeoracle/HostCommandExecuter main PUBLIC YES - jp/macdeoracle/HostCommandExecuter <init> PUBLIC NO - 8行が選択されました。 SQL>
● 次にjavaストアドプロシージャのコール仕様を作成する
language java以降がポイントですよ。実行するstatic methodを指定します。
SQL> create or replace procedure ls(directory IN VARCHAR2) 2 as language java 3 name 'jp.macdeoracle.HostCommandExecuter.ls(java.lang.String)'; 4 / プロシージャが作成されました。
では、実行してみると・・・・・。
あれれ、権限が足りないとでますね。。。。。
SQL> SQL> exec ls('c:¥temp'); BEGIN ls; END; * 行1でエラーが発生しました。: ORA-29532: 不明なJava例外でJavaコールが終了しました: java.security.AccessControlException: the Permission (java.io.FilePermission <<ALL FILES>> execute) has not been granted to SCOTT. The PL/SQL to grant this is dbms_java.grant_permission( 'SCOTT', 'SYS:java.io.FilePermission', '<<ALL FILES>>', 'execute' ) ORA-06512: "SCOTT.LS", 行1 ORA-06512: 行1
● エラーメッセージの指示通りに、 dbms_java.grant_permission を実行してみることに。。
user_java_policy を確認してみると権限は付与されたようですね。。。
SQL> conn / as sysdba SQL> execute dbms_java.grant_permission('SCOTT','SYS:java.io.FilePermission','<<ALL FILES>>','execute'); PL/SQLプロシージャが正常に完了しました。 SQL> SQL> conn scott/tiger SQL> select action,type_name,name,enabled from user_java_policy; ACTION TYPE_NAME NAME ENABLED ---------- ---------------------------------------- ---------------------------------------- ---------------- read java.io.FilePermission <<ALL FILES>> ENABLED java.lang.RuntimePermission accessClassInPackage.* ENABLED java.lang.RuntimePermission defineClassInPackage.* ENABLED java.lang.RuntimePermission getProtectionDomain ENABLED java.lang.RuntimePermission stopThread ENABLED connect, java.net.SocketPermission * ENABLED resolve java.lang.RuntimePermission createSecurityManager ENABLED java.lang.RuntimePermission exitVM ENABLED java.lang.RuntimePermission loadLibrary.* ENABLED java.lang.RuntimePermission modifyThread ENABLED java.lang.RuntimePermission modifyThreadGroup ENABLED java.lang.RuntimePermission preferences ENABLED read java.util.PropertyPermission * ENABLED write java.util.PropertyPermission user.language ENABLED oracle.aurora.rdbms.security.PolicyTable 0:java.lang.RuntimePermission#loadLibrar ENABLED Permission y.* oracle.aurora.security.JServerPermission DUMMY DISABLED oracle.aurora.security.JServerPermission LoadClassInPackage.* ENABLED oracle.aurora.security.JServerPermission LoadClassInPackage.java.* ENABLED oracle.aurora.security.JServerPermission LoadClassInPackage.oracle.aurora.* ENABLED oracle.aurora.security.JServerPermission LoadClassInPackage.oracle.jdbc.* ENABLEDexecute java.io.FilePermission <<ALL FILES>> ENABLED 21行が選択されました。 SQL>
再度、実行してます!
SQL> exec ls('c:¥temp'); BEGIN ls; END; * 行1でエラーが発生しました。: ORA-29532: 不明なJava例外でJavaコールが終了しました: java.security.AccessControlException: the Permission (java.io.FilePermission <<ALL FILES>> execute) has not been granted to SCOTT. The PL/SQL to grant this is dbms_java.grant_permission( 'SCOTT', 'SYS:java.io.FilePermission', '<<ALL FILES>>', 'execute' ) ORA-06512: "SCOTT.LS", 行1 ORA-06512: 行1
なんなんでしょうね。よくわからないエラーメッセージですね。権限はあるのに。
わかりにくいメッセージ。やはりこうでなくちゃ、オラクルは。。なんてね。
イライラしてきたので、javasysprivロール を付与しちゃいました。(セキュリティ面からみれば好ましくないのですけど。)
各クラス毎に実行権限を細かく付与すればうまくいきそうですが、エラーメッセージからは、何のどんな権限が不足しているのか単純には判断できない(予想はつきますけど・・・)ので、この件に関しては別途調べることにして先へ進むことにします。要調査->TODO
SQL> conn / as sysdba 接続されました。 SQL> grant javasyspriv to scott; 権限付与が成功しました。
:-) やっと動いた〜。
SQL> conn scott/tiger 接続されました。 SQL> SQL> set serveroutput on SQL> exec dbms_java.set_output(2000); PL/SQLプロシージャが正常に完了しました。 SQL> exec ls('c:¥temp'); apex_3.0 apex_3.0.zip jdevstudio10131.zip version.log PL/SQLプロシージャが正常に完了しました。 SQL>
なんとか実行できました。。。ね。 (^^;;;;
| 固定リンク | 0
|
| トラックバック (0)
2007年7月 4日 (水)
さて、前回のつづきです。
javaストアドプロシージャのソースは以下の通り。
OSコマンドを実行するjavaの例は、ググればやまほどヒットするので特に解説はなし。
Oracleでjavaストアドプロシージャを作成する方法は、マニュアル「Oracle Database Java開発者ガイド - 3 Oracle DatabaseでのJavaメソッドのコール 」を参照のこと。
基本は前述のマニュアルで足りると思います。(今回は、JDBCも利用していませんし。)
それに加えて、OTN-JのOracleJVM and Java Stored Procedures なども参考になるでしょうね。
以下、Oracle JDeveloper 10.1.3.1 for MacOSXを利用。
package jp.macdeoracle; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.IOException; public class CommandOutputReader extends Thread { private InputStream is; private String lines = ""; public CommandOutputReader(InputStream is) { this.is = is; } public void run() { String outputLine; try { BufferedReader br = new BufferedReader(new InputStreamReader(this.is)); while ((outputLine = br.readLine()) != null) { System.out.println(outputLine); } } catch (IOException e) { e.printStackTrace(); } } }
package jp.macdeoracle; import java.lang.Runtime; import java.lang.SecurityException; import java.io.IOException; public class HostCommandExecuter { public static final String OS_WINDOWS_ = "Windows"; public static final String OS_MACOSX_ = "Mac OS X"; public static final String OS_LINUX_ = "Linux"; private static void exec(String[] command) throws IOException, SecurityException, InterruptedException { Process myproc = Runtime.getRuntime().exec(command); new CommandOutputReader(myproc.getInputStream()).start(); new CommandOutputReader(myproc.getErrorStream()).start(); myproc.waitFor(); } public static void ls(String directory) throws IOException, SecurityException, InterruptedException { String osname = System.getProperty("os.name"); if (osname.indexOf(OS_WINDOWS_) >= 0) { String[] cmd = {"CMD.EXE", "/C", "DIR", "/B", directory}; exec(cmd); } else if ( osname.indexOf(OS_MACOSX_) >= 0 || osname.indexOf(OS_LINUX_) >= 0 ) { String[] cmd = {"/bin/ls", directory}; exec(cmd); } else { throw new IOException(osname + ":このOSには対応していません。"); } } public static void main(String[] args) throws IOException, InterruptedException, SecurityException { ls("."); } }
上記ソースをコンパイルしてOracle Databaseへデプロイ! (以下、Oracle10g R2の例)
うまくいけば以下のようなログが表示される。
loadjavaを接続'Oracle10gR2_Scott'で呼出し中。引数: -order -resolve -definer -force -thin -schema scott -verbose creating : class SCOTT.jp/macdeoracle/CommandOutputReader loading : class SCOTT.jp/macdeoracle/CommandOutputReader creating : class SCOTT.jp/macdeoracle/HostCommandExecuter loading : class SCOTT.jp/macdeoracle/HostCommandExecuter resolving: class SCOTT.jp/macdeoracle/CommandOutputReader resolving: class SCOTT.jp/macdeoracle/HostCommandExecuter Loadjavaが終了しました。 公開が終了しました。 ---- ストアド・プロシージャのデプロイが終了しました ----
次のようなエラーがでたら、J2SE 1.4.xでコンパイルし直してデプロイすべし!
オラクルにしては、わかり易いメッセージじゃ。 (^^)
loadjavaを接続'Oracle9iR2_Scott'で呼出し中。引数: -order -resolve -definer -force -thin -schema scott -verbose creating : class SCOTT.jp/macdeoracle/CommandOutputReader loading : class SCOTT.jp/macdeoracle/CommandOutputReader created : "SCOTT".CREATE$JAVA$LOB$TABLE Error while creating class jp/macdeoracle/CommandOutputReader ソケットから読み込むデータはこれ以上ありません。 Error while testing for existence of dbms_java.handleMd5 Exception java.sql.SQLException: OALL8 is in an inconsistent state. created : "SCOTT".JAVA$CLASS$MD5$TABLE creating : class SCOTT.jp/macdeoracle/HostCommandExecuter loading : class SCOTT.jp/macdeoracle/HostCommandExecuter Error while creating class jp/macdeoracle/HostCommandExecuter ソケットから読み込むデータはこれ以上ありません。 The following operations failed class SCOTT.jp/macdeoracle/CommandOutputReader: creation (createFailed) class SCOTT.jp/macdeoracle/HostCommandExecuter: creation (createFailed) oracle.aurora.server.tools.loadjava.ToolsException: Failures occurred during processing at oracle.aurora.server.tools.loadjava.LoadJava.process(LoadJava.java:863) at oracle.jdeveloper.deploy.tools.OracleLoadjava.deploy(OracleLoadjava.java:116) at oracle.jdeveloper.deploy.tools.OracleLoadjava.deploy(OracleLoadjava.java:46) at oracle.jdevimpl.deploy.OracleDeployer.deploy(OracleDeployer.java:97) at oracle.jdevimpl.deploy.StoredProcHandler.doDeploy(StoredProcHandler.java:473) at oracle.jdevimpl.deploy.StoredProcHandler.doDeploy(StoredProcHandler.java:360) at oracle.jdevimpl.deploy.StoredProcHandler.doDeploy(StoredProcHandler.java:284) at oracle.jdevimpl.deploy.StoredProcProfileDt$Action$1.run(StoredProcProfileDt.java:383) #### デプロイが不完全です #### *** Note *** デプロイ・エラーの可能性の1つとして、ターゲット・データベースがJDKバージョン1.5をサポートしていないことが考えられます。 お使いのプロジェクト・プロパティ・コンパイラのソースとターゲットを古いバージョンに変更することで、この問題を修復できます。 ************
プロジェクトプロパティを開いて、j2se 1.4.2を設定している様子。
今日はここまで。次回へつづく。
| 固定リンク | 0
|
| トラックバック (0)
2007年6月30日 (土)
随分前のネタ(Oracle9i R2は、TurboLinux8 Enterprise Server - Powered by United Linux 1.0と Oracle10g R1 は、MacOSX Pantherの頃なので2005年くらいに公開するタイミングを逃していたネタ)なんですが、検索キーワードやOTN-Jなどでもたまに見かけるので、昔のネタに、Oracle10g R2 for Windowsの例も付け加えて公開することにした。
どんなネタかって? まずは実行結果から。
見ての通り、ストアドプロシージャからDOSコマンドのdirや、shellコマンドのlsを実行してます。
Oracleのストアドプロシージャは、PL/SQL以外に、javaやCでを書くこともできます。
以下の例は、javaストアドプロシージャで DOSコマンドのdirや、shellコマンドのlsを実行しています。
セキュリティ上、なんでもかんでも実行できるようにしたりするのはお勧めしませんが、以前、負荷テストで使ったことがあります。
負荷テスト開始のタイミングで、sarを実行し、テスト終了時に停止させるshellスクリプトを実行してましたね。 いつ終わるかはっきりしないような負荷テストを自動起動し、システム側の状態も同時に記録するといったことを行っていました。
ただ、最近は、DBMS_SCHEDULERパッケージ があるので自前で作らなくてできるとは思いますが。。まぁ、こんなことも出来るんだよね。 っていうことを知ってても損はないんじゃないかと思います。
● Linux (United Linux 1.0 なつかしい〜。)
SCOTT> conn scott@zion パスワードを入力してください: 接続されました。 SCOTT> select * from v$version; BANNER -------------------------------------------------------------------------------- Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production PL/SQL Release 9.2.0.1.0 - Production CORE 9.2.0.1.0 Production TNS for Linux: Version 9.2.0.1.0 - Production NLSRTL Version 9.2.0.1.0 - Production SCOTT> SCOTT> SCOTT> set serveroutput on SCOTT> exec dbms_java.set_output(20000); PL/SQLプロシージャが正常に完了しました。 SCOTT> exec ls('/tmp'); UnitedLinux-1.0-SP-3 i830-20030120-i386-linux.tar.gz turbonetcfg-routing.log turbonetcfg.log PL/SQLプロシージャが正常に完了しました。 SCOTT>
● MacOSX 10.3 Panther
SCOTT> conn scott@panther パスワードを入力してください: 接続されました。 SCOTT> select * from v$version; BANNER ---------------------------------------------------------------- Oracle Database 10g Enterprise Edition Release 10.1.0.3.0 - Prod PL/SQL Release 10.1.0.3.0 - Production CORE 10.1.0.3.0 Production TNS for MacOS X Server: Version 10.1.0.3.0 - Production NLSRTL Version 10.1.0.3.0 - Production SCOTT> set serveroutput on SCOTT> exec dbms_java.set_output(20000); PL/SQLプロシージャが正常に完了しました。 SCOTT> exec ls('/Users/oracle'); Desktop Documents Library Movies Music Pictures Public Sites jdevhome PL/SQLプロシージャが正常に完了しました。 SCOTT>
● Windows XP Professional
SCOTT> conn scott@catfish パスワードを入力してください: 接続されました。 SCOTT> SCOTT> SCOTT> SCOTT> select * from v$version; BANNER ---------------------------------------------------------------- Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 - Prod PL/SQL Release 10.2.0.2.0 - Production CORE 10.2.0.2.0 Production TNS for 32-bit Windows: Version 10.2.0.2.0 - Production NLSRTL Version 10.2.0.2.0 - Production SCOTT> SCOTT> set serveroutput on SCOTT> exec dbms_java.set_output(20000); PL/SQLプロシージャが正常に完了しました。 SCOTT> exec ls('c:¥temp'); apex_3.0 apex_3.0.zip jdevstudio10131.zip version.log PL/SQLプロシージャが正常に完了しました。 SCOTT>
ってとこですね。ほんとにお遊びでした。(笑)
ということで、次回はどうやってOracleのPL/SQL、java、ホストコマンドで遊んでいるかお見せします。
| 固定リンク | 0
|
| トラックバック (0)
2007年5月16日 (水)
Oracle JDBC Driverのバージョンは確認方法は?
マニュアルにしっかり載ってます。
今回は、先日公開された、Oracle JDeveloper11g Technology Preview で試してみた。
ちなみに、接続先は、Oracle10g R2 EE 10.2.0.2.0
よく見えないかもしれないので、ログペインを拡大したスクリーンショットも載せておく。
Oracle JDeveloper11g Technology Preview では、Oracle JDBC Driver 11.1.0.0.0-Alpha が使われているんですね!。
Determining the Version of the JDBC Driver を見れば分かるし、マニュアルからコピペすればよいので、書くまでもないのだが。。。。。。。
読んでないのか!?、見つけられないのか? よく聞かれるのでコードも載せておく。
package jp.macdeoracle.discus; import oracle.jdbc.pool.OracleDataSource; import java.sql.DatabaseMetaData; import java.sql.Connection; import java.sql.SQLException; public class JdbcVersion { public static void main(String[] args) { OracleDataSource ods = null; Connection conn = null; try { ods = new OracleDataSource(); ods.setURL("jdbc:oracle:thin:scott/tiger@192.168.1.2:1521:catfish"); conn = ods.getConnection(); DatabaseMetaData meta = conn.getMetaData(); System.out.println(meta.getDriverName() + "," + meta.getDriverVersion()); } catch (SQLException se) { System.out.println(se.getSQLState()); System.out.println(se.getErrorCode()); } finally { try { if (ods != null && conn != null && !conn.isClosed()) { conn.close(); ods.close(); } } catch (SQLException se){ se.printStackTrace(); } } } }
| 固定リンク | 0
|
| トラックバック (0)
2007年5月 9日 (水)
http://www.oracle.com/technology/products/jdev/index.html でJDeveloper11g Technology Preview版が公開されたので、早速 MacOSX版をダウンロード。
ついでなのでhttp://d.hatena.ne.jp/satonaoki/20070508/p1 で紹介されている スタートページを JDeveloper11gのものに変更するように設定してみた。
● なにもしないと、JDeveloper10gのころのスタートページが表示される。
http://d.hatena.ne.jp/satonaoki/20070508/p1 で紹介されている設定をMacOSX版のJDeveloper11g Technology Previewで行うには、
「JDeveloper11g」を右クリック->ポップアップメニューの「パッケージ内容を表示をクリック」
-> Contents/Resource/jdev/jdev/bin/jdev.confを紹介されているように編集 。
● 編集内容を保存したら再起動。
尚、以前のスタートページが開いていると新しいスタートページが表示されないようなので、もし、JDeveloper10g向けのスタートページが表示されていたら、一旦、スタートページを閉じ、「メニュー」->「Help」->「Start page」で表示させる。
私好みの色合い。。。。。。
| 固定リンク | 0
|
| トラックバック (0)
2007年4月23日 (月)
(有)構築屋 の大山さんに、日本 Java ユーザグループ結成総会/記念講演会 会場で久しぶりにお会いした。
Java One japan 2005で10年ぶりに偶然再会して以来だったかと。。。
そういえば、最初にお会いしたのは、私が Oracle7.1.6 EEデータベースの構築を担当することになった、大山さん率いる? プロジェクトだったと思う。。。。
そう言えば、それって、drmarさん とこの会社と契約してた案件だったっけなぁ。。時の経つのはやはいこと。。。(と独り言。。)
前置きはこれくらにしておいて、
Mac De Oracleは、やはり 、データベース絡みの講演は聞いておかないと。。。ということで
「Javaとデータベース」というタイトルだったが、次期MacOSXにも標準搭載されるという Ruby on Railsのデモも少々気になった。。。Vista上でのデモでしたけど。。
そして、講演の後半で、細川氏のPC、いや、MacBookに気付く。。
え〜〜〜。 BootCampか? Parallels for Mac? を利用し、Vista上でプレゼンしてるじゃありませんか〜〜。
自慢じゃないけど、私、初めて見ましたよ。 MacBookで起動している Vista.....生で。
他に、ウチの奥さんが参加しているプロジェクトで Seaser2を利用しているので、ひがやすを氏の講演も聞いてきた。。。。
ウチの奥さんからもある程度聞いていたけど、よい感触ね。。Seaser2
| 固定リンク | 0
|
| トラックバック (0)
2007年2月 1日 (木)
10万円 de RAC に集中しているうちに、私がやりたかったネタを、先に妻が書いていた。
しまった〜〜〜。ネタを取らないで〜〜〜。==>妻。(笑)
JDev on iMac
JDev on iMac にかぶらないようなネタをやらねば。。。。。。あ、パッチがリリースされている。。。と思ったら、Oracle SQL Developer の方でした。
| 固定リンク | 0
|
| トラックバック (0)
2006年9月28日 (木)
ADCへの登録が必要だが 、Java SE 6.0 Release 1 Developer Preview 6がダウンロードできるようになっている。これまた暇をみて遊んでみますか。。
Java SE 6.0 Release 1 Developer Preview 6
Java SE 6 Release 1 is based on JDK 1.6.0_b88 and brings enhanced functionality to the Java SE platform on Mac OS X v10.4 Tiger. The preview supports both Intel-based and PowerPC-based Macintosh computers and is not removable. Please see the release notes for more information. This is Developer Preview 6 of Java SE 6 Release 1 for Mac OS X Tiger.
| 固定リンク | 0
|
| トラックバック (1)
2006年4月30日 (日)
以前、Software Updateで JDKをアップデートするとデフォルトがJ2SE5.0 Release 4になると書いた が、それに関連する情報が出ていた ので追記しておく。
SafariでJava Consoleを使用する場合 にもこの Java Preferenceアプリケーションを利用するのだが、Java Consoleの有効化以外の設定もJava Preferenceアプリケーションで行える。
Appletを実行するJavaVM、Java Network Launching Protocolを使って起動されるJava Applicationまたは、Appletを実行するJavaVMのバージョンを設定することができる。
Appletを実行するJavaVMの変更。
Java Network Launching Protocolを使って起動されるJava Applicationまたは、Appletを実行するJavaVMのバージョンを変更するには、該当バージョンをドラッグアンドドロップする
注意)Terminalから実行するjavaコマンドには影響しない。
| 固定リンク | 0
|
| トラックバック (0)
2006年4月26日 (水)
先週金曜日のネタ(記事にするには遅過ぎるな)
Sun主催の 緊急開催!! Java パフォーマンスチューニング セミナー に参加してきた。
Java パフォーマンスチューニング セミナーというネタをそのまま取り上げてしまうと、Mac De Oracleのテーマから少々離れすぎるのでは? ということから、異なる視点でレポート。(^^;;
少々遅れてしまったのだが、Java Performance Technique 14:10〜 には間に合った。内容は、セミナー資料が上記URLからダウンロードできる のでそちらを見てもらうとして、
私としては、Sun Microsystems, Inc. Java Performance Team の Menasse Zaudouさんが、15インチの PowerMac G4を使っていたことのほうがうれしかった。(Macユーザ独特な仲間意識もあったり。。私の、PowerBook G4 17inchをちらりと見たりしてね。光ってるリンゴは、目立ちますから)
だた、Menasse ZaudouさんのMac調子が悪かったようで、まだ数回しかみたことの無いMacOSXのPanic画面を2度みることになった。(セミナーも終わり、質問タイムであったためセミナーには影響はなかったのだが。。。)
MacOSXのPanic画面は、おしゃれで(大事なプレゼンなどの際、これに遭遇したらそんなこと言ってられないですけどね)、半透明なダイアログにクラッシュした旨が表示され、再起動してなんてメッセージがでます。
MacOSXのOS Panic画面には、あまりお目にかかったことがなかったので貴重でしたけど。(笑)
以下、まだ、見た事の無い方のために MacOSXの Panic画面(合成して作った画像です)、ほぼ以下のような感じで、MacOSX Panic画面が表示されます。
クラッシュする原因は、いろいろ!(この国の総理みたいな言い回しになってしまった)
ちなみに、
私が過去出会ったMacOSXのクラッシュは以下、
MacOSX 10.1 or 10.0のころ、AirH"のPCカードをモデムの接続が完全に切断される少々前にPCカードを抜いてしまったとき。(2回ほど)
その後 MacOSX 10.2以降では発生していない。PowerBook G4 Ti のころだったと思う。PowerBook G4 17inchにしてからは一度もPanic画面に出会って無いのよね。
ほかには、
昨年だったか?、妻のiMac G5で起動時に連続でクラッシュしたことがあった。
iMac G5に使用されていたコンデンサ( このコンデンサの不良はPCメーカー全体に影響があったものですね )の不良だったようで、Apple Store 渋谷の Genius Barで対面修理してもらった。
| 固定リンク | 0
|
| トラックバック (0)
2006年4月25日 (火)
さて、JDeveloper10g 10.1.3 に入れ替えたところで、JDeveloper10g Updateを行ってみる。いろいろな拡張機能が提供されたり、更新されている。
尚、これらの機能は、米国OTNからダウンロードされるとのことで、
米国OTNへのログインが必要になることもあるようだ。
(今回は、すべてのUpdateをダウンロードしたのだが、
米国OTNへのログインが必要でだった。)
| 固定リンク | 0
|
| トラックバック (0)
2006年4月20日 (木)
2005年12月19日 (月)
Blogに時計を表示している方がいるが、そのほとんどがFlashで作られた時計。 ということで java applet で時計を作るのもいいかなと思い早速追加してみました。
ただ、Safariでアプレットを表示させるのもデバッグするのも初めてだったので Java Console の表示方法がわからなかった。。。
調べてみると、Safariのメニューや環境設定から行うのではなくjava プラグイン設定という別アプリケーションから行うとのこと。
java 1.4.2プラグイン設定は以下にあります。
起動するとこんな画面が現れるので、「java コンソールを使用」チェックボックスをチェックー>「適用」ボタンをクリック。あとは Safari を再起動させ、applet を実行すれば java consoleが起動してくれます。
メモっておいてくれと言われたので備忘録として記録しておく。
| 固定リンク | 0
|
| トラックバック (0)
2005年11月10日 (木)
NetBeans4.1をMacOSX 10.4.3 Tiger にインストールして起動してみたところ。。。(普段は、JDeveloper10gなんだけど JavaOne記念!)
と日本語メニューなど、途中で切れて表示されたりしている箇所がある。。。こんな感じでした。
つづきは、ATSU-LOG で
| 固定リンク | 0
|
| トラックバック (0)
スーツを着ている方の割合がやや多い気がする。。。(この際、ジーンズにトレーナーか、Tシャツで、なんてドレスコード設定したらどんな感じになるのかな〜と想像してみたりする。。ということは置いといて。。詳しくは、ATSU-LOG にて。。
| 固定リンク | 0
|
| トラックバック (0)
2005年11月 9日 (水)
本日、JavaOne初日。 午後からCraig McClanahanさんのセッションに参加。しかし、開始時間を30分間違えていたため到着したときにはセッションが開始されてから10分が過ぎていた...
#MacOSXがらみものは BOFが1つあるだけのようですね。
ということで、詳細は、ATSU-LOG にて。
オラクルさんも準備に大忙し。
| 固定リンク | 0
|
| トラックバック (0)
2005年10月 7日 (金)
Level16 ざっと眺めたら、また、画像ですか! (ちょいとやる気を無くす)
画像扱う問題だと以前に解いた問題と同じ流れになりがちで興味が薄れてきた。
先月中頃に、HTMLDB2.0 が Oracle10g R1 for MacOSX Serverのダウンロードページに追加されていたのでそちらのほうが面白そうだな。Oracle AS Portalのデータベースポートレットのような感じだが。。。
| 固定リンク | 0
|
| トラックバック (0)
2005年10月 3日 (月)
Level 15 は、なんとプログラミングするまでもなく答えが判ってしまった。いきなり、Level 16のページが見えてしまった。(プログラミングもUTL_HTTPと正規表現程度で終わってしまいそうだったのでプログラミングする気も起きず) プログラミングもせずに、Level 15 は終了することにした。 だれの? というタイトルと、HTMLコメントを見れば、すぐに解決できる。簡単すぎて引っ掛けかと思ったほどだった。(実は深読みさせて迷路に誘い込むつもりだったのかもしれないが。。。。)
Level 16 へつづく。
| 固定リンク | 0
|
| トラックバック (0)
2005年10月 1日 (土)
Level14 はそのページにある画像が問題になっているのでLevel 11 の時とやり方はほぼ同じ。違いは、サイズが、### × ### のファイルを新規に作成することだけ。できあがった画像を元に該当するURLをブラウザで開くと、意地悪ともクイズとも言えないようなページが開く。これも簡単なのですぐに Level 15 が見つかる。すぐに謎は解けると思うのでこれ以上は解説はしない。
定番になってしまった JDeveloper10g for Macでjava をdeploy そして、java stored functionとしてラップして実行。(パッケージ化しているが管理しやすくするためである。パッケージ化しなくても問題はない) ユーザ定義関数として利用できるのでSQL文から直接利用できる。(でもディレクトリオブジェクトぐらいは引数で渡すようにしたほうがよかったかも。。)
ただ、正解の画像にある赤いドットが気になったので遊んでみた。(画像は小さいので拡大してみないと判りずらいと思う) このURLを叩けばその絵は間違っているとわざわざ教えてくれるのだが、こんな引っかけに引っかかるるのかな?〜(引っかかっている間もなく答えが判ってしまったのに。)
Level 15へつづく。
| 固定リンク | 0
|
| トラックバック (0)
2005年9月30日 (金)
Eureka! Level 14 は、ヒントを見て仕掛けが判ってしまうほど簡単なのだが、プログラムがバグっていて答えがきれいに描画できていない。ただ、それが何かは判るような状態なのでURLを叩くと、正解! でした。 完結編へつづく。(プログラムを修正してからだが。。)
| 固定リンク | 0
|
| トラックバック (0)
2005年9月11日 (日)
2005年8月18日 (木)
Level11は、 Level7及び、Level9で作成したパッケージを再利用したことと、、Level7で作成したjavaのコードを多少手直ししただけなので書き直したコードは15行程度だった。(全体では、Level7程度のコード量だが。。)
javaのコードの概要は以下のようになる。
1.問題の画像を、オラクルのDirectoryオブジェクトに置く。
3.javax.ImageIO をクラス利用して、外部LOBとして読み込んだ画像の複製を作る。(複製した画像は、背景色を黒にしておく)
4.3.で複製した画像(BLOB)に、2.で取り込んだ画像(外部LOB)から取り出した答えを描画。
5.答えを描画した画像(BLOB)を一時LOBとしてデータベースへ書き出す。 dbms_lob.createTemporary() を利用する。
7.前述のjavaクラスをデータベースへ配布する。(JDeveloper又は、loadjava コマンドを利用する。)
8.SQL*Plusより、Java Stored Procedureとして呼び出せるようにして実行!。Oracleは、MacOSX 10.3.9 Pahtnerに作成した、Oracle10g である。
cube: oracle$ sqlplus scott/tiger SQL*Plus: Release 10.1.0.3.0 - Production on 水 8月 17 00:00:20 2005 Copyright (c) 1982, 2004, Oracle. All rights reserved. Oracle Database 10g Enterprise Edition Release 10.1.0.3.0 - Production With the Partitioning, OLAP and Data Mining options に接続されました。 SQL> !cat level11.sql -- level11 create or replace package level11 as function getAnswer return number; end level11; / show error create or replace package body level11 as function getAnswer return number is language java name 'jp.discus.Level11.getAnswer() return java.lang.Intger'; end level11; / show errors SQL> @level11 パッケージが作成されました。 エラーはありません。 パッケージ本体が作成されました。 エラーはありません。 SQL> set timi on SQL> select 2 case 3 when level11.getanswer() = 1 then 4 '成功' 5 else 6 '失敗' 7 end as "結果" 8 from 9 dual; 結果 ---- 成功 経過: 00:00:05.68 SQL>
実行後、directoryオブジェクトに対応するフォルダには Level11.jpg が作成される。
9.うまくいったようなので結果を見てみよう! (内容はいつものように隠してある)
Level12 へつづく
| 固定リンク | 0
|
| トラックバック (0)
2005年8月15日 (月)
前回の予想通り、 画像の中に答えがあった。Level11 の ページタイトルがヒントになっている簡単な問題でしたねこれも。(Level11はJavaだけで答えが見えてしまうのだが、、、Level7を解いたときと同じ方法で、PL/SQL から呼び出す形にする。 ) 次回、完結編へつづく。
#何年ぶりだろう!? 東京湾大華火祭を見たのは・・・・・。
| 固定リンク | 0
|
| トラックバック (0)
2005年8月11日 (木)
ここのところ忙しくて脳の体操してなかったが久々に再開?!、Python Challenge Level11。 こいつはまた画像に答えが埋め込まれてますね〜おそらく。。。となんとなく思っただけ。。で、疲れてやる気でず。。。
| 固定リンク | 0
|
| トラックバック (0)
2005年7月28日 (木)
Level10は、こんな感じの適性試験があったような記憶が蘇るクイズだな。。。。
Level10では、Level9 の答えに出てくる”やつ”が問題のページにあるのだ。。htmlソースをみると、、お〜、 clickable map じゃないか! またなんか嫌らしい問題にしてんのかな〜。 早速、”やつ”をクリックすると基本認証 が設定してある。おや〜〜これは以前解いた問題と同じだな。。。ということで、やっと問題にたどり着く。入手したテキストファイルが意味不明だったが、眺めているとあるパターンがあることに気づく。あ、、、、なるほど。。。謎は解けた! Level10のページには答えを導きだすためのヒントがあるので、あとはその通りにやればいいはずだ。(最後にひねりが何段かある可能性はあるが。。) あとは、PL/SQL でどうプログラミングするかだな。Level10は、久々に、PL/SQL だけで解けそうな感じがする。 Level 10 完結編につづく。
軽井沢に行きたくなってきた。。。暑い、寝苦しい〜。
| 固定リンク | 0
|
| トラックバック (0)
2005年7月27日 (水)
Oracleのdirectory オブジェクト に対応づけられたOS上のフォルダ(ディレクトリ)には、以下のスナップショットのようにlevel9.jpg というLevel9の答えが作成されている。(このlevel9.jpg は、最初からあるわけでなく、Level9を解いた結果作成された画像である)
(この機能自体がサポートされたのはかなり前なのだが、create directoy文だけでOS上のディレクトリにアクセスできるようになったのは、Oracle9i R2以降である)
level9 という PL/SQL パッケージを作成したのだが、今回はpackageの仕様部だけをネタバレになりそうな関数名などをHogeなどと置換して公開しておこう。
最初の create type文で、ユーザ定義型のコレクションを2つ定義している。見ればわかると思うが、hogehoge_typ型は2次元のコレクションになっている。また、hoge_typ型が、2つのintegerを要素とするコレクションであることも判ると思う。感のよい方はこれを見ただけでもLevel9の答えが判ってしまったかもしれない。。(前日の記事で、「答えを画像ファイルに出力する必要ない。」と書いた理由はこれである )
ではpackage仕様部の解説に移ろう。 最初の2つは、定数なので解説は省略する。getHoge()関数は、単純に2次元のnest tableコレクションを返してくるものである。画像ファイルに答えを描画しないのであればここまでできれば十分である。
私は答えをjpegファイルに出力するので、メモリ上で作成した画像をjpegとして一時LOBとしてOracle10gデータベースの一時記憶域に書き出し、その一時LOBを directoryオブジェクト以下に level9.jpg というファイルとして書き出す処理を作成した。
writeImageFile()プロシージャは、PL/SQLだけで記述してある。プロシージャ名からもある程度想像できると思うが、一時LOBを、指定した directoryオブジェクト以下に指定したファイル名(level9.jpg)で書き出すプロシージャである。(コード量は20行程度) 残りの getAnswer()関数はLevel9を解くためのメイン処理になっおり java stored procedure である。java では画像処理だけを行いそれ以外の処理は、PL/SQLを利用している。(javaのコード量は、jdbcを利用していることもありコメント以外の行は100行程度)
$ cat level9.sql -- Level9 package create or replace type hoge_typ is varray(2) of integer; / create or replace type hogehoge_typ is table of hoge_typ; / create or replace package level9 as c_first constant varchar2(16) := 'first.txt'; c_second constant varchar2(16) := 'second.txt'; function gethoge(which in varchar2) return hogehoge_typ; procedure writeimagefile( directoryname in varchar2, filename in varchar2, srcimage in out nocopy blob ); function getanswer() return boolean; end level9; / show error
コーディング後のloadjavaは、JDeveloper10g for MacOSX Developer Previewを利用している。
SQL*Plusを起動し、level9のパッケージや型を作成後、getAnswer()の実行!
注)いつもの通りネタバレになるので答えそのものは載せていないのであしからず!(そうだと思った〜っ。という声が聞こえてきそうだが。。) 画像を開くとなるほど〜〜〜と思う結果になるのだが、日本人だと50%は間違かもしれない。特に日本語では通常、”それ”を区別していないからだ。(画像をよ〜〜〜く見ると区別できる”もの”があるのだが・・) でも心配しなくてよい。間違っている方の xxx.htmlを入力すると正しいURLへのヒントのページが表示される。(いつの間にか、英語の勉強にもなっている気がする Python Challenge )
Level10 へつづく!
尚、nest tableやVARRAY又は、結合配列(むかしのPL/SQL表相当)を関数の戻り値として返すサンプルやBLOBをdirectoryオブジェクト以下に書き出すPL/SQLの簡単なサンプルは別途掲載するかもしれない。
台風一過、波は高いが気持ちのいい湘南にて。。
| 固定リンク | 0
|
| トラックバック (0)
2005年7月26日 (火)
Level9。 最初はそのページにある画像に疑いを持っていたのだが、htmlソースと、ページタイトルで謎は解けた。 Pythonだと、画像処理用のモジュールをimportすれば20行も必要ないだろう。 PL/SQL+Java(Java Stored Procedure) + Oracle10g では、PL/SQLのコードとJavaのコードを合わせて、100行で収まるかな?といったところ。 今回も、MacOS X Panther 10.3.9に構築した、Oracle10gデータベースと、JDeveloper10g for MacOSX Developer Preview Releaseそして、J2SE 1.4を利用して解いてみる。ただ、この問題では解答をjpegファイルで出力することにした。(ちなみに、画像ファイルにしなくても問題ないと思う)
さて、処理方法は、
Level9のhtmlソースをファイルに保存後、答えを導きだすためのデータ群(2つある)をそれぞれテキストファイル(以下、テキストファイル1、テキストファイル2と呼ぶことにする)にして、Oracle の directory オブジェクトに対応する OS上のフォルダに保存する。さらに、Level9 のページに表示されている画像( good.jpg ) も同じ場所に保存する。 ちなみに、directory オブジェクトには、書き込み権限と読み込み権限が付与されていること。
最初に、VARRAYまたは、NEST TABLEをを利用した2次元のユーザ定義型を create type文で作成する。私は1次元目のコレクションは、NEST TABLE、2次元目のコレクションには、VARRAYを利用した。
テキストファイル1と2をutl_fileパッケージを利用して読み込み必要な形に変換する関数を作成する。この関数はPL/SQLだけで記述する。正規表現関数と前述の2次元コレクションも利用する。
good.jpgファイルをBFILEとして返す関数を作成(ただし、Level7で作成したものをそのまま再利用)。これもPL/SQLだけである。utl_fileパッケージを利用している。なぜ、good.jpgを読み込むのかといえば、答えを描画する画像のサイズを good.jpgと同じにしたいということが理由である。答えとなる画像は、黒背景に白で答えを描画する。
次のプロシージャが大事なのだが、BLOB を directory オブジェクト に書き出すプロシージャを作成する。このプロシージャは、DBMS_LOBパッケージ及び、UTLFILEパッケージを利用する。PL/SQLだけで記述する。このプロシージャで答えを描画したjpegファイルを Oracle管理下の directory オブジェクトに書き出すという仕掛けである。
最後に、java stored procedureなのだが、このプロシージャに対応する java classでは
前述したPL/SQL関数を使って、問題のデータ(テキストファイル1と2及び、 good.jpgファイル)を読み込み、”答えをjpegファイル(BLOB)として作成する。
作成したjpegファイル(BLOB)を前述したPL/SQLのプロシージャを利用して、directoryオブジェクト以下に書き出す。(DBMS_LOBパッケージを利用し、一時LOBにjpegを仮作成。仮作成した一時LOBをjpegファイルとして書き出すという方法をとる)
思いついた方法を書いただけなのだが、これでうまく解けると思う。(画像処理については、PL/SQLだけでは無理なので、その部分を Javaで行う)
Level9 完結編へつづく。。。 あ、そういえば、 PowerMac G5 Dual 2.7Ghzが到着して、 MacOS X Server Tiger 10.4.2 はセットアップできたので、 そろそろ Tiger Server De Oracle10g ( Oracle10g が Tiger未対応なので無理矢理構築するのだが。。。) をやりますか。。。。
| 固定リンク | 0
|
| トラックバック (0)
2005年7月25日 (月)
Python challenge Level8 を解いてみた。 PL/SQL とJava とOracle を使って解くと結構大変なことも多々あるなぁ。。。それを承知でやっているのではあるが。。。(^^;;;
Python challenge Level8 のヒントは前回の通り、「ブンブン蜂が飛ぶ。その音」 (もちろん英語で)。
Python Global Module Index にあるどのモジュールを利用するのかがわかれば簡単で、Python では3行で解けてしまった。
しかし、PL/SQL +Java +Oracle10g では手こずった。プログラミング以前に、PL/SQL やJava (J2SE )にもPython のモジュールに該当するものがないのである。
検索したところ、Apache Ant プロジェクトに同じ機能を持つpackageがあることを発見した。(Ant 全体ではなく該当部分だけが jar として公開されていたのでそれを利用することにした。)
そのページのNOTE部分には大事なことが書いてある。それを読まないで該当packageを利用するとハマるので注意。(私はまる一日ハマってしまった)ネタバレになるので、そのページのURLは書かない。自分で探してもらいたい。
今回は、以下のように level8 というPL/SQL パッケージを作成した。(Level7 と同様に、MacOS X Panther 10.3.9にインストールしたOracle10g 10.1.0.3 を利用している )
SQL> desc level8 FUNCTION GETANSWER RETURNS VARCHAR2 FUNCTION GETPS RETURNS VARCHAR2 FUNCTION GETBLOBSOURCE RETURNS BLOB 引数名 タイプ In/Out Default? ------------------------------ ----------------------- ------ -------- SOURCE VARCHAR2 IN FUNCTION GETUN RETURNS VARCHAR2 SQL>
PL/SQL のコードはネタバレになるのでいつもの通り非公開だが、作成手順やネタバレにならない程度の概要は書いておく。
getUn() 関数と getPs() 関数は、Level8の問題そのものを取得する
PL/SQL だけで記述した関数である。長い文字列なので入力の手間を省く為に
PL/SQL package中のプライベート定数としてあり、その文字列を取得するだけの関数である。。
コード量は、それぞれ数行程度だった。
getBlobSource() 関数は、getUn()関数、getPs()関数の戻り値を入力して、加工後、
BLOB として返す。これも
PL/SQL だけで記述した関数である。どんな加工を行ったのか詳細は書かないが
エスケープシーケンス を含む文字列を処理したとだけ書いておく。
Oracle では特定の関数などで
エスケープシーケンス を利用するものがあるが、それ以外では通常の文字列として扱われるのでこの処理がポイントになるのではないかと思う。
Oracle10g 新機能である正規表現関数はすべて利用した。
コード量は、20行程度だった。
getAnswer() 関数は、getBlobSource()関数を呼び出し、戻り値から解答を取り出だすjava stored function としてある。この関数はラップされている method内で、
Apache ant
に含まれているあるpackage (
jar ファイルは該当package分だけ入手可能 )を利用している。
javaのコード量は、60行〜70行程度だった。
手順も書いておく。
1.入手したjarファイル(Apache antの該当packageだけの jar)を loadjava コマンドを利用して、Oracleにロードする。
例) jarファイル名などは隠してあります。(それを見せたらネタバレなので)cube: oracle$ loadjava -v -user scott/tiger xxxxx.jar arguments: '-v' '-user' 'scott/tiger' 'xxxxx.jar' identical: META-INF/MANIFEST.MF identical: org/apache/xxxxxxxxxxxxxxxxxxxxxxxxxxxx identical: org/apache/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx identical: org/apache/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx identical: org/apache/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx identical: org/apache/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx identical: org/apache/xxxxxxxxxxxxxxxxx identical: META-INF/LICENSE.txt cube: oracle$
2.getUn()、getPs()、getBlobSource()までをPL/SQLだけで実する。
3.getAnswer()でラップする java classを実装及びテストする。 1のjarファイルはライブラリとして必要。(このclassで、getBlobSource()を jdbc を利用して実行する)。
4.3で作成した classを loadjava または、JDeveloper10g Developer Preview for MacOSX で、データベースにロードする。
以下、実行結果のスナップショット(いつものように答えは隠してある)。
Level9へつづく。
| 固定リンク | 0
|
| トラックバック (0)
2005年7月20日 (水)
Pythonなら3行程度で終わりそうな問題だ。しかし、PL/SQL+Javaでやるにはちょいと面倒かもしれない。いくつかポイントはあるのだが、escapeシーケンスと”ブンブンブン”蜂が飛ぶ〜〜がヒントになるpython global moduleだ。javaのJ2SEにはそのようなパッケージはないし、もちろん、PL/SQLやオラクルにはない。javaだと、apache ant に ”それ” に相当するパッケージがあるのだが使えるのかな? 調べるしかない・・・。
| 固定リンク | 0
|
| トラックバック (0)
2005年7月19日 (火)
前回、「PL/SQL で Python Challenge 7 残念!」 でPL/SQL+Oracle10gで解くことを断念するつもりだった。しかし、Python Challenge の問題自体の面白さに、再開することにしたのだ!。 再開するにあたり、PL/SQL では面倒な部分(例えば、画像処理とか)だけを、Java (Java stored procedure) で解くことにした。(場合によっては、Java で解く部分がクイズの核心だったりするが・・・)
java stored procedureを利用したことで、Level7は簡単に解けた。それなりにひねりの効いた問題だったが、java stored procedureを利用した箇所以外は、Level7以前の問題を解く中で利用してきた機能や関数で十分解ける問題だった。
| 固定リンク | 0
|
| トラックバック (0)
最近のコメント