Chat (Lingr.com)
Informaiton
Daily
Column
- MySQL日本語の旅(5/1)
- アクセス向上秘伝(5/9)
- 一風変ったHaskellλ門(6/13)
- SICP Answer Book (5/31) 問題3.26追加
Zope Solution
Extra
アーカイブ
OSS案内所
Site Info
関連リンク
MacOS X 10.3でProject Looking Glassを動かす
English version: lg3d-macos-java14-en
- 概要
- 必要なもの
- MacOS X 10.3
- Java 3D 1.3.1 and JAI 1.1.2
- Apache Ant
- Project Looking GlassのCVSソース
- Retroweaver
- EDU.oswego.cs.dl.util.concurrentライブラリ
- 参考文献
- Linuxでの作業
- CVSからのソースコードチェックアウト
- Retroweaverライブラリのコピー
- lg3d-core/build.xmlの編集
- org.jdesktop.lg3d.displayserver.AppConnector.javaの編集
- EDU.oswego.cs.dl.util.concurrentライブラリのビルド
- concurrent.jarのコピー
- org.jdesktop.lg3d.displayserver.DisplayServerControl.javaの編集
- org.jdesktop.lg3d.displayserver.nativewindow.TiledNativeWindowImage.javaの編集
- lg3d-core/src/devscripts/lg3d-devの編集
- MacOSでの作業
- lg3d-YYMMddhhmm.tar.gzの展開
- EDU.oswego.cs.dl.util.concurrentライブラリのビルド
- concurrent.jarのコピー
- lg3d/bin/lg3d-devの実行
- 謝辞
- コメント
概要
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
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">
上記のdependsにretroweaverを追加。
<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.jarをlg3d-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.jarをlg3d/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 で参考にさせていただきました。
There is no comment.