JDK

(作成:2005/01)

研究用途で使う必要が出て来たので、ちょっくらJavaの導入をしてみることに。
Debianだとディレクトリ構成とか色々と制約があるのか知らんが、導入事例はなかなか捜し当てられなかった。

Install on Debian

以前にも上記サイトを参考にBlackdown JDKを導入してみたのだが、どうも研究プログラムが動作してくれない。というわけで今度はSUN純正のJDKを導入してみることに。
取り敢えずJava Technologyから、Downloads-Java 2 Platform, Standard Edition (J2SE)-J2SE 1.4.2 - Japanese Edition-J2SE SDK のダウンロードと辿ってファイルをDL。

また、パッケージ化するにあたり、以下のサイトから以下のパッケージを入手。

debパッケージ化。sargeだと上記サイトから取って来なくとも java-package なる後継版があるらしいが、ウチはtesting環境なので j2se-package を用いることに。

# dpkg -i j2se-package
...
# j2se-package j2sdk-1_4_2_05-linux-i586.bin
...

作成する間、名前やメルアドを聞かれる。メンテナの名前なのでよく使うアカウントのものでも入れておく。
同ディレクトリ内にパッケージが作成されるので、これを導入して取り敢えずおしまい。

# dpkg -i sun-j2sdk1.4_1.4.2+05_i386.deb

必要なパッケージのインストール。

# apt-get install java-common
...
# dpkg -i sun-j2sdk1.4debian_0.9_all.deb
...

設定

フォント設定

X Windowを使用している場合は、何も考えず東風フォントあたりを導入すれば良い。X Window側の設定はxfree86のTrueTypeFont追加法のあたりと同様にすれば良いだけ。
サーバ上で動作させたい時などは、環境変数 JAVA_FONTS を定義する必要がある。

## /etc/profile

JAVA_FONTS=/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType
export JAVA_FONTS

ユーザ別設定

パス通したりする程度なんだけど。取り敢えず .bashrc には以下のような設定が必要かも。

## ~/.bashrc

JAVA_HOME=/usr/lib/j2sdk1.4-sun
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
export JAVA_HOME PATH CLASSPATH

サーバ上で動作とか、個々人で設定するのが面倒な場合は /etc/profile に記述しても良いかも。

MozillaへのJavaAppletプラグイン導入

プラグインを導入するには、以下のようにシンボリックリンクを貼れば良い。

# cd /usr/lib/
# ln -sf j2sdk1.4-sun/jre/plugin/i386/ns610-gcc32/libjavaplugin_oji.so mozilla-firefox/plugins/

導入・その他

Tomcat

今度はJava Servletとか。
TomcatてーのはJavaサーブレットだのJSPだのを処理するアプリケーションサーバ。こいつ単体でもWebサーバとして機能するけど、ウチとこでは現在Apache稼働させてPHPとかも使ってるし、今さらTomcatのHTTP設定方法を探るとか面倒だしでも2種類のHTTPサーバが立ち上がってる状態とか気持ち悪いし云々。
というわけでTomcatとApacheを連携動作させてやろう、という試み。

取り敢えず以下のパッケージを導入。

# apt-get install tomcat4 mod-jk tomcat4-webapps
...

以下、動作するまでの設定。

<!-- /etc/tomcat4/server.xml -->


    <!-- Define a non-SSL HTTP/1.1 Connector on port 8180 -->
<!-- これはTomcat独自のHTTPサーバ設定
    <Connector className="org.apache.catalina.connector.http.HttpConnector"
               port="8180" minProcessors="5" maxProcessors="75"
               enableLookups="true" acceptCount="10" debug="0"
               connectionTimeout="60000"/>
-->

...

    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <!-- Debian specific note: If you enable this connector you must disable
         it in the tomcat (Tomcat 3.x) package. The package for the Apache
         connector module is libapache-mod-jk -->
<!-- TomcatとApacheの連携に使われるポート設定 -->
    <Connector className="org.apache.ajp.tomcat4.Ajp13Connector"
               port="8009" minProcessors="5" maxProcessors="75"
               acceptCount="10" debug="0" address="127.0.0.1"/>
## /var/lib/tomcat/conf/mod_jk.conf

JkLogFile /var/log/tomcat4/mod_jk.log
JkLogLevel error

JkMount /*.jsp ajp13
JkMount /servlet/* ajp13 

Alias /examples "/var/lib/tomcat4/webapps/examples"

#
# The following line mounts all JSP files and the /servlet/ uri to tomcat
#
JkMount /examples/servlet/* ajp13
JkMount /examples/*.jsp ajp13

以下は jsp がエラーメッセージとか吐き出した時にちゃんと整形されて見えるようにするための設定。

## /etc/apache/httpd.conf

...

<IfModule mod_mime.c>
...
    # .jspの吐くエラーとかもHTMLで見られるようにする
    AddType text/html .jsp

...

ついでにJDBCドライバを使えるようにもしておこう。ただ、ちゃんと使えるようにするにはPostgreSQL側でネットワークポートを開ける設定変更をする必要もある。

//// /etc/tomcat4/policy.d/99psql.policy

//PostgreSQLの場合
grant codeBase
    "file:${catalina.home}/webapps/examples/WEB-INF/lib/postgresql- jdbc2.jar!/-"{
    permission java.net.SocketPermission "localhost:5432", "connect";
};

そしたら apachetomcat4 をリスタート。

# /etc/init.d/apache restart
...
# /etc/init.d/tomcat4 restart
...

動作確認には例題アプリケーションが付いてるので、そいつで確認することができる。

  • http://(自分とこのWebサーバアドレス)/examples/jsp/

そしたら今度はホームディレクトリで使えるように設定してみよう。
~/public_html/java/ 以下で動作するような設定を目指してみる。

<!-- /etc/tomcat4/server.xml -->

...

  <Service name="Tomcat-Standalone">

...

        <Context path="/~riyo"
                docBase="/home/riyo/public_html"
                debug="0"
                reloadable="true"
                crossContext="true">

                <Logger className="org.apache.catalina.logger.FileLogger"
                prefix="localhost_std_log."
                suffix=".txt"
                timestamp="true"/>
        </Context>

...
## /var/lib/tomcat/conf/mod_jk.conf

#JkMount /*.jsp ajp13
#JkMount /servlet/* ajp13 

...

JkMount /~riyo/java/servlet/* ajp13
JkMount /~riyo/java/*.jsp ajp13

これで試しに /var/lib/tomcat4/webapps/examples/jsp/ 以下から何か適当にjspを抜いて ~/public_html/java/ 以下に置いて確認してみる。
或いはそれ以外の場所に設置して、確認出来ない(というかJavaのコンパイル処理を受けずそのままHTMLとして出力される筈)ことを確認する。

gcj-3.4

Java VMの一つ。AOT(Ahead of Time)コンパイラで早いらしい。JITコンパイラの kaffe てのもあったんだけど、研究プログラムが動作しなかったので使うのやめた。AWTの文字化け問題が絡んでるかも知んない。debパッケージ作るの面倒そうだなぁ。。。なんてな訳で。

取り敢えず導入。

# apt-get install gcj-3.4

さくっと使ってみる。デフォルトではUTF-8エンコードらしいので、明示してやる必要あり。

$ gcj-3.4 -encoding euc-jp test.java

実行はこんな感じで。

$ gij-3.4 test

ネイティブな実行ファイルも作成できる。こんな感じ。

$ gcj-3.4 --encoding=EUC-JP -o test --main=test test.java

コンパイル出来たらおなぐさみ。

最後には update-alternativesjava を割り当てておくと良い。 wrapper を選択できるので、 encoding を指定する必要も無くなる。
javac にはこれよりも、下記にある jikes コンパイラを割り当てると良い感じ。

# update-alternatives --config java
(gij-wrapper-3.4を選択)

jikes

何だか知らんが高速で互換性が高くエラーメッセージが親切なJavaコンパイラ。便利なので使おう。
取り敢えず導入。

# apt-get install jikes jikes-gij

jikes-gijgcj と連携を取るためのもの。 jikes の参照するクラスライブラリを自動で決めてくれるみたい。まぁ結局はJ2SDKのコアライブラリを参照してるだけなんだけれども。
さくっとコンパイル。

# jikes-gij test.java

見た目にも、J2SDKの javac より早いことが判ると思う。すんげー。てか何してんだSun。御株を取られてるじゃないか。それはそれとして。
最後には update-alternativesjavac を割り当てておくと良い。

# update-alternatives --config javac
(jikes-gijを選択)