2026年2月 5日 (木)

Oracle Database - Multi Row INSERT、バインド変数を使うとリテラル値を使う場合では見える景色が変わるんだよね #最終回 - ぐるぐるしちゃう影響

Previously on Mac De Oracle
Oracle Database - Multi Row INSERT、バインド変数を使うとリテラル値を使う場合では見える景色が変わるんだよね #4 - The SQL was transformed!

前回は、Multi row Insertをリモート表へインサートするとSQL transformの影響で、
DUAL表アクセスがオーバーヘッドとなり Multi row Insertのメリットが削がれてしまう(現時点の仕様では)ということを確認しました!
偶々リモート表に実行したから気づけたわけですがw。あの仕様に気付けたのはラッキーというべきかw


ということで、脇道にそれまくったこのシリーズも、やっと最終回です!


リモート表を使ってぐるぐるしてネットワークラウンドトリップを乗せる必要はなくて、
それが自然に乗るAPサーバーとDBサーバー間の状況を作ればよいだけなので、
最終回は素直にw
JavaからOracle Databaseへアクセスしローカル表に対してぐるぐるしちゃいながら、
Single row insert を繰り返すぐるぐる系と、
Multi row insert を利用して、ゆるやかに、ぐーるぐーるするタイプで 100,000 行を登録してみようと思いますw

N+1問題の類とネットワークラウンドトリップとネットワークレイテンシーと、コミット間隔などパラメータは多いですが、だいたい 100 - 1000 行程度付近前後にリーズナブルなポイントが現れていますよね。。。
(ちなにみSQL*Netのパラメータ等はデフォのままです。また、リモート表ではないので、OPEN_CURSORSもデフォルトのままの 300 で問題ありません。参考まで) 

バインド変数利用と、どの程度の単位でまとめてインサートするか、コミットの間隔など沢山のパラメータがあるので、そららの様子をみながら表を見てもらうと面白いと思います。
なお、いつものように後半にログと利用したコードなどをまとめて載せています。
(今回は、生成AIのGeminiくんにサクッと書いてもらいましたw)

Multi Row Insertで、100 - 1000行程度まとめるとメモリにもCPUにも優しくなりますね。単純に、1行毎ぐるぐるすると無駄が多くなるのは一目瞭然だと思います。

Oracle-database-multi-row-insert-5-1

一応、ログは以下のような感じ。
Client -> Datatabase - Single row Insert / commit間隔の調整
いわゆる、普通のぐるぐる系ですw

[oracle@arm64-oraclelinux8u10 ~]$ java -classpath ./:$CLASSPATH Oracle23aiDynamicBulkLoad 100000 1 1; ./post_process.sh

...略...

Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
Version 23.8.0.25.04
に接続されました。

SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
212 CPU used by this session 4
212 CPU used when call started 1
212 SQL*Net roundtrips to/from client 2
...略...
212 execute count 621
...略...
212 parse count (hard) 100
212 parse count (total) 144
212 parse time cpu 2
212 parse time elapsed 2
...略...
212 session pga memory 3337208
212 session pga memory max 5189280
212 session uga memory 1904696
212 session uga memory max 3119464
...略...

ロード開始: 総計 100000 行 (チャンクサイズ: 1 コミット間隔: 1)
完了! 総時間: 43.42 秒

...略...

SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
212 CPU used by this session 694
212 CPU used when call started 694
...略...
212 SQL*Net roundtrips to/from client 200002
...略...
212 execute count 100669
...略...
212 parse count (hard) 106
212 parse count (total) 100149
212 parse time cpu 4
212 parse time elapsed 23
...略...
212 session pga memory 3402744
212 session pga memory max 5189280
212 session uga memory 1904696
212 session uga memory max 3119464
...略...
212 user commits 100000

...略...

COUNT(1)
----------
100000

SEGMENT_NAME MB
------------------------------ ----------
MROWS_INS_TAB 45

表が切り捨てられました。

[oracle@arm64-oraclelinux8u10 ~]$ java -classpath ./:$CLASSPATH Oracle23aiDynamicBulkLoad 100000 1 10; ./post_process.sh

...略...

SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
176 CPU used by this session 4
176 CPU used when call started 1
176 SQL*Net roundtrips to/from client 2
...略...
176 execute count 417
...略...
176 parse count (hard) 78
176 parse count (total) 126
176 parse time cpu 5
176 parse time elapsed 5
...略...
176 session pga memory 3026592
176 session pga memory max 5123744
176 session uga memory 1773632
176 session uga memory max 3053928
...略...

ロード開始: 総計 100000 行 (チャンクサイズ: 1 コミット間隔: 10)
完了! 総時間: 43.25 秒

...略...

SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
176 CPU used by this session 705
176 CPU used when call started 705
...略...
176 SQL*Net roundtrips to/from client 200002
...略...
176 execute count 100441
...略...
176 parse count (hard) 81
176 parse count (total) 100129
176 parse time cpu 9
176 parse time elapsed 21
...略...
176 session pga memory 3026592
176 session pga memory max 5123744
176 session uga memory 1773632
176 session uga memory max 3053928
...略...
176 user commits 100000
...略...

COUNT(1)
----------
100000

...略...

[oracle@arm64-oraclelinux8u10 ~]$ java -classpath ./:$CLASSPATH Oracle23aiDynamicBulkLoad 100000 1 100; ./post_process.sh

...略...

SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
44 CPU used by this session 5
44 CPU used when call started 1
44 SQL*Net roundtrips to/from client 2
...略...
44 execute count 621
...略...
44 parse count (hard) 100
44 parse count (total) 144
44 parse time cpu 4
44 parse time elapsed 6
...略...
44 session logical reads 2518
44 session pga memory 3206136
44 session pga memory max 5123744
44 session uga memory 1904800
44 session uga memory max 3054064
...略...

ロード開始: 総計 100000 行 (チャンクサイズ: 1 コミット間隔: 100)
完了! 総時間: 43.68 秒

...略...

SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
44 CPU used by this session 723
44 CPU used when call started 723
...略...
44 SQL*Net roundtrips to/from client 200002
...略...
44 execute count 100669
...略...
44 parse count (hard) 106
44 parse count (total) 100149
44 parse time cpu 8
44 parse time elapsed 28
...略...
44 session pga memory 3271672
44 session pga memory max 5123744
44 session uga memory 1904800
44 session uga memory max 3054064
...略...
44 user commits 100000
...略...

COUNT(1)
----------
100000
...略...

[oracle@arm64-oraclelinux8u10 ~]$ java -classpath ./:$CLASSPATH Oracle23aiDynamicBulkLoad 100000 1 1000; ./post_process.sh

...略...

SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
39 CPU used by this session 4
39 CPU used when call started 1
39 SQL*Net roundtrips to/from client 2
...略...
39 execute count 621
...略...
39 parse count (hard) 100
39 parse count (total) 144
39 parse time cpu 3
39 parse time elapsed 1
...略...
39 session pga memory 3206136
39 session pga memory max 5123744
39 session uga memory 1904800
39 session uga memory max 3054064
...略...

ロード開始: 総計 100000 行 (チャンクサイズ: 1 コミット間隔: 1000)
完了! 総時間: 42.41 秒

...略...

SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
39 CPU used by this session 698
39 CPU used when call started 698
...略...
39 SQL*Net roundtrips to/from client 200002
...略...
39 execute count 100669
...略...
39 parse count (hard) 106
39 parse count (total) 100149
39 parse time cpu 10
39 parse time elapsed 23
...略...
39 session pga memory 3271672
39 session pga memory max 5123744
39 session uga memory 1904800
39 session uga memory max 3054064
...略...
39 user commits 100000

...略...

COUNT(1)
----------
100000

...略...

[oracle@arm64-oraclelinux8u10 ~]$ java -classpath ./:$CLASSPATH Oracle23aiDynamicBulkLoad 100000 1 10000; ./post_process.sh

...略...

SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
176 CPU used by this session 3
176 CPU used when call started 1
176 SQL*Net roundtrips to/from client 2
...略...
176 execute count 621
...略...
176 parse count (hard) 100
176 parse count (total) 144
176 parse time cpu 1
176 parse time elapsed 3
...略...
176 session pga memory 3206136
176 session pga memory max 5123744
176 session uga memory 1904800
176 session uga memory max 3054064
...略...

ロード開始: 総計 100000 行 (チャンクサイズ: 1 コミット間隔: 10000)
完了! 総時間: 41.98 秒

...略...

SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
176 CPU used by this session 673
176 CPU used when call started 673
...略...
176 SQL*Net roundtrips to/from client 200002
...略...
176 execute count 100669
...略...
176 parse count (hard) 106
176 parse count (total) 100149
176 parse time cpu 6
176 parse time elapsed 22
...略...
176 session pga memory 3271672
176 session pga memory max 5123744
176 session uga memory 1904800
176 session uga memory max 3054064
...略...
176 user commits 100000

...略...

COUNT(1)
----------
100000

...略...

[oracle@arm64-oraclelinux8u10 ~]$ java -classpath ./:$CLASSPATH Oracle23aiDynamicBulkLoad 100000 1 100000; ./post_process.sh

...略...

SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
176 CPU used by this session 5
176 CPU used when call started 1
176 SQL*Net roundtrips to/from client 2
...略...
176 execute count 621
...略...
176 parse count (hard) 100
176 parse count (total) 144
176 parse time cpu 1
176 parse time elapsed 3
...略...
176 session pga memory 3206136
176 session pga memory max 5123744
176 session uga memory 1904800
176 session uga memory max 3054064
...略...

ロード開始: 総計 100000 行 (チャンクサイズ: 1 コミット間隔: 100000)
完了! 総時間: 41.62 秒

...略...

SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
176 CPU used by this session 698
176 CPU used when call started 698
...略...
176 SQL*Net roundtrips to/from client 200002
...略...
176 execute count 100669
...略...
176 parse count (hard) 106
176 parse count (total) 100149
176 parse time cpu 4
176 parse time elapsed 26
...略...
176 session pga memory 3271672
176 session pga memory max 5123744
176 session uga memory 1904800
176 session uga memory max 3054064
...略...
176 user commits 100000
...略...

COUNT(1)
----------
100000

...略...


Client -> Datatabase - Multi row Insert / バルクロード行数調整
Multi row Insertなので繰り返し実行ではありますが、ぐるぐる というより、ぐーーーーる、ぐーーーーる系な感じw です。( N+1だと ぐるぐる、ぐーーーる、ぐーーるの違いを表現できなーーーいw )

[oracle@arm64-oraclelinux8u10 ~]$ java -classpath ./:$CLASSPATH Oracle23aiDynamicBulkLoad 100000 10 1; ./post_process.sh
...略...

SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
38 CPU used by this session 4
38 CPU used when call started 1
38 SQL*Net roundtrips to/from client 2
...略...
38 execute count 621
...略...
38 parse count (hard) 100
38 parse count (total) 144
38 parse time cpu 2
38 parse time elapsed 5
...略...
38 session pga memory 3206136
38 session pga memory max 5123744
38 session uga memory 1904800
38 session uga memory max 3054064
...略...

ロード開始: 総計 100000 行 (チャンクサイズ: 10 コミット間隔: 1)
完了! 総時間: 5.44 秒

...略...

SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
38 CPU used by this session 98
38 CPU used when call started 98
38 SQL*Net roundtrips to/from client 20002
...略...
38 execute count 10719
...略...
38 parse count (hard) 107
38 parse count (total) 10154
38 parse time cpu 5
38 parse time elapsed 10
...略...
38 session pga memory 3337208
38 session pga memory max 5123744
38 session uga memory 1970280
38 session uga memory max 3054064
...略...
38 user commits 10000

...略...

COUNT(1)
----------
100000

...略...

[oracle@arm64-oraclelinux8u10 ~]$ java -classpath ./:$CLASSPATH Oracle23aiDynamicBulkLoad 100000 100 1; ./post_process.sh

...略...

SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
38 CPU used by this session 4
38 CPU used when call started 1
38 SQL*Net roundtrips to/from client 2
...略...
38 execute count 621
...略...
38 parse count (hard) 100
38 parse count (total) 144
38 parse time cpu 2
38 parse time elapsed 2
...略...
38 session pga memory 3206136
38 session pga memory max 5123744
38 session uga memory 1904800
38 session uga memory max 3054064
...略...

ロード開始: 総計 100000 行 (チャンクサイズ: 100 コミット間隔: 1)
完了! 総時間: 1.34 秒

...略...

SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
38 CPU used by this session 35
38 CPU used when call started 35
38 SQL*Net roundtrips to/from client 2002
...略...
38 execute count 1719
...略...
38 parse count (hard) 107
38 parse count (total) 1154
38 parse time cpu 2
38 parse time elapsed 2
...略...
38 session pga memory 3795960
38 session pga memory max 7400440
38 session uga memory 2101240
38 session uga memory max 3054064
...略...
38 user commits 1000
...略...

COUNT(1)
----------
100000

...略...

[oracle@arm64-oraclelinux8u10 ~]$ java -classpath ./:$CLASSPATH Oracle23aiDynamicBulkLoad 100000 1000 1; ./post_process.sh

...略...

SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
38 CPU used by this session 5
38 CPU used when call started 1
38 SQL*Net roundtrips to/from client 2
...略...
38 execute count 621
...略...
38 parse count (hard) 100
38 parse count (total) 144
38 parse time cpu 3
38 parse time elapsed 3
...略...
38 session pga memory 3206136
38 session pga memory max 5123744
38 session uga memory 1904800
38 session uga memory max 3054064
...略...

ロード開始: 総計 100000 行 (チャンクサイズ: 1000 コミット間隔: 1)
完了! 総時間: 1.21 秒

...略...

SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
38 CPU used by this session 63
38 CPU used when call started 63
38 SQL*Net roundtrips to/from client 202
...略...
38 execute count 819
...略...
38 parse count (hard) 107
38 parse count (total) 254
38 parse time cpu 9
38 parse time elapsed 11
...略...
38 session pga memory 3533816
38 session pga memory max 34925560
38 session uga memory 2232200
38 session uga memory max 5702640
...略...
38 user commits 100
...略...

COUNT(1)
----------
100000

...略...

[oracle@arm64-oraclelinux8u10 ~]$ java -classpath ./:$CLASSPATH Oracle23aiDynamicBulkLoad 100000 10000 1; ./post_process.sh

...略...

SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
19 CPU used by this session 5
19 CPU used when call started 2
19 SQL*Net roundtrips to/from client 2
...略...
19 execute count 559
...略...
19 parse count (hard) 100
19 parse count (total) 142
19 parse time cpu 5
19 parse time elapsed 3
...略...
19 session pga memory 3271672
19 session pga memory max 5123744
19 session uga memory 1899488
19 session uga memory max 3053984
...略...

ロード開始: 総計 100000 行 (チャンクサイズ: 10000 コミット間隔: 1)
完了! 総時間: 33.74 秒

...略...

SID NAME VALUE
---------- ---------------------------------------------------------------- ----------
19 CPU used by this session 3334
19 CPU used when call started 3334
19 SQL*Net roundtrips to/from client 22
...略...
19 execute count 667
...略...
19 parse count (hard) 107
19 parse count (total) 162
19 parse time cpu 728
19 parse time elapsed 730
...略...
19 session pga memory 6286328
19 session pga memory max 286518264
19 session uga memory 5043712
19 session uga memory max 31643696
...略...
19 user commits 10

...略...

COUNT(1)
----------
100000

...略...


ふーーーっ。

完!


では、また、別のネタでお会いしましょう :)





テスト環境の情報
macOS Apple SiliconのVirtualBox
oracle@Mac ~ % ./print_env.sh 

*** mac info. ***
Model Name: MacBook Air
Chip: Apple M2
Total Number of Cores: 8 (4 performance and 4 efficiency)
Memory: 24 GB

*** macOS ver. ***
ProductName: macOS
ProductVersion: 26.2
BuildVersion: 25C56

*** VirtualBox ver. ***
7.2.4r170995

VMのOS、および、Java

[oracle@arm64-oraclelinux8u10 ~]$ java -version
openjdk version "11.0.25" 2024-10-15 LTS
OpenJDK Runtime Environment (Red_Hat-11.0.25.0.9-1.0.1) (build 11.0.25+9-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.25.0.9-1.0.1) (build 11.0.25+9-LTS, mixed mode, sharing)


[oracle@arm64-oraclelinux8u10 ~]$ uname -rpo
5.15.0-313.189.5.3.el8uek.aarch64 aarch64 GNU/Linux
[oracle@arm64-oraclelinux8u10 ~]$ cat /etc/os-release
NAME="Oracle Linux Server"
VERSION="8.10"

...略...


ソース

[oracle@arm64-oraclelinux8u10 ~]$ cat show_mrows_ins_tab_size.sql
select segment_name,bytes/1024/1024 as "MB" from dba_segments where owner='SCOTT' and segment_name = upper('mrows_ins_tab')
/

[oracle@arm64-oraclelinux8u10 ~]$ cat post_process.sh
sqlplus system/hogehoge@localhost:1521/freepdb1 @post_process
[oracle@arm64-oraclelinux8u10 ~]$ cat post_process.sql
SELECT COUNT(1) FROM scott.mrows_ins_tab
/

@show_mrows_ins_tab_size

truncate table scott.mrows_ins_tab
/
exit


[oracle@arm64-oraclelinux8u10 ~]$ cat show_mystats.sh
sqlplus system/hogehoge@localhost:1521/freepdb1 @show_mystats2 scott

[oracle@arm64-oraclelinux8u10 ~]$ cat show_mystats2.sql
set veri off
SELECT
s.sid,
n.name,
s.value
FROM
v$sesstat s
INNER JOIN v$statname n
ON
s.statistic# = n.statistic#
AND s.sid = (SELECT sid FROM v$session WHERE username = UPPER('&1'))
WHERE
s.value > 0
AND (
n.name LIKE '%memory%'
OR n.name LIKE '%CPU%'
OR n.name LIKE '%I/O%'
OR n.name LIKE '%write%'
OR n.name LIKE '%read%'
OR n.name LIKE 'redo%'
OR n.name LIKE 'SQL*Net%'
OR n.name LIKE '%commit%'
OR n.name LIKE 'execute count'
OR n.name LIKE 'parse%'
)
ORDER BY
n.name;

UNDEFINE 1
set veri on
exit


Geminiくんに書いてもらったJavaのコードw

[oracle@arm64-oraclelinux8u10 ~]$ cat Oracle23aiDynamicBulkLoad.java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.io.IOException;
import java.io.InputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Collections;

public class Oracle23aiDynamicBulkLoad {

private static final String URL = "jdbc:oracle:thin:@localhost:1521/freepdb1";
private static final String USER = "scott";
private static final String PASSWORD = "hogehoge";

public static void main(String[] args) {
// インサートする行数、デフォルト値(10万行)
int totalRows = (args.length > 0) ? Integer.parseInt(args[0]) : 100000;
// 1回あたりの同時インサート行数、デフォルト100行
int chunkSize = (args.length > 1) ? Integer.parseInt(args[1]) : 100;
// commit interval, デフォルト1行
int commitInterval = (args.length > 2) ? Integer.parseInt(args[2]) : 1;


try (Connection conn = DriverManager.getConnection(URL, USER, PASSWORD)) {
conn.setAutoCommit(false);
showSessionStats();

System.out.println("ロード開始: 総計 " + totalRows + " 行 (チャンクサイズ: " + chunkSize + " コミット間隔: " + commitInterval + ")");
long startTime = System.currentTimeMillis();

for (int i = 0; i < totalRows; i += chunkSize) {
int currentBatchSize = Math.min(chunkSize, totalRows - i);
executeMultiRowInsert(conn, i, currentBatchSize);

if (chunkSize == 1 && (i % commitInterval) == 0) {
conn.commit();
} else {
conn.commit();
}
}

long endTime = System.currentTimeMillis();
System.out.printf("完了! 総時間: %.2f 秒%n", (endTime - startTime) / 1000.0);

showSessionStats();
conn.disconnect();

} catch (SQLException e) {
e.printStackTrace();
}
}

public static void showSessionStats() {
try {
ProcessBuilder pb = new ProcessBuilder("/bin/bash", "-c", "/home/oracle/show_mystats.sh");
Process process = pb.start();

// 結果の取得
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);

String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}

// 終了コードを取得
int exitCode = process.waitFor();
System.out.println("Exited with code: " + exitCode);

} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}

private static String lpad(String original, int length, String padChar) {
if (original.length() >= length) return original;
return padChar.repeat(length - original.length()) + original;
}

private static void executeMultiRowInsert(Connection conn, int offset, int rowCount) throws SQLException {
String rowPlaceholder = "(?, ?)";
String allPlaceholders = String.join(", ", Collections.nCopies(rowCount, rowPlaceholder));

String sql = "INSERT /* MONITOR */ INTO mrows_ins_tab (id, col8) VALUES " + allPlaceholders;

try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
for (int i = 0; i < rowCount; i++) {
int id = offset + i + 1;
int baseIdx = i * 2;
String col8 = lpad(String.valueOf(id), 373, "x");
pstmt.setInt(baseIdx + 1, id);
pstmt.setString(baseIdx + 2, col8);
}
pstmt.executeUpdate();
}
}
}






関連エントリ
帰ってきた! 標準はあるにはあるが癖の多いSQL #20 - Table Value Constructer (TVC)
帰ってきた! 標準はあるにはあるが癖の多いSQL #21 - Table Value Constructer(TVC)- ハードパース時間とメモリ消費量 / BONUS TRACK
帰ってきた! 標準はあるにはあるが癖の多いSQL #22 - Multi Row INSERT
Oracle Database - Multi Row INSERT、バインド変数を使うと、リテラル値を使う場合では見える景色が変わるんだよね #1 - バグなのか現時点の仕様なのか?
Oracle Database - Multi Row INSERT、バインド変数を使うとリテラル値を使う場合では見える景色が変わるんだよね #2
Oracle Database - Multi Row INSERT、バインド変数を使うとリテラル値を使う場合では見える景色が変わるんだよね #3 - ローカル表とリモート表での挙動の差異?!
Oracle Database - Multi Row INSERT、バインド変数を使うとリテラル値を使う場合では見える景色が変わるんだよね #4 - The SQL was transformed!

| | | コメント (0)

2013年12月 9日 (月)

no ocijdbc11 in java.library.path on OS X Mavericks

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_environment_variables


Oracle SQL Developer 4.0 for OS X

「Oracle SQL Developerメニュー」→「Preference...」を選択
002_sdev_004

「データベース」→「拡張」→「OCI/Thickドライバの使用」チェックボックス」をチェック→「テスト」ボタンをクリック
002_sdev_005

no ocijdbc11 in java.library.pathエラーとなる(ライブラリーへのパスが通ってないので当然ですよね)
002_sdev_006

「Finder」→「アプリケーション」→「SQL Developer」→「右クリック」→ポップアップメニューの「パッケージの内容表示」
002_sdev_009

「Contents」→「MacOS」→「sqldeveloper.sh」を選択
002_sdev_010

ポップアップメニュー「このアプリケーションで開く」でお好きなテキストエティタを選択
002_sdev_012

oracle向け環境設定ファイルを読み込ませるように編集。この例ではユーザーホームディレクトリにある oracleenvというファイルを読み込むように変更。
002_sdev_013

Oracle SQL Developer 4.0を再起動しOCI/Thick JDBCドライバーで接続可能か再確認
002_sdev_014

002_sdev_015


Oracle JDeveloper12c 12.1.2.0.0 Studio Edition Generic

「データベース接続編集」ダイアログの「接続のテスト」ボタンをクリックするとno ocijdbc11 in java.library.pathエラー(これもパスが通ってないのが原因なので...)
003_jdev_002

003_jdev_003

「Finder」でOracle JDeveloper12cのインストールディレクトリーからアプリケーション「JDeveloper」を右クリック
→ポップアップメニューの「パッケージの内容を表示」を選択

003_jdev_004

「Contents」→「MacOS」→「JDeveloper」を選択して右クリック→「このアプリケーションを開く」でお好きなテキストエディタを選択
003_jdev_005

oracle向け環境設定ファイルを読み込ませるように編集。この例ではユーザーホームディレクトリにある oracleenvというファイルを読み込むように変更。
003_jdev_006

Oracle JDeveloper12cを再起動し、OCI/Thick JDBCドライバーで接続可能か再確認
003_jdev_007

003_jdev_008


明日は、@dekasasaki さんの担当です。引き続き、JPOUG Advent Calendar 2013をお楽しみください。:)


| | | コメント (0) | トラックバック (0)

2013年2月 3日 (日)

jdk-7u13にアップデート

http://docs.oracle.com/javase/


20130203_61623


| | | コメント (0) | トラックバック (0)

2013年1月14日 (月)

Alert (TA13-010A) - Oracle Java 7 Security Manager Bypass Vulnerability ということで..

Alert (TA13-010A) - Oracle Java 7 Security Manager Bypass Vulnerability

MozillaやApple、Javaの未解決の脆弱性に対処 Javaプラグインを無効に - http://www.itmedia.co.jp/news/articles/1301/13/news007.html


[Java] Java SE 7 Update 11 Released - http://orablogs-jp.blogspot.jp/2013/01/java-se-7-update-11-released.html

Java SE Development Kit 7 Downloads -http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

ということでMac De Oracleのサイトで1999年2006年から公開していたClockや日本の借金時計java appletやブログを始める前から使っていたJava Clock appletなど古くさいまんま放置状態だったので一旦外しておきました。ブロックしたプラグインなんて表示になるので見た目も良くないし。

javascript化するか、そろそろ.


20130114_112514


20130114_112534

そして、Java SE 7 Update 11 へ。

現在、Software updateでJava 7 SE Update 11は以下のように表示されるけどインストールはできないみたいです。

20130114_115846

Oracleのサイトからはダウンロードでダウンロードできるね (^^;;;;
Java SE Development Kit 7 Downloads -http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

20130114_120804


20130114_120808


20130114_120813


20130114_120853


20130114_120908


20130114_120914


| | | コメント (0) | トラックバック (0)

2012年12月15日 (土)

Java 7 Update 10

きてた。

20121215_60343

20121215_60403


avaってなんだw ABBA (違

20121215_60412

20121215_60433

20121215_60443

done.


| | | コメント (0) | トラックバック (0)

2012年11月10日 (土)

遅まきながら、JDK7 on Maountain Lion

JDK7インストールするのすっかり忘れてた。><

http://www.oracle.com/technetwork/java/javase/downloads/jdk7u9-downloads-1859576.html


20121107_222823

20121107_222826

20121107_222852

以前は「アプリケーション」>「ユーティリティ」フォルダにあったけど、Javaのコントロールパネルはめでたく「システム環境設定」に移動しましたとさ。OS Xだとこの位置の方が自然だよね。
20121107_223054


20121107_223101


20121107_223109


20121107_223114


20121107_223131

これでオッケー。


| | | コメント (0) | トラックバック (0)

2010年12月 5日 (日)

こんなところでもお目にかかるとは。

MacOS XのDeveloper ToolsのUtilitiesでJava VisualVMをたまたまクリックしたら…。

20101205_135713

あら、こんなところでおめにかかるとはOracle Sun しっかりロゴが入れ替わっておりましたね :)

20101205_135724


20101205_135758


20101205_135853

| | | コメント (0) | トラックバック (0)

2010年4月 6日 (火)

ブラウザ で Quake 2

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.


quake 2 gwt pot

| | | コメント (0) | トラックバック (0)

2010年2月27日 (土)

Javaのサイトも雰囲気変ってて驚いたw

Javaのサイトが変り過ぎてて間違ったとこに来たかと勘違いしたw

13

| | | コメント (0) | トラックバック (0)

2010年1月30日 (土)

James Gosling: on the Java Road - Sun...So long....

絵が.....なんかいいな〜。 Sunさよーならー。(James Gosling: on the Java Roadより
13

| | | コメント (0) | トラックバック (0)

2009年5月16日 (土)

Java 2つ じゃないよ、東ティモール2つ だよ。

Java 2つ じゃないよ。東ティモールのフェアトレードコーヒー2つ だよ。@カフェフロンティア

Img_0472


という前置きは置いといて、
Oracle Japanさんからの新たなNews Letterが届いたので見てみたら第二回 WebLogic Server勉強会開催・・・・・の情報が・・・・・

申し込んでおくかとクリックしてみたら。。。既に満席でした。

| | | コメント (0) | トラックバック (0)

2009年4月10日 (金)

Java じゃないよ Rwanda だよ。

2

え〜〜っと、これ Java じゃなくて Rwanda です。
Rwandaフェアトーレード珈琲@JICA地球ひろば カフェ・フロンティア

友人のmegawattさんがボランティアとして支援(Webサイト作り中心)しているPLAS主催の写真展(世界エイズ孤児デーキャンペーン 写真展「エイズ孤児の素顔」@JICA地球ひろば。4月19日まで開催中。


Img_0236

世界エイズ孤児デーキャンペーン2009サイト

でもやっぱり、Javaのカップに見えちゃう。
4

| | | コメント (0) | トラックバック (1)

2009年3月30日 (月)

Oracle JDeveloper 11g (Build 5188) - with Oracle WebLogic Server 10.3 - #6(おまけ)

Oracle JDeveloper 11gのQuickStartからオンラインマニュアルへジャンプできなくても大した問題ではないのですが・・・とりあえず書いときます。
QuickStartからオンラインドキュメントへジャンプできるようになっているようなのだが、クリックすると、「ブラウザが見つかりません」と言われ、「了解」ボタンをクリックすると開く「ブラウザ選択」でSafariを選んでも「ブラウザが見つかりません」と言われる。ン〜〜。という状態、QuickStartにはPerferenceも無いようなのでFirefoxで試すことはしてない・・・面倒なのとQUickStartから開けなくても困らないから。というの理由で。

1

QuickStartのオンラインドキュメントのアクセスをクリックすると「ブラウザが見つかりません」。。なんで?
2

「了解」ボタンをクリックしてブラウザ(この例ではSafari)を選択して.....と
3

でもやっぱりブラウザが見つかりません・・・・なんですよね。OTNのドキュメントダウンロードすればいいのでこれ以上は調べてないですが・・・
2





バックナンバー
Oracle JDeveloper 11g (Build 5188) - with Oracle WebLogic Server 10.3 - #1
Oracle JDeveloper 11g (Build 5188) - with Oracle WebLogic Server 10.3 - #2
Oracle JDeveloper 11g (Build 5188) - with Oracle WebLogic Server 10.3 - #3
Oracle JDeveloper 11g (Build 5188) - with Oracle WebLogic Server 10.3 - #4
Oracle JDeveloper 11g (Build 5188) - with Oracle WebLogic Server 10.3 - #5

| | | コメント (0) | トラックバック (0)

2009年3月27日 (金)

Oracle JDeveloper 11g (Build 5188) - with Oracle WebLogic Server 10.3 - #5

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画像が間違っていたので入れ替えた)

Jdev11g_powerpc_macosx104_018

見慣れない(当然ですが)スプラッシュが..
Jdev11g_powerpc_macosx104_030

特に変更するところもなくインストーラのデフォルト設定でコンフィギュレーションした。この例で管理ユーザ名はweblogicにしたが、scottにもできるよ。w
Jdev11g_powerpc_macosx104_031

Jdev11g_powerpc_macosx104_032

Jdev11g_powerpc_macosx104_033

Jdev11g_powerpc_macosx104_034

Jdev11g_powerpc_macosx104_035

ドメインを入力(この例ではmac_de_oracle)して・・・・
Jdev11g_powerpc_macosx104_036

Jdev11g_powerpc_macosx104_037
ということで無事コンフィギュレーション終了。

続いて、Oracle Weblogic Server 10.3を起動してAdministration Consoleへログインできることを確認。

その前に 山本祐介さんのWebLogic Server 10g Release 3 を Mac OSX にインストール に記載されているSetDomainEnv.shのJAVA_VENDORの変更を行う。

G5Server:/Volumes/DiscusWork/Development/Oracle/Middleware/user_projects/domains/mac_de_oracle/bin discus$ diff setDomainEnv.sh.org setDomainEnv.sh
89c89,90
< JAVA_VENDOR="Unknown"
---
> # JAVA_VENDOR="Unknown" #modified at 2009/3/18
> JAVA_VENDOR="Sun"

G5Server:˜ discus$
G5Server:˜ discus$ cd /Volumes/DiscusWork/Development/Oracle/Middleware/user_projects/domains/mac_de_oracle/bin
G5Server:/Volumes/DiscusWork/Development/Oracle/Middleware/user_projects/domains/mac_de_oracle/bin discus$ ./startWebLogic.sh
/Volumes/DiscusWork/Development/Oracle/Middleware/user_projects/domains/mac_de_oracle/bin/startWebLogic.sh: Don't know how to set the shared library path for Darwin.
.
.
JAVA Memory arguments: -Xms256m -Xmx512m -XX:CompileThreshold=8000 -XX:PermSize=48m -XX:MaxPermSize=128m
.
WLS Start Mode=Development
.
・・・・中略・・・・
.
***************************************************
* To start WebLogic Server, use a username and *
* password assigned to an admin-level user. For *
* server administration, use the WebLogic Server *
* console at http://hostname:port/console *
***************************************************
starting weblogic with 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, sharing)
Starting WLS with line:

・・・・中略・・・・

<2009/03/18 7時28分12秒 JST> <Notice> <WebLogicServer> <BEA-000365> <サーバ状態が RUNNING に変化しました。>
<2009/03/18 7時28分12秒 JST> <Notice> <WebLogicServer> <BEA-000360> <サーバが RUNNING モードで起動しました。>

変更後、startWebLogic.shのままTerminalから起動してもいいし、.sh拡張子を.commandへ変更しダブルクリックで起動してもOK。
2

Jdev11g_powerpc_macosx104_039

Jdev11g_powerpc_macosx104_040
使えそうですね。:)






バックナンバー
Oracle JDeveloper 11g (Build 5188) - with Oracle WebLogic Server 10.3 - #1
Oracle JDeveloper 11g (Build 5188) - with Oracle WebLogic Server 10.3 - #2
Oracle JDeveloper 11g (Build 5188) - with Oracle WebLogic Server 10.3 - #3
Oracle JDeveloper 11g (Build 5188) - with Oracle WebLogic Server 10.3 - #4

| | | コメント (0) | トラックバック (0)

2009年3月26日 (木)

Oracle JDeveloper 11g (Build 5188) - with Oracle WebLogic Server 10.3 - #4

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 の起動」をクリック
Jdev11g_powerpc_macosx104_018

「ロールの選択」ダイアログでは「デフォルトのロール」ラジオボタンを選択後、毎回起動時に聞かれるのはうざいので「起動時にロール選択を常に要求」チェックボックのチェックをはずして「OK」ボタンをクリック
Jdev11g_powerpc_macosx104_021

見慣れたJDeveloperのスプラッシュ
Jdev11g_powerpc_macosx104_022

「ユーザ設定の移行」では「はい」ボタンをクリックして移行を許可。(お、ちょっとしたバグ発見、ダイアログの文言が「以前のリリースから設定を移行しま か」と「す」が全角空白になってる。)
Jdev11g_powerpc_macosx104_023

「ユーザー設定の移行」は参照先をそのまま受け入れるので「OK」ボタンをクリックする。
Jdev11g_powerpc_macosx104_024

preview releaseでも見慣れたJDeveloper 11g
あとはJDeveloper 10gで作成したプロジェクトを開くと11gに合わせて移行してくれる。

Jdev11g_powerpc_macosx104_026
Jdev11g_powerpc_macosx104_027
Jdev11g_powerpc_macosx104_028
Jdev11g_powerpc_macosx104_029

PowerMac向けのJava SE 6.0 DP1でも取りあえず遊べそうね。:)



バックナンバー
Oracle JDeveloper 11g (Build 5188) - with Oracle WebLogic Server 10.3 - #1
Oracle JDeveloper 11g (Build 5188) - with Oracle WebLogic Server 10.3 - #2
Oracle JDeveloper 11g (Build 5188) - with Oracle WebLogic Server 10.3 - #3

| | | コメント (0) | トラックバック (0)

2009年3月25日 (水)

Oracle JDeveloper 11g (Build 5188) - with Oracle WebLogic Server 10.3 - #3

PowerMac G5 + Java SE6.0 DP1 de Oracle JDeveloper 11gとOracle Weblogic Server 10.3をインストールしちゃうぞ〜の続きです。

前回はローカルJDKをInstallerが認識できるようにしたところまでだった。

今回はそのそのつづき。
JDeveloper 11gのインストールからQuickStartが起動するまで。

JDKを認識したので「次へ」ボタンをクリックしてインストール開始
Jdev11g_powerpc_macosx104_011_3

Jdev11g_powerpc_macosx104_012_2

Jdev11g_powerpc_macosx104_013

あとは終了まで、暫し待つ・・・

Jdev11g_powerpc_macosx104_014_2

Jdev11g_powerpc_macosx104_015

Jdev11g_powerpc_macosx104_016

「QuickStart実行」チェックボックスをチェックして「完了ボタン」をクリック。

Jdev11g_powerpc_macosx104_017

Installerが終了するとQuickStartが起動する。

Jdev11g_powerpc_macosx104_018

うまくインストールできたようですね。
次回は、インストールした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日 (火)

Oracle JDeveloper 11g (Build 5188) - with Oracle WebLogic Server 10.3 - #2

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・・・と表示されるし)を起動するところまで。
Jdev11g_powerpc_macosx104_012

ということで早速取りかかる..

・ダウンロードしたJDeveloper 11g installのjarファイル
JDeveloper 11g installer

ファインダーからアプリケーション→ユーティリティ→Java→Java SE 6→Java Preferenceを起動し、Java Application Running SettingでJava SE 6が一番上に来ていることを確認。(このようになっていないとダブルクリックでは起動できないのでご注意を。)
Java Preference

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を起動!

お〜〜起動しました〜〜パチパチ。

Jdev 11g splash

あとはインストーラの指示にしたがいクリックしていくだけ。
(この例ではOracle MIddleware Home Directoryを/Volumes/DiscusWork/Development/Oracle/Middlewareにしてあります。)

Installer#1

installer#2

installer#3

ん、ん、あれ〜、Java Perference及びJava SE 6.0 DP1へのパスを変更したのにJDKが見えないとでますね〜。
Jdev11g_powerpc_macosx104_010

no jdk alert

あ〜、忘れてました。これは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 :)
jdk ok

次回へつづく。。。





バックナンバー
Oracle JDeveloper 11g (Build 5188) - with Oracle WebLogic Server 10.3 - #1

| | | コメント (0) | トラックバック (0)

2009年3月23日 (月)

Oracle JDeveloper 11g (Build 5188) - with Oracle WebLogic Server 10.3 - #1

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)をダウンロードする。
Jdev11g_powerpc_macosx104_001

ながくなるので次回へつづく。

| | | コメント (0) | トラックバック (0)

2008年12月 4日 (木)

Sun Tech Days 2008 in Tokyo 2日目

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日目

今日は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も良さげなのでそれも後であそんでみようかと・・


Img_0250

何故アナグリグ?
D-Traceで取得した情報をJMonkey Engineを利用して3Dで可視化するデモの為だったんです。個人的にはJavaFXの高速デモの方が面白かったのですがね。

Img_0247

Goslingさんのプレゼン。前の方の頭が見切れて上手く撮影できず。そしてお約束のT-シャツ。しかしゲットできず。
Img_0249

レセプションの軽食の一部。。。
Img_0252

さて妻も六本木に着いたようなので帰宅しますか〜
Img_0265

ここ最近、子育ての負荷分散を妻と実践?実験?しているのだが、実際にやってみると、地下鉄のエレベータもまだまだ未整備なことが気になったりいろいろ気付くことは多い。そういえば、この手のこのコンファレンスに参加しているエンジニアの方々にも小さい子供を育てているおとうさん、おかあさんは沢山いると思うので、子育て中のおとうさん、おかあさん応援セッションみたいな枠があってもいいんじゃないかと。
その時間帯とその前後くらいの時間は託児ルームも開設してあったら便利かも・・・と勝手に想像してたりして。

| | | コメント (1) | トラックバック (0)

2008年9月20日 (土)

BEAがオラクルにmergeされたので

WebLogicもMac De Oracleの興味の対象に。。なんて。ということで備忘録。

WebLogic Server 10g Release 3 を Mac OSX にインストール

| | | コメント (0) | トラックバック (0)

2008年4月22日 (火)

PL/SQL で Python Challenge Level 17 - 完

さて、少々間があいてしまったが、Python Challenge Level17の最終回。

前回、つまらないところでモタモタしてしまったが、Oracle Application Express 3.0.xを使わず、単純に mod_plsqlを使えばいいじゃんと言うことで。。。。

Level17は、以前にも書いたがWeb Applicationを書いたことのある人なら簡単に解けると思います。
今回は一部を除き、約90%がPL/SQL、残りをJava stored procedureで処理した。;)

ということで答えを導きだしたスクリーンショット。(答えはぼかしてますよ!)

Python_level17

次回、Python Challenge Level 18はこれまた気が向いたときにても。。。Enjoy Python Challenge!

| | | コメント (0) | トラックバック (0)

2008年4月14日 (月)

Java AppletがWindowsのJavaSE6.0 Update5で動作しない件

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_applet_win01

Javase6_applet_win02 Javase6_applet_win03

Javase6_applet_win04


Javase6_applet_win06


Javase6_applet_win07


Javase6_applet_win08


それは置いといて、JavaSE6.0でappletを動作させる方法は、このブログに書かれていた。(ありがとうございます)ので早速試してみると、お〜〜お見事! 回避できた。
Javase6_applet_win09

Javase6_applet_win10

Javase6_applet_win11


ちなみに、MacOSXではJavaSE6.0はPreview ReleaseのままですがWindowsのコントロールパネルと違い、Appletを実行するjavaのversionを簡単に切り替えられる。
とは言ってもMacOSX版では今のところ今回のような問題は起きていない(ようだ)。

Javase6_applet_mac_preference


ちなみに、MacOSX 10.4.11 PowerPC G5ではOpera9.25/Safari3.1/Firefox2.0.0.13ともOKだった。

| | | コメント (7) | トラックバック (0)

2008年4月13日 (日)

PL/SQL で Python Challenge Level 17 #2 - 解けた!

さて、前回、解き方は見えたような気がすると書いたがいろいろな罠?に見事に引っかかったが解けました。はい。
今、Level18の問題が見えたのだが、また画像問題なのかな?

Level17は、Web Applicationを作った経験のある方ならLevel17の質問の画像自体がヒント。
なんですが、2重、3重の仕掛けがあるのでイライラするよ。ですが、基本的にはいままでの問題を解いてきたテクニックやコードを再利用すれば十分なので特に新しいことが必要でもない。。。

ということで、次回のPL/SQL で Python ChallengeはLevel17のヒントにならないヒント。でLevel17を締めくくろう。


以下のスクリーンショットは、最後の仕掛けを通り抜ける為のヒントを取り出す事に成功した場面。Level18のURLを導きだした時のスクリーンショットではありません。:)
Level17_no2

| | | コメント (0) | トラックバック (0)

2008年3月26日 (水)

PL/SQL で Python Challenge Level 17

さて、ココログのデータベースのデフラグ?作業でログインできなかったので今書いてますが。
Level 17、少々ハマったが解き方は見えた(ような気がする)ので次回はその経過でも。

Level 17は、Web Applicationを作った経験のあるかたなら案外すんなり解けるかもしれない。
問題の画像にそのすべてのヒントが!


Enjoy! Python Challenge!
(Python じゃなくても楽しめるのだ!)

| | | コメント (0) | トラックバック (0)

2008年3月24日 (月)

PL/SQL で Python Challenge Level 16完

前回の続きです

さて、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)にある結果を確認!


Level16_res1

Level16_res2


ということで、Python Challenge Level 16完。 Level 17は気が向いたら載せると思います。 
Enjoy Python Challenge!

| | | コメント (0) | トラックバック (0)

2008年3月23日 (日)

PL/SQL で Python Challenge Level 16 - 2年5ヶ月ぶり

そう、あれは、このブログをはじめたころ、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日 (木)

Oracle de XMLDB #25 - Relational dataをXMLへ #7のおまけ

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は随分といい感じに仕上がっているように感じた。(^^

Eclipse_s

Eclipse


Netbeans_s

Netbeans

| | | コメント (0) | トラックバック (0)

Oracle de XMLDB #25 - Relational dataをXMLへ #7のおまけ

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は随分といい感じに仕上がっているように感じた。(^^

Eclipse_s

Eclipse


Netbeans_s

Netbeans

| | | コメント (0) | トラックバック (0)

Oracle de XMLDB #24 - Relational dataをXMLへ #7

リレーショナルデータをXMLへ変換するシリーズもひとまず最終回ということで、最後は、Oracleデータベース側でXMLTypeインスタンスへ変換して、クライアントではXMLTypeインスタンスを受け取るだけの例を一つ。
環境は前回の記事を見てもらうとして早速試してみる。

Xmldb24_project Xmldb24_project_property


バックナンバー:
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
Oracle de XMLDB #23 - Relational dataをXMLへ #6


以下の例は、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 de XMLDB #23 - Relational dataをXMLへ #6

さて、Oracleデータベース側だけでリレーショナルデータをXMLTypeインスタンスへ変換する方法は一通り試したので、今度はリレーショナルデータを取り出しクライアント側でXMLへ変換してみた。
接続するOracleデータベースはいままで通り、Oracle11g R1 EE 11.1.0.6.0 for Linux(x86)なのだが、クライアントとして利用するMacOSX 10.4.11の構成は多少異なるので以下に示しておく。

Jdeveloper1013png

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)

Xmldb23_project Xmldb23_project_property


バックナンバー:
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日 (日)

MacOSX で Eclipse の日本語化(備忘録)

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$

上手くできました〜。 :)


Eclipse1 Eclipse2

Eclipse3

Eclipse4

最後の画像は、最初に

先日、OTN-Jのエントリに回答したのがきっかけで・・・、

と書いた”きっかけ”の話題に関連したおまけ・・・次回のエントリはそのネタにしようかと思う。

| | | コメント (0) | トラックバック (0)

2008年1月17日 (木)

Oracle - BEAを買収

一昨年、OracleによるJBOSS買収なんて噂が流れていましたが、BEAを買収しちゃったのですね〜。以前からニュースにはなっていましたが。。ん〜〜〜パックマンの本領発揮というところか!。

85億ドルとはね〜〜〜。

大きな買収の話題2連チャン。(^^;;;;;

| | | コメント (0) | トラックバック (0)

2008年1月 2日 (水)

Oracle de XMLDB #17

「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日 (金)

jMaki開発者Gregによるセミナー「jMaki and Ajax」

いや〜〜、行く予定だったんですが、行けなかった〜〜〜残念!〜〜。

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 - Last Day

やはり、気になったので、有楽町の無印での買い物ついでにSun Tech Days 2007 in Tokyoの最終日の最終セッションへ。

MacOSX Leopardへも組み込まれているDtrace関連と昨日は全く聞けなかったPostgraSQL関連セッション。

Solarisはないので、LeopardのbashからMacOSX 10.5 Leopardで確認だけ。。ちゃんと入ってますDtrace

Dtrace_macosx_leopard

その他、いろいろ試してみたいのだが、それは後日時間を取ってやってみようかと。。。予定は未定。

| | | コメント (0) | トラックバック (0)

2007年11月 7日 (水)

Sun Tech Days 2007 in Tokyo - Day-1

今日も行ってきましたSun Tech Days
明日も行くかは微妙だけど、Dtrace for Web 2.0,JavaScript, PHP and CoolStack (SAMP)やEnterprise Database Inside: The PostgreSQLなんてセッションが夕方からあるので行くかも。

基調講演と以下の3セッション。
基調講演では、ロボットのデモがあったけど、ウチの奥さんも居たら涙もんですな、絶対。

(ところでウチのケイトー君の作り込みの記事は停滞中です。なにせ奥さんと1エントリ毎の交代で書いているので。。)

20071107002 20071107003

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 - Community Day

今日は、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したり共有できるようになるんだからねぇ。

Netbeans60beta2icon

こんな色合い、好きなんですよね〜。熱帯魚好きな私好み。。。これがターコイズ系ならもっと好きなんだが。。
Netbeans60beta2

| | | コメント (0) | トラックバック (0)

2007年8月24日 (金)

JJUG : クロスコミュニティー IDEバトル?

少々、おそくなったが、
先日、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に。)

佐藤直樹さんは、やはり、プレゼン慣れしていますな〜。

Jdev_netb

うちの奥さんは? といえば、プロジェクトの標準で、Eclipseを利用していることが多いのだが、最近、自宅のMacでは、JDeveloper11gを起動してあそんでいる姿を多く目にする。。。
本人曰く、Eclipseは仕事で十分使っているから、自分の趣味?で調べもしたり確かめたりするのにまで、Eclipseは使いたくないらしい。

ということで、今日からお祭り見物だ〜。

| | | コメント (0) | トラックバック (0)

2007年7月22日 (日)

Glossitope

前回のエントリの勢いで、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をインストール


Glossitope0

Java SE 6.0 R1 Developer Previewは、Java SE 5.0を置き換えたりしないのでご安心を。
Glossitope1

● Glossitopeをダウンロード

今回は、Exterm versionをダウンロードしてみた。
Glossitope_buffered.jnlp がダウンロードされる

Glossitope2

● ダウンロードした Glossitope_buffered.jnlpをダブルクリックしてインストール開始

Glossitope3

Glossitope4

「Trust」ボタンをクリックして。
Glossitope5

お好きな場所に保存する。
Glossitope6

● Glossttopeの起動

Glossitope Bufferedというアプリケーションをダブルクリックして起動。
Glossitope7

Desklets(WidgetsのことをGlossitopeではDeskletsというらしい)をダウンロードするので「Yes」をクリック
Glossitope8

● 起動した!

Glossitope9

● ダブルクリックで広げると、

あら、DashboardのWidgetsにも似た、カレンダーや、目玉オヤジも!
Glossitope11

● 設定ダイアログは開発途上のようで、イマイチ。。。。(^^;;;;

Glossitope12

● Deskletsの管理

×ボタンをクリックするとDeskletsをunloadできる。
Glossitope13

Dashboardとちがって、Deskletsがバラバラになるアニメーションで消えていく
Glossitope14

ということで動きました. (^^;;;;

| | | コメント (0) | トラックバック (0)

2007年7月21日 (土)

Dashcode Developer Beta - July 15, 2007.

そういえば、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.

Dashcode_beta_20070715

なんて思っていたタイミングで、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

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日 (日)

Stored Procedure で host command #3

前回からの続きです。
さて、前回は、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.* ENABLED
execute 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>

なんとか実行できました。。。ね。 (^^;;;;

Jdeveloper_filelist3

| | | コメント (0) | トラックバック (0)

2007年7月 4日 (水)

Stored Procedure で host command #2

さて、前回のつづきです。
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を利用。

Jdev10gmacosx_hostcommand

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を設定している様子。
Change_jdk1 Change_jdk2Change_jdk3Change_jdk4

今日はここまで。次回へつづく。

| | | コメント (0) | トラックバック (0)

2007年6月30日 (土)

Stored Procedure で host command

随分前のネタ(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日 (水)

Mac De Oracle : Oracleのバージョン確認(FAQ) #8

Oracle JDBC Driverのバージョンは確認方法は?

マニュアルにしっかり載ってます。 
今回は、先日公開された、Oracle JDeveloper11g Technology Previewで試してみた。

ちなみに、接続先は、Oracle10g R2 EE 10.2.0.2.0
Jdev11g_jdbc11

よく見えないかもしれないので、ログペインを拡大したスクリーンショットも載せておく。
Jdbcversionresult

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日 (水)

Oracle JDeveloper11g Technology Preview

 Jdev11g2 Jdev11g3

http://www.oracle.com/technology/products/jdev/index.htmlでJDeveloper11g Technology Preview版が公開されたので、早速 MacOSX版をダウンロード。

ついでなのでhttp://d.hatena.ne.jp/satonaoki/20070508/p1で紹介されている スタートページを JDeveloper11gのものに変更するように設定してみた。

● なにもしないと、JDeveloper10gのころのスタートページが表示される。

Jdev11g4

http://d.hatena.ne.jp/satonaoki/20070508/p1で紹介されている設定をMacOSX版のJDeveloper11g Technology Previewで行うには、

「JDeveloper11g」を右クリック->ポップアップメニューの「パッケージ内容を表示をクリック」
-> Contents/Resource/jdev/jdev/bin/jdev.confを紹介されているように編集

Jdev11g5 Jdev11g7_1 Jdev11g6

● 編集内容を保存したら再起動。

尚、以前のスタートページが開いていると新しいスタートページが表示されないようなので、もし、JDeveloper10g向けのスタートページが表示されていたら、一旦、スタートページを閉じ、「メニュー」->「Help」->「Start page」で表示させる。

Jdev11g8

Jdev11g9

私好みの色合い。。。。。。

| | | コメント (0) | トラックバック (0)

2007年4月23日 (月)

Java ユーザグループ結成総会/記念講演

(有)構築屋の大山さんに、日本 Java ユーザグループ結成総会/記念講演会会場で久しぶりにお会いした。 
Java One japan 2005で10年ぶりに偶然再会して以来だったかと。。。

そういえば、最初にお会いしたのは、私が Oracle7.1.6 EEデータベースの構築を担当することになった、大山さん率いる? プロジェクトだったと思う。。。。 
そう言えば、それって、drmarさんとこの会社と契約してた案件だったっけなぁ。。時の経つのはやはいこと。。。(と独り言。。)

前置きはこれくらにしておいて、

Mac De Oracleは、やはり 、データベース絡みの講演は聞いておかないと。。。ということで

20070423001

「Javaとデータベース」というタイトルだったが、次期MacOSXにも標準搭載されるという Ruby on Railsのデモも少々気になった。。。Vista上でのデモでしたけど。。

そして、講演の後半で、細川氏のPC、いや、MacBookに気付く。。
え〜〜〜。 BootCampか?  Parallels for Mac? を利用し、Vista上でプレゼンしてるじゃありませんか〜〜。
自慢じゃないけど、私、初めて見ましたよ。 MacBookで起動している Vista.....生で。

他に、ウチの奥さんが参加しているプロジェクトで Seaser2を利用しているので、ひがやすを氏の講演も聞いてきた。。。。
ウチの奥さんからもある程度聞いていたけど、よい感触ね。。Seaser2

| | | コメント (0) | トラックバック (0)

2007年2月 1日 (木)

JDeveloper 10.1.3.1.0

10万円 de RAC に集中しているうちに、私がやりたかったネタを、先に妻が書いていた。
しまった〜〜〜。ネタを取らないで〜〜〜。==>妻。(笑)

JDev on iMac  

JDev on iMac にかぶらないようなネタをやらねば。。。。。。あ、パッチがリリースされている。。。と思ったら、Oracle SQL Developer の方でした。

| | | コメント (0) | トラックバック (0)

2006年9月28日 (木)

Java SE 6.0 Release 1 Developer Preview 6

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日 (日)

Mac De JDeveloper10g #2 のおまけ。

以前、Software Updateで JDKをアップデートするとデフォルトがJ2SE5.0 Release 4になると書いたが、それに関連する情報が出ていたので追記しておく。

SafariでJava Consoleを使用する場合にもこの Java Preferenceアプリケーションを利用するのだが、Java Consoleの有効化以外の設定もJava Preferenceアプリケーションで行える。
J1

Appletを実行するJavaVM、Java Network Launching Protocolを使って起動されるJava Applicationまたは、Appletを実行するJavaVMのバージョンを設定することができる。

Appletを実行するJavaVMの変更。

J2


Java Network Launching Protocolを使って起動されるJava Applicationまたは、Appletを実行するJavaVMのバージョンを変更するには、該当バージョンをドラッグアンドドロップする
J3


注意)Terminalから実行するjavaコマンドには影響しない。

J4

| | | コメント (0) | トラックバック (0)

2006年4月26日 (水)

Mac De Panic!

先週金曜日のネタ(記事にするには遅過ぎるな)
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画面が表示されます。

クラッシュする原因は、いろいろ!(この国の総理みたいな言い回しになってしまった)

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日 (火)

Mac De JDeveloper10g #2


Img1


さて、JDeveloper10g 10.1.3 に入れ替えたところで、JDeveloper10g Updateを行ってみる。いろいろな拡張機能が提供されたり、更新されている。

尚、これらの機能は、米国OTNからダウンロードされるとのことで、
米国OTNへのログインが必要になることもあるようだ。
(今回は、すべてのUpdateをダウンロードしたのだが、
 米国OTNへのログインが必要でだった。)

以下、更新中の様子(Flash版)






ソフトウェアの更新に関して、Windows、Linux版との違いは無さそうだ。

| | | コメント (0) | トラックバック (0)

2006年4月20日 (木)

Mac De JDeveloper10g #1

J2se5


AppleからSoftware Updateがリリースされていた、J2SE5.0 リリース4 これをインストールすると J2SE5.0がデフォルトになる。
http://www.apple.com/jp/ftp-info/reference/j2se50release4ppc.html

尚、Intel版は以下、
http://www.apple.com/jp/ftp-info/reference/j2se50release4intel.html

ということで、よいタイミングなので、 Oracle JDeveloper10g Studio 10.1.3にアップデート。
日本の借金時計は、XCodeを利用したのだが、JDeveloper10gを使ったネタも始めますかね。ー> PL/SQL で Phthon Challenge以外にするとは思うが。。

Jd1


Jd2


Jd3


Jd4

| | | コメント (0) | トラックバック (0)

2005年12月19日 (月)

Safari De Java Console

Blogに時計を表示している方がいるが、そのほとんどがFlashで作られた時計。ということで java applet で時計を作るのもいいかなと思い早速追加してみました。

ただ、Safariでアプレットを表示させるのもデバッグするのも初めてだったので Java Console の表示方法がわからなかった。。。

調べてみると、Safariのメニューや環境設定から行うのではなくjava プラグイン設定という別アプリケーションから行うとのこと。
java 1.4.2プラグイン設定は以下にあります。


p1


起動するとこんな画面が現れるので、「java コンソールを使用」チェックボックスをチェックー>「適用」ボタンをクリック。あとは Safari を再起動させ、applet を実行すれば java consoleが起動してくれます。


p2


p3

メモっておいてくれと言われたので備忘録として記録しておく。

| | | コメント (0) | トラックバック (0)

2005年11月10日 (木)

JavaOne Tokyo 2005 #3

あっという間に、JavaOne祭り終了。

NetBeans4.1をMacOSX 10.4.3 Tiger にインストールして起動してみたところ。。。(普段は、JDeveloper10gなんだけど JavaOne記念!)

icon


splash


ide

と日本語メニューなど、途中で切れて表示されたりしている箇所がある。。。こんな感じでした。
つづきは、ATSU-LOG

| | | コメント (0) | トラックバック (0)

JavaOne Tokyo 2005 #2

スーツを着ている方の割合がやや多い気がする。。。(この際、ジーンズにトレーナーか、Tシャツで、なんてドレスコード設定したらどんな感じになるのかな〜と想像してみたりする。。ということは置いといて。。詳しくは、ATSU-LOGにて。。

| | | コメント (0) | トラックバック (0)

2005年11月 9日 (水)

JavaOne Tokyo 2005 #1

本日、JavaOne初日。 午後からCraig McClanahanさんのセッションに参加。しかし、開始時間を30分間違えていたため到着したときにはセッションが開始されてから10分が過ぎていた...


#MacOSXがらみものは BOFが1つあるだけのようですね。

ということで、詳細は、ATSU-LOGにて。


オラクルさんも準備に大忙し。

CIMG6474

| | | コメント (0) | トラックバック (0)

2005年10月 7日 (金)

PL/SQL で Python Challenge 16 え、また画像ですかい。

Level16 ざっと眺めたら、また、画像ですか! (ちょいとやる気を無くす)
画像扱う問題だと以前に解いた問題と同じ流れになりがちで興味が薄れてきた。

先月中頃に、HTMLDB2.0 が Oracle10g R1 for MacOSX Serverのダウンロードページに追加されていたのでそちらのほうが面白そうだな。Oracle AS Portalのデータベースポートレットのような感じだが。。。

| | | コメント (0) | トラックバック (0)

2005年10月 3日 (月)

PL/SQL で Python Challenge 15 いきなり完結編

Level 15 は、なんとプログラミングするまでもなく答えが判ってしまった。いきなり、Level 16のページが見えてしまった。(プログラミングもUTL_HTTPと正規表現程度で終わってしまいそうだったのでプログラミングする気も起きず) プログラミングもせずに、Level 15 は終了することにした。 だれの? というタイトルと、HTMLコメントを見れば、すぐに解決できる。簡単すぎて引っ掛けかと思ったほどだった。(実は深読みさせて迷路に誘い込むつもりだったのかもしれないが。。。。)


Level 16 へつづく。

| | | コメント (0) | トラックバック (0)

2005年10月 1日 (土)

PL/SQL で Python Challenge 14 完結編

さて、バグっていたプログラムを修正して完結!

Level14 はそのページにある画像が問題になっているのでLevel 11の時とやり方はほぼ同じ。違いは、サイズが、### × ### のファイルを新規に作成することだけ。できあがった画像を元に該当するURLをブラウザで開くと、意地悪ともクイズとも言えないようなページが開く。これも簡単なのですぐに Level 15 が見つかる。すぐに謎は解けると思うのでこれ以上は解説はしない。

定番になってしまった JDeveloper10g for Macでjava をdeploy
jdev

そして、java stored functionとしてラップして実行。(パッケージ化しているが管理しやすくするためである。パッケージ化しなくても問題はない) ユーザ定義関数として利用できるのでSQL文から直接利用できる。(でもディレクトリオブジェクトぐらいは引数で渡すようにしたほうがよかったかも。。)
result


ただ、正解の画像にある赤いドットが気になったので遊んでみた。(画像は小さいので拡大してみないと判りずらいと思う)このURLを叩けばその絵は間違っているとわざわざ教えてくれるのだが、こんな引っかけに引っかかるるのかな?〜(引っかかっている間もなく答えが判ってしまったのに。)




Level 15へつづく。

| | | コメント (0) | トラックバック (0)

2005年9月30日 (金)

PL/SQL で Python Challenge 14 Eureka!

Eureka!
Level 14 は、ヒントを見て仕掛けが判ってしまうほど簡単なのだが、プログラムがバグっていて答えがきれいに描画できていない。ただ、それが何かは判るような状態なのでURLを叩くと、正解! でした。 
完結編へつづく。(プログラムを修正してからだが。。)

| | | コメント (0) | トラックバック (0)

2005年9月11日 (日)

PL/SQL で Python Challenge 14 またグラフィック系か!

Level 14は、また画像処理系の問題みたいだ。なんとなく答えが見えたのだが。。。どうしよう、Oracle10g R1 for MacOSX Serverを無理矢理インストールしたTigerの環境では、java stored procedureが動作しない。Oracle10g R2もリリースされたが、今のところLinux X86, AIX, Solaris, HP-UX, Windowsがリリースされたが、MacOSXはまだだ。。。R2がリリースされるまで待つか。。。。。

| | | コメント (0) | トラックバック (0)

2005年8月18日 (木)

PL/SQL で Python Challenge 11 完結編

Level11は、 Level7及び、Level9で作成したパッケージを再利用したことと、、Level7で作成したjavaのコードを多少手直ししただけなので書き直したコードは15行程度だった。(全体では、Level7程度のコード量だが。。)

javaのコードの概要は以下のようになる。

    1.問題の画像を、オラクルのDirectoryオブジェクトに置く。

    2.PL/SQL で Python Challenge Level7で作成した、PL/SQLパッケージを再利用。Level7.getBfile()を利用して、1.説明した画像ファイルを外部LOBファイルとして取り込む。

    3.javax.ImageIO をクラス利用して、外部LOBとして読み込んだ画像の複製を作る。(複製した画像は、背景色を黒にしておく)

    4.3.で複製した画像(BLOB)に、2.で取り込んだ画像(外部LOB)から取り出した答えを描画。

    5.答えを描画した画像(BLOB)を一時LOBとしてデータベースへ書き出す。 dbms_lob.createTemporary() を利用する。

    6.一時LOBを PL/SQL で Python Challenge Level9 で作成した Level9.writeImageFile() プロシージャを利用して、オラクルのDirectoryオブジェクト以下に、level11.jpg というファイル名で書き出す。

    7.前述のjavaクラスをデータベースへ配布する。(JDeveloper又は、loadjava コマンドを利用する。)


jdev_deploy


    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 が作成される。

dir

    9.うまくいったようなので結果を見てみよう! (内容はいつものように隠してある)

level11_copy


Level12 へつづく

| | | コメント (0) | トラックバック (0)

2005年8月15日 (月)

PL/SQL で Python Challenge 11 謎は解けた。

前回の予想通り、画像の中に答えがあった。Level11 の ページタイトルがヒントになっている簡単な問題でしたねこれも。(Level11はJavaだけで答えが見えてしまうのだが、、、Level7を解いたときと同じ方法で、PL/SQL から呼び出す形にする。) 次回、完結編へつづく。



何年ぶりだろう!? 東京湾大華火祭を見たのは・・・・・。 

Oracle, PL/SQL, Mac, Java, PL/SQL で Python Challenge | | | コメント (0) | トラックバック (0)

2005年8月11日 (木)

PL/SQL で Python Challenge 11

ここのところ忙しくて脳の体操してなかったが久々に再開?!、Python Challenge Level11。
こいつはまた画像に答えが埋め込まれてますね〜おそらく。。。となんとなく思っただけ。。で、疲れてやる気でず。。。

| | | コメント (0) | トラックバック (0)

2005年7月28日 (木)

PL/SQL で Python Challenge 10 謎は解けた

Level10は、こんな感じの適性試験があったような記憶が蘇るクイズだな。。。。

Level10では、Level9の答えに出てくる”やつ”が問題のページにあるのだ。。htmlソースをみると、、お〜、 clickable mapじゃないか! またなんか嫌らしい問題にしてんのかな〜。
早速、”やつ”をクリックすると基本認証が設定してある。おや〜〜これは以前解いた問題と同じだな。。。ということで、やっと問題にたどり着く。入手したテキストファイルが意味不明だったが、眺めているとあるパターンがあることに気づく。あ、、、、なるほど。。。謎は解けた!  Level10のページには答えを導きだすためのヒントがあるので、あとはその通りにやればいいはずだ。(最後にひねりが何段かある可能性はあるが。。)
あとは、PL/SQLでどうプログラミングするかだな。Level10は、久々に、PL/SQLだけで解けそうな感じがする。 
 Level 10 完結編につづく。


軽井沢に行きたくなってきた。。。暑い、寝苦しい〜。

| | | コメント (0) | トラックバック (0)

2005年7月27日 (水)

PL/SQL で Python Challenge 9 完結編

Python Challenge Level9 を画像処理(Java Stored Procedure)、その他(PL/SQL stored procedure)とOracle10gの機能で解いた。


方法の概略は昨日の記事を見てもらいたい。

Oracleのdirectory オブジェクトに対応づけられたOS上のフォルダ(ディレクトリ)には、以下のスナップショットのようにlevel9.jpg というLevel9の答えが作成されている。(このlevel9.jpg は、最初からあるわけでなく、Level9を解いた結果作成された画像である) 

(この機能自体がサポートされたのはかなり前なのだが、create directoy文だけでOS上のディレクトリにアクセスできるようになったのは、Oracle9i R2以降である)
result_dir


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を利用している。

jdev10g_loadjava

SQL*Plusを起動し、level9のパッケージや型を作成後、getAnswer()の実行!
level9_exec

注)いつもの通りネタバレになるので答えそのものは載せていないのであしからず!(そうだと思った〜っ。という声が聞こえてきそうだが。。)
level9_result
画像を開くとなるほど〜〜〜と思う結果になるのだが、日本人だと50%は間違かもしれない。特に日本語では通常、”それ”を区別していないからだ。(画像をよ〜〜〜く見ると区別できる”もの”があるのだが・・) でも心配しなくてよい。間違っている方の xxx.htmlを入力すると正しいURLへのヒントのページが表示される。(いつの間にか、英語の勉強にもなっている気がする Python Challenge )


Level10 へつづく!

尚、nest tableやVARRAY又は、結合配列(むかしのPL/SQL表相当)を関数の戻り値として返すサンプルやBLOBをdirectoryオブジェクト以下に書き出すPL/SQLの簡単なサンプルは別途掲載するかもしれない。

20050727001台風一過、波は高いが気持ちのいい湘南にて。。

| | | コメント (0) | トラックバック (0)

2005年7月26日 (火)

PL/SQL で Python Challenge 9 簡単でした

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日 (月)

PL/SQL で Python Challenge 8完結編

Python challenge Level8 を解いてみた。 PL/SQLJavaOracleを使って解くと結構大変なことも多々あるなぁ。。。それを承知でやっているのではあるが。。。(^^;;;

Python challenge Level8のヒントは前回の通り、「ブンブン蜂が飛ぶ。その音」(もちろん英語で)。

Python Global Module Indexにあるどのモジュールを利用するのかがわかれば簡単で、Pythonでは3行で解けてしまった。
しかし、PL/SQL+Java+Oracle10g では手こずった。プログラミング以前に、PL/SQLJava(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で、データベースにロードする。
  • level8_jdev

    以下、実行結果のスナップショット(いつものように答えは隠してある)。
     level8




    Level9へつづく。

    | | | コメント (0) | トラックバック (0)

    2005年7月20日 (水)

    PL/SQL で Python Challenge 8

    Level8は、非常に簡単! Pythonでは!

    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 で Python Challenge 7 残念!」 でPL/SQL+Oracle10gで解くことを断念するつもりだった。しかし、Python Challengeの問題自体の面白さに、再開することにしたのだ!。
    再開するにあたり、PL/SQLでは面倒な部分(例えば、画像処理とか)だけを、Java (Java stored procedure)で解くことにした。(場合によっては、Javaで解く部分がクイズの核心だったりするが・・・)




    java stored procedureを利用したことで、Level7は簡単に解けた。それなりにひねりの効いた問題だったが、java stored procedureを利用した箇所以外は、Level7以前の問題を解く中で利用してきた機能や関数で十分解ける問題だった。

    Level7でもいままで通り答えをそのまま書くつもりはなく、PL/SQL と Java そして Oracle10g をどのように利用して解いたのかという所だけをヒントとして書いておく。
    Level7は画像自体に答えが隠されている。(Level7のページに行けば、なんとも怪しい画像にお目にかかるので感のよい方はすぐに気づくと思う)。そこで問題になるのは、PL/SQL や Oracle10g で提供されているパッケージや機能では画像データをピクセル単位で扱うことは今のところできないということなのである。その問題を解決する手段として Java を利用することにした。

    注)2005/07/17時点では、MacOSX Tiger 10.4.1において、無理矢理動作するようにしたOracle10gではエラーが発生する。以下はすべて、MacOSX Panther 10.3.9のOracle10gで行った結果である。

    1.問題の画像をOracle10g の directoryオブジェクト以下に配置し、BFILE として扱う。

    (BFILEは、外部LOBと呼ばれ、Oracleデータベース内には格納されないLOBである。)
    BFILEへの参照(ロケータ)を取得するのは、PL/SQLだけで可能である。
    Level7では、directoryオブジェクトへの読み込み権限さえあれば問題ないが今後のために書き込み権限を付与している。(実行ログの書き出しに利用する場合を考えている)
    SQL> conn scott/tiger
    SQL> select table_name as "directory",privilege from user_tab_privs;

    directory PRIVILEGE
    ------------------------------ ----------------------------------------
    PYTHON_CHALLENGE_DIR WRITE
    PYTHON_CHALLENGE_DIR READ

    2.1で取得した BFILE から画像データとして読み込み怪しい部分の画像情報から答えの元になる情報を取り出す。

    (なぜ元になる情報なのか?。”ひねりの効いたクイズ”なので一筋縄では答えは導きだせないだけ!)
    ここで、Java (実際には Java stored procedure にするのだが)を利用する。


    Java stored procedure といっても通常の java プログラムとほとんど同じなのだが、Java stored procedureとして利用する場合にはいくつかの作法が必要でなのだ。methodは、staticにする必要がある点と、利用するJDBCドライバは通常は、Server-side thin ドライバを利用する点である。
    このドライバは、 thinドライバと同じ機能を持っているが接続先データベースがjava stored procedureが格納されているデータベースになる点が異なる。
    Java stored procedure が格納されているデータベース以外のデータベースに接続する必要がある場合には、通常のthinドライバを利用することになる。
    今回は、Java stored procedureの格納されているデータベースだけにしかアクセスしないのでServer-side thin ドライバを利用する。(単体テストの時は、thinドライバを利用し、テスト完了後に Server-side thinドライバへ切り替えた)
    尚、Java stored procedureの詳細は、OTNのオンラインマニュアルなどを参照してもらいたい。

    3.2で取得した”答えの元になる情報”から答えを取り出す。これは PL/SQL だけで可能である。

    以下に、上記1〜3の処理をそれぞれ関数として作成した PL/SQL パッケージ(level7パッケージ)のapiを示す。
  • getBFile() が、BFILEへのロケータを返す関数である。
  • getAnswer() が、java stored procedureである。画像データを読み込み”答えの元ネタ”を返す関数である。
  • getNextLevelUrl() が、Level8へのURLを返す関数である。
  • 注)本来であれば、getNextLevelUrl()だけを公開すればよいのであるがデバッグのために全関数を公開してある。
    SQL> 
    SQL> desc level7
    FUNCTION GETANSWER RETURNS VARCHAR2
    引数名    タイプ In/Out Default?
    ------------------------------ ----------------------- ------ --------
    DIRECTORYNAME VARCHAR2 IN
    FILENAME VARCHAR2 IN
    FUNCTION GETBFILE RETURNS BINARY FILE LOB
    引数名    タイプ In/Out Default?
    ------------------------------ ----------------------- ------ --------
    DIRECTORYNAME VARCHAR2 IN
    FILENAME VARCHAR2 IN
    FUNCTION GETNEXTLEVELURL RETURNS VARCHAR2
    引数名    タイプ In/Out Default?
    ------------------------------ ----------------------- ------ --------
    DIRECTORYNAME VARCHAR2 IN
    FILENAME VARCHAR2 IN

    後は作成した stored procedure を実行するだけである。今回は関数(スカラ関数)にしてあるので SQL から呼び出して実行している。また、java stored procedure に不慣れな方の為に手順も載せておく。

    1)OS上で、適当な位置にディレクトリを作成する。

    この時、oracle所有者が、ディレクリに対する書き込みおよび、読み込みパーミッションを持っているか確認すること。また、画像ファイルも配置しておく。尚、外部LOBや、directory オブジェクトにマッピングされるOS上のディレクトリが実在するかどうかは
    Oracle側では検証されない。利用する側で適切な関数などを呼び出してチェックする必要がある。

    2)SQL*Plus を起動し、1)で作成したOS上のパスを対象とする directory オブジェクトを作成する。

    3)2)で作成したdirectory オブジェクトへの read権限、 write権限を付与する。

    例)SQL> grant read, write on directory python_challenge_dir to scott;

    4)level7.getBfile() だけを作成しておく。

    5)level7.getAnswer() に対応づける Java program を作成する。

    java program の作成には、JDeveloper10g for MacOSX Preview Releaseを利用した。
    jev10gicon jdev10gpre1

    6)5)で作成した Java programを Oracle10g の scottスキーマへ配布する。

    loadjava コマンドを利用するか、JDeveloperを利用する。
    配布にも、JDeveloper10g for MacOSX Preview Releaseを利用した。
    jdev10gpre2

    7)level7パッケージを作成する。


    getAnswer()  の実装。6)で配布したclassを利用する java stored functionにする。

    getNextLevelUrl()  の実装。ここでは、これまでの問題でも利用したOracle10g新機能(Pythonなら re で判るはず!)を利用するのである。

    8)実行。 スカラ関数として利用できるようにしておいたのでSQLから実行した!

    ネタバレになるので、いつものように画像はぼかしてあります。 m(_ _)m
    level7_answer

    ということで、再開した PL/SQL で Python Challenge。  Level8 へつづく。

    海の日。梅雨も開けた湘南にて (どこでしょう?)

     

    CIMG3851
    CIMG3856

    | | | コメント (0) | トラックバック (0)