javaの困ったところ

クライアントからの要求が来た。
プログラムを書いてくれ、とのこと。
複数台のデータベース内の特定の要素を別のデータベースに持って言ってくれ?ヘンな依頼だな。
OSは?Solarisですか、あぁ、javaがよさげですな。まぁ、いつもの通り、jdbcで、言語は、あぁ、javaですな。
という、打ち合わせが有るんだか無いんだか、というような状況で。
さて、実行環境を見せてもらって驚く。


$java -version
java version 1.3.0_01
え?1.3。。。。。EOLでっせ。
せめて、1.4とかに変える気は、、、あぁ、既存で動いてるjavaアプリがあるんですか。
既にインフラ化してるから、手を入れる気はあまりないですか。そうですか。
バージョン上げちゃダメですね
というわけで、それまで書いていたString.splitみたいなのは削除。
StringTokenizerで書き直す。。の、か?
一応、javacのオプションとか見ると、-targetとか、-sourceとか、ある。
sunの説明によると、クロスコンパイルという扱いになるんだそうな。

  • source release

受け付けるソースコードのバージョンを指定します。release には次の値を指定できます。
1.3 このコンパイラでは、JDK 1.3 以降に導入されたアサーション、総称、または他の言語機能をサポートしません。
(中略)

  • target version

指定されたバージョンの VM 上で動作するクラスファイルを生成します。デフォルトでは、JDK 5 VM と互換性のあるクラスファイルを生成します。ただし、-source 1.4 以下のオプションが使用されている場合のみ、デフォルトターゲットは 1.4 です。javac でサポートされているバージョンは次のとおりです。
1.1 JDK 1.1 以降の VM で実行するクラスファイルを生成します。
1.2 JDK 1.2 以降の VM 上では動作するが、1.1 の VM 上では動作しないクラスファイルを生成します。
1.3 JDK 1.3 以降の VM 上では動作するが、1.1 および 1.2 の VM 上では動作しないクラスファイルを生成します。
1.4 JDK 1.4 以降の VM 上では動作するが、1.1、1.2、および 1.3 の VM 上では動作しないクラスファイルを生成します。
1.5 JDK 5 の VM のみと互換性のあるクラスファイルを生成します。
5 1.5 と同義です。
(中略)
ここでは、javac を使って、1.4 VM 上で実行するコードをコンパイルします。

% javac -target 1.4 -bootclasspath jdk1.4.2/lib/classes.zip \
-extdirs "" OldCode.java

  • target 1.4 オプションにより、1.4 VM と互換性のあるクラスファイルが生成されます。デフォルトでは、javac は JDK 5 用にコンパイルします。

あれ?classes.zipって、神託jdbcドライバじゃないのか、と、思って、JAVA_HOME以下を探してみたけど、見つからない。。
どうやら、jdk1.1などの失われた古代のジャヴァ界にはそのようなものが有ったらしい。
じゃあ、何を指定すれば。。ええんやねん。。
と、途方にくれる。


仕方が無いので、試験機にはj2sdk1.3を入手して、インストールしてみた。
今回のコンパイル任務はここでやる。
正規表現も、リフレクションもひとまず、忘れよう(泣きたくなる)
コレクションフレームワークって使えるのかな、LinkedListは使いたいんだが。。。大丈夫なのかな。
頭の中で考えていたコマンドパターンは崩れて消えた(代わりに頭の中でベタで書け、と、悪魔の声が聞こえる)
ええと、ナンだろう、この喪失感は。


ここで、後悔が始まる。
何でjavaでやる、だなんて、言ったんだ。俺のバカ。
教訓:
javaの仕事を要請された場合はjava -versionを打ってから答えること。