2008-06-29

ファイル型データベースをリモートで使う

普段 Macや Linuxで仕事をしている人間にとっては、Windows機で作業をするのが苦痛だ。
しかし世の中には dBASEや Microsoft Accessで作られたデータベースというものがあって、時にはそういった「ファイル型データベース」を読み書きする仕事もあったりする。

Microsoft SQL Serverのようなクライアントサーバ型データベースであれば、それがたとえ Windowsでしか動作しなくとも JDBCを使ってリモートから利用できるため手元の Macで開発作業が出来るわけだが、ファイル型データベースの場合はそうもいかない。

最近 dBASEファイルをどうしても読み書きする必要があって、仕方ないので Virtual JDBCを使って Windows機上にあるデータベースファイルをリモートからアクセス出来るようにしてみたのが下記。
(なおWindowsには dBASEの ODBCドライバが標準で搭載されている)



Windowsで作業したくないばかりにこんなことまでやるかという気もしないでもないが、それはさておき。

(a) JDBC URLとして サーブレットのURLと vjdbcに設定したDB名を与える。
"jdbc:vjdbc:servlet:http://my-windows-host:8080/vjdbc/vjdbc,mydb"

(b) web.xmlにて vjdbcサーブレットをマッピングする。

<servlet>
<servlet-name>VJdbcServlet</servlet-name>
<servlet-class>
de.simplicit.vjdbc.server.servlet.ServletCommandSink
</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>VJdbcServlet</servlet-name>
<url-pattern>/vjdbc</url-pattern>
</servlet-mapping>

(c) vjdbcがリクエストを転送する先となるターゲットデータベースの設定を /WEB-INF/vjdbc-config.xmlに記述する

(d) (vjdbc-config.xml内) JDBC-ODBCブリッジのURLで ODBCデータソース名を指定
"jdbc:odbc:mydbase"

(e) Windowsの「管理ツール」→「ODBC」で dBASE用のデータソースを設定する(*.DBFファイルの置いてあるフォルダを指定)。データソース名は (d)で指定した物と合わせる。

この構成で JDBCを使って dBASEファイルへリモートアクセスが出来るようになった。
・・・なったのだが、トランザクション操作をしようとするとこの通り・・・
java.sql.SQLException: 
[Microsoft][ODBC dBase Driver]オプションの機能は実装されていません。

Windowsに標準でくっついてるようなドライバにそこまで期待すんなということですな。

ちなみに dBASEの JDBCドライバ(商用)もあって、5同時アクセスライセンスが 150ドルで買える。お金を取るくらいだからもちろんトランザクションもサポートしているに違いない。真面目に今後もdBASEと付き合っていく必要がある、かつ、ライセンス料を顧客に負担してもらえる場合はこれを使ったほうが無難だと思う(試してないけど)。

JDBC-ODBCブリッジを使ってファイル型データベースにアクセスする用途以外でも、何らかの理由で データベースアクセスをHTTPで中継したい場合に vjdbcは役に立つだろう。

0 件のコメント:

コメントを投稿

<< ホーム