Open Source WEB

MacOS X 10.3でProject Looking Glassを動かす

English version: lg3d-macos-java14-en


概要

Project Looking GlassはJava 1.5以上に対応しているので、 Java 1.4.2までしかリリースされていないMacOSでは動作しない。

  • Retroweaver: Java 1.5でコンパイルされたバイトコードを1.4以前のバイトコードに変換するツール
  • EDU.oswego.cs.dl.util.concurrent: Java 1.4以前で動作するSemaphoreを含むライブラリ

上記を使用してパッチを当てることで、 Project Looking GlassをJava 1.4で動作させることが可能になる。


注意点

本来Project Looking GlassはJava 1.5、Java 3D 1.3.2で動作させるべきである。

もうすぐリリースされるMacOS X 10.4ではJava 1.5がサポートされるので、 このドキュメントに書かれたパッチ作業は不要になる。


既知の問題点

Project Looking GlassをJava 3D 1.3.1で動作させたとき以下の問題点が分かっている。

  • transparency sorting problem ( fixed Java3D v1.3.2 )

この問題点はProject Looking GlassのためにJava 3D 1.3.2で修正された。


必要なもの


MacOS X 10.3

MacOS X 10.2以前ではJava 3DとJAIが動かない。


Java 3D 1.3.1 and JAI 1.1.2

http://docs.info.apple.com/article.html?artnum=120289


Apache Ant

http://ant.apache.org/


Project Looking GlassのCVSソース

cvs.dev.java.netの以下のプロジェクトが必要。

 lg3d-core
 lg3d-demo-apps

参考文献: Eclipse 3.1M4によるcvs.dev.java.netからのProject Looking Glassソースのビルド


Retroweaver

http://retroweaver.sourceforge.net/

Java 1.5のバイトコードを1.4以前の形式に変換するツール。

http://sourceforge.net/project/showfiles.php?group_id=104240

上記からretroweaver-all.jarをダウンロードする。


EDU.oswego.cs.dl.util.concurrentライブラリ

LG3DはJava 1.5のSemaphoreを使っている。

http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/intro.html

上記はSemaphoreを含むJava 1.4で動作するライブラリ。

http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/current/concurrent.tar.gz

上記からconcurrent.tar.gzをダウンロードする。


参考文献

http://www.javadesktop.org/forums/thread.jspa?threadID=7297&start=33

http://opengl.jp/blogger/2005/01/lg3d.html


Linuxでの作業

CVSソース書きかえとRetroweaverによるバイトコード変換はLinuxで行う。

LinuxではJava 1.5でビルドする。


CVSからのソースコードチェックアウト

java.netアカウントと同じログイン名でローカルのLinux環境にログインしている場合、 CVSログイン名を省略できる。

cvs -d :pserver:cvs.dev.java.net:/cvs login
cvs -d :pserver:cvs.dev.java.net:/cvs co -P lg3d-core
cvs -d :pserver:cvs.dev.java.net:/cvs co -P lg3d-demo-apps

Retroweaverライブラリのコピー

CVSソースをチェックアウトしたときのカレントディレクトリで retroweaver-all.jarを展開する。

jar xvf retroweaver-all.jar

Retroweaverの動作に必要なライブラリをlg3d-core/extにコピーする。

cp retroweaver/release/retroweaver.jar lg3d-core/ext/.
cp retroweaver/lib/Regex.jar           lg3d-core/ext/.
cp retroweaver/lib/bcel-5.1.jar        lg3d-core/ext/.
cp retroweaver/lib/jace.jar            lg3d-core/ext/.

lg3d-core/build.xmlの編集


ターゲットretroweaverの追加

build.xmlにターゲットretroweaverを追加する。

   <target name="retroweaver" depends="init">
        <java classname="com.rc.retroweaver.Weaver">
          <arg value="-source"/>
          <arg value="${classes.dir}"/>
          <classpath>
            <fileset dir="ext">
                <include name="retroweaver.jar"/>
                <include name="Regex.jar"/>
                <include name="bcel-5.1.jar"/>
                <include name="jace.jar"/>
            </fileset>
          </classpath>
        </java> 
    </target>

ターゲットretroweaverの動作確認

ant retroweaver

上記を実行してlg3d-core/build/classes配下のクラスファイルが変換されることを確認する。


ターゲットjarの編集

    <target depends="init,compile" name="jar">

上記のdependsretroweaverを追加。

    <target depends="init,compile,retroweaver" name="jar">

ターゲットjarをビルドしたときRetroweaverでクラスファイルが変換されることを確認する。

ant jar

concurrent.jar を classpathに追加

    <target depends="init" name="compile" description="Compile SDK (exclude X11 integration">

(略)

            <!-- To add something to the classpath: -->
            <classpath>
                <pathelement location="${ext.dir}/escher-0.2.2.lg.jar"/>
                <pathelement location="${ext.dir}/odejava.jar"/>
                <pathelement location="${ext.dir}/satin-v2.3.jar"/>
                <pathelement location="${incubator.dir}/build/classes"/>
            </classpath>
(略)

    </target>

上記にconcurrent.jarを追加

                <pathelement location="${ext.dir}/concurrent.jar"/>

追加後:

            <!-- To add something to the classpath: -->
            <classpath>
                <pathelement location="${ext.dir}/concurrent.jar"/>
                <pathelement location="${ext.dir}/escher-0.2.2.lg.jar"/>
                <pathelement location="${ext.dir}/odejava.jar"/>
                <pathelement location="${ext.dir}/satin-v2.3.jar"/>
                <pathelement location="${incubator.dir}/build/classes"/>
            </classpath>

org.jdesktop.lg3d.displayserver.AppConnector.javaの編集

Java 3Dのバージョンチェックしている箇所を書き換える。

        if (!j3dPackage.getImplementationVersion().startsWith("1.3.2"))
            logger.severe("Project Looking Glass requires Java 3D 1.3.2, but version "+j3dPackage.getImplementationVersion()+" is installed?nYou will almost certainly see NullPointerExceptions");

上記の1.3.2を1.3.1に書き換える

        if (!j3dPackage.getImplementationVersion().startsWith("1.3.1"))
            logger.severe("Project Looking Glass requires Java 3D 1.3.1, but version "+j3dPackage.getImplementationVersion()+" is installed?nYou will almost certainly see NullPointerExceptions");

参考文献: http://www.javadesktop.org/forums/thread.jspa?threadID=7297&start=33


EDU.oswego.cs.dl.util.concurrentライブラリのビルド

concurrentライブラリをビルドする。

ここでビルドしたconcurrent.jaライブラリはJava 1.5で動作する。 MacOS X 10.3のJava 1.4では動作しない。

tar xvfz concunnernt.tar.gz
cd concurrent
ant dist

concurrent.jarのコピー

ビルドで得られたconcurrent.jarlg3d-core/extにコピーする。

cd ..
cp concurrent/lib/concurrent.jar lg3d-core/ext/.

org.jdesktop.lg3d.displayserver.DisplayServerControl.javaの編集

import java.util.concurrent.Semaphore;

上記のimport文を以下に書き換え。

import EDU.oswego.cs.dl.util.concurrent.Semaphore;
        Semaphore canvas3dInitialized = new Semaphore(0, false);

上記のSemaphore生成部分を以下に書き換える。

        Semaphore canvas3dInitialized = new Semaphore(0);

参考文献: http://www.javadesktop.org/forums/thread.jspa?threadID=7297&start=37


org.jdesktop.lg3d.displayserver.nativewindow.TiledNativeWindowImage.javaの編集


import文の編集

import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;

上記のimport文をコメントアウトして EDU.oswego.cs.dl.util.concurrent.Semaphoreをimportするように変更。

//import java.util.concurrent.Semaphore;
//import java.util.concurrent.TimeUnit;
import EDU.oswego.cs.dl.util.concurrent.Semaphore;

Semaphore生成部分の編集

    private Semaphore filledSemaphore = new Semaphore( 0, false );

上記を以下に書き換える。

    private Semaphore filledSemaphore = new Semaphore(0);

Semaphore#tryAquireの編集

        while(!filledSemaphore.tryAcquire( 2, TimeUnit.SECONDS ))

上記のwhileループをやめ、以下に書き換える。

        filledSemaphore.acquire();

参考文献: http://www.javadesktop.org/forums/thread.jspa?threadID=7297&start=37


lg3d-core/src/devscripts/lg3d-devの編集

pkill -f "rmiregistry ${RMI_PORT}"

pkillをkillallに書き換える。

killall -9 rmiregistry

releaseターゲットのビルド

cd lg3d-core
ant release

これでRetroweaverで変換されJava 1.4で動作するlg3d-core.jarを含んだtarballがlg3d-core/releaseディレクトリに得られるはずである。

完成したtarballをMacOSにコピーする。

scp release/lg3d-YYMMddhhmm.tar.gz macos-hostname:

MacOSでの作業

EDU.oswego.cs.dl.util.concurrentライブラリのビルドはMacOS X 10.3で行う。


lg3d-YYMMddhhmm.tar.gzの展開

tar xvfz lg3d-YYMMddhhmm.tar.gz

カレントディレクトリにlg3dというディレクトリが展開される。


EDU.oswego.cs.dl.util.concurrentライブラリのビルド

MacOS X 10.3でEDU.oswego.cs.dl.util.concurrentライブラリをビルドする。

tar xvfz concunnernt.tar.gz
cd concurrent
ant dist

concurrent.jarのコピー

MacOS X 10.3、Java 1.4.2でビルドしたconcurrent.jarlg3d/extにコピーする。

cp concurrent/lib/concurrent.jar lg3d/ext/.

lg3d/bin/lg3d-devの実行

./lg3d/bin/lg3d-dev

LG3Dデスクトップが表示されたら成功。


謝辞

英語訳を提供していただいたHirano Kazunari氏に感謝します。

http://www.javadesktop.org/forums/thread.jspa?threadID=7297&start=48

このhowtoの英語版 lg3d-macos-java14-en で参考にさせていただきました。


コメント

Name:
Comment:

There is no comment.

このサイトは、 IPA の「平成15年度オープンソフトウエア活用基盤整備事業」 の委託事業として開発されたKahuaで試験的に運用しております。

Copyright (c) 2004-2007 株式会社タイムインターメディア About Us