- Homebrew/r-command
$ brew tap homebrew/science
$ brew install r
$ R CMD javareconf JAVA_CPPFLAGS="-I/System/Library/Frameworks/JavaVM.framework/Headers -I/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk"
- Eclipse
- Java Projectを作る
- BuildPathに追加する
/usr/local/Cellar/r/3.1.2/R.framework/Versions/3.1/Resources/library/rJava/jri/JRI.jar
- コードを追加する
- src/rJava/RSample.java
- src/rJava/RSample.java
- 一度RSampleをJavaApplicationとして実行してしまって,JavaApplicationの実行パネルを作ってしまう
- RunConfigureから上記で作成されたJavaApplicationのConfigureを選択し,以下を追加する
- Argumentsタブ > "VM arguments:"
-Djava.library.path=.:/usr/local/Cellar/r/3.1.2/R.framework/Versions/3.1/Resources/library/rJava/jri
- Environmentタブ > "Environment variables to set:"
- Variable:
R_HOME
- Value:
/usr/local/Cellar/r/3.1.2/R.framework/Versions/3.1/Resources
- 再度RSampleを実行.
高確率で思い込みによる説明.間違っていることが多い./「無知だったり、勘違いしていたり、底意を押しつけたり、いいかげんだったり、噂や疑惑を信じていたりして、狂気じみてさえいるかもしれません」( http://bit.ly/gs23zg )
2015年1月10日土曜日
math/R 3.1.2 をJava 1.8.0_25 から使う (MacOSX 10.10.1 + Homebrew 0.9.5 + Eclipse 4.4.1)
2009年9月27日日曜日
NyARToolkit-2.3.1 for Java on Snow Leopard (using OpenCV/JNI)
Environment
01. MacOSX 10.6.1 (Snow Leopard)
02. Eclipse (Java IDE)
Resouce
01. NyARToolkit-2.3.1 for Java (NyARToolkit-2.3.1.zip)
02. OpenCV / Processing and Java Library (opencv_01.zip) (reference: this, this)
Eclipse
01. Make a 'Java Project'
02. DnD (Drag and Drop) from 'NyARToolkit-2.3.1/src/jp' folder to 'src' folder.
03. DnD from 'NyARToolkit-2.3.1/src.utils/qt/jp' folder to 'src' folder.
04. DnD from 'NyARToolkit-2.3.1/sample/qt/jp' folder to 'src' folder.
05. DnD from 'NyARToolkit-2.3.1/Data' folder to the project top (project icon).
06. DnD from 'OpenCV/library' folder to the project top (project icon).
07. Add to build path the 'OpenCV/library/OpenCV.jar' file.
08. Delete the 'jp.nyatla.nyartoolkit.qt.utils.QtCameraCapture.java' file.
09. Create the 'test.CameraCapture.java' file.package test;
import hypermedia.video.OpenCV;
import jp.nyatla.nyartoolkit.qt.utils.QtCaptureListener;
public class CameraCapture implements Runnable {
private QtCaptureListener listener;
protected byte[] p;
int w;
int h;
int r;
private OpenCV cv;
private Thread t;
public CameraCapture(int _w, int _h, float _r) {
w = _w;
h = _h;
r = (int)(1000.0 / _r);
p = new byte[w * h * 3];
cv = new OpenCV();
cv.capture(w, h);
}
public void setCaptureListener(QtCaptureListener _listener) {
listener = _listener;
}
public void start() {
t = new Thread(this);
t.start();
}
public void stop() {
t = null;
cv.dispose();
}
public void run() {
while (t != null && cv != null) {
try {
Thread.sleep(r);
cv.read();
int[] p_int = cv.pixels();
int j = 0;
for (int i = 0; i < w * h; i++) {
p[j++] = (byte) (p_int[i] >> 16);
p[j++] = (byte) (p_int[i] >> 8);
p[j++] = (byte) (p_int[i]);
}
listener.onUpdateBuffer(p);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}Package Explorer like this
09. Edit the 'jp.nyatla.nyartoolkit.qt.sample.NyarToolkitLinkTest.java' file.
09.a the 2 variables's valueprivate final String CARCODE_FILE = "./Data/patt.hiro";
private final String PARAM_FILE = "./Data/camera_para.dat";
09.b Replace from 'QtCameraCapture' to 'CameraCapture'.
10. Edit the 'jp.nyatla.nyartoolkit.qt.sample.NyarToolkitLinkTest.java' file and the 'jp.nyatla.nyartoolkit.qt.sample.QtCaptureTest.java'10.a Add the 'import test.CameraCapture;'
10.b Replace from 'QtCameraCapture' to 'CameraCapture'.
11. Run11.a Set the run configuretionVM arguments: -d32 -Djava.library.path=${project_loc}/library(The upper image is used a wrong name (lib).
11.b Run the 'jp.nyatla.nyartoolkit.qt.sample.NyarToolkitLinkTest'.
Result
ラベル:
ARToolkit,
eclipse,
java,
NyARToolkit,
OpenCV
JavaでJNIをつかってOpenCVのビデオキャプチャ
これを単純なキャプチャだけにしてみた.
コードimport hypermedia.video.OpenCV;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.image.MemoryImageSource;
public class Sample extends Frame implements Runnable {
final int FRAME_RATE = 1000 / 30;
private OpenCV cv;
private Thread t;
private Image frame = null;
public Sample() {
cv = new OpenCV();
cv.capture(640, 480);
setBounds(100, 100, cv.width, cv.height);
setVisible(true);
addKeyListener(new KeyAdapter() {
public void keyReleased(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_SPACE) {
stop();
System.exit(0);
}
}
});
t = new Thread(this);
t.start();
}
@Override
public void run() {
while (t != null && cv != null) {
try {
Thread.sleep(FRAME_RATE);
cv.read();
MemoryImageSource mis = new MemoryImageSource(cv.width,
cv.height, cv.pixels(), 0, cv.width);
frame = createImage(mis);
repaint();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void paint(Graphics g) {
if (frame == null)
return;
g.drawImage(frame, 0, 0, null);
}
public void stop() {
t = null;
cv.dispose();
}
public static void main(String[] args) {
new Sample();
}
}
Eclipse環境/ファイル配置
Eclipse環境/実行時引数-d32 -Djava.library.path=${project_loc}/lib
2008年6月30日月曜日
math/R をJava(Eclipse)から使う
追記(2015/2/18): 新しいの書いた.math/R 3.1.2 をJava 1.8.0_25 から使う (MacOSX 10.10.1 + Homebrew 0.9.5 + Eclipse 4.4.1)
追記(2009/10/6): rJavaに含まれたそうで,そのメモ.
RをJavaから使うのに色々あるみたいなんですがまぁ流れ流れてJRIに行き着きました.
でやり方メモ.
環境
・MacOS X 10.5.3 / Java 1.5.0_13
・Eclipse 3.2.2
(・R 2.7.0)
(・JRI 0.4-1)
0.Rを入れる.
> sudo port install R
2.7.0が入った.
1.JRIをdownload, configure, make, テスト
・JRIをdownloadして展開 (0.4-1)
・configureとmakeとテスト
> ./configure
> make
> ./run rtest
> ./run rtest2
2.必要なモノとコト
モノ
・src/JRI.jar
・src/libjri.jnilib
コト
・R_HOME=/opt/local/lib/R という環境設定
・LD_LIBRARY_PATH=${R_HOME}/bin:${R_HOME}/lib という環境設定
・既にLD_LIBRARY_PATHがあればLD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${R_HOME}/bin:${R_HOME}/lib
・Java実行時にjava.library.pathをlibjri.jnilibへ向けての設定.
・Javaコンパイル,実行時にclasspathにJRI.jarを含める設定.
3.試す.
3.1プロジェクトを作成
lib/JRI.jar, lib/libjri.jnilibを設置,lib/JRI.jarはプロジェクトに含めておく(説明を省きます).
3.2コード
Sample_Rクラスをつくってmainを書く.とりあえず動作させるだけなのでこんな感じ.
import org.rosuda.JRI.Rengine;
public class Sample_R {
public static void main(String[] args) {
if (!Rengine.versionCheck()) {
System.err
.println("** Version mismatch - Java files don't match library version.");
System.exit(1);
}
Rengine re = new Rengine(new String[]{"--no-save"}, false, null);
if (!re.waitForR()) {
System.out.println("Cannot load R");
return;
}
System.out.println(re.eval("sqrt(36)"));
re.end();
}
}3.3実行環境の設定
・メニューバー Run/Open Run Dialog...を選択
・Sample_Rに関するものを選択,まずはArguments
VM argumentsとして'-Djava.library.path=./lib'を設定

・次にEnvironment
環境変数としてR_HOMEとLD_LIBRARY_PATHを設定する.LD_LIBRARY_PATHで同時に設定したR_HOMEが参照できなかった…のでとりあえず全部入力した.R_HOME=/opt/local/lib/R, LD_LIBRARY_PATH=/opt/local/lib/R/bin:/opt/local/lib/R/lib

4で実行.
[REAL* (6.0)]
とりあえず動いたけど.合ってるかしら?間違いがあればご指摘いただければ幸いです.
2008年6月28日土曜日
Tutorial Example 3改のBundleの作り方(Swingを使う場合の例)
OSGi BundleのTutorialにあるExample3をEclipseで作ってみます.かつ,先のsample.FelixApplicationで動くようにDialogで入出力を行うようにします.
0.依存関係のあるBundleのjarファイルをEclipseに追加しておく
(これをEclipseの中でどうやるのかわからなかったので無理矢理な解決法です.誰か正攻法があれば教えてください.自分でExample2のプロジェクトをつくって,Package Explorer中でOpenしてある場合はそれはそのまま参照されています.)
Example3はExample2を利用します.Example2で定義してあるInterfaceを利用しているのでExample2のjarをEclipseが見えるようにしておきまます.
jarファイル: http://y30.net/pg/plugins/osgis/tutorial.Example_2_1.0.0.jar
これをEclipseのpluginsフォルダに放り込んでおきます.
で,起動.
1.Projectを作成
New/'Project' を選択(Java Projectじゃないよ)
Wizerdの選択にてPlug-in Projectを選択.
(画像はexample1の時を流用しているので1->3と読み直してください)
Dialogに入力
Project name: tutorial.example3
Target Platform: an OSGi framework standard
(ほかそのまま)
Nextを押す.

#(OSGi framework standardが選べればEclipse 3.2でも良いはずです)
'Plug-in Content'のDialogとなる.
Finishを押す.

2.プロジェクトに依存するtutorial.Example_2 Bundleを指定しておく.
Plug-in Manifest Editorを使ってbuildする.
このEditor, META-INF/MANIFEST.MFをクリックすると立ち上がる.(プロジェクトができた時も立ち上がってる.)
左から2番目のタブ'Dependencies'にある'Required Plug-ins'で'Add...'ボタンを押す.

でてきたDialogから'tutorial.Example_2'を選ぶ(もしくはフィールドに入力する).
これは0.で入れてないと(もしくはExample_2をプロジェクトとして持っていないと見えない.)

保存することを忘れずに.
3.Activator.javaの編集
src/example/tutorial3/Activator.javaにここのコードを書き写す.
ただし以下の部分が改造部.
4.Plug-in Manifest Editorを使ってbuildする.
このEditor, META-INF/MANIFEST.MFをクリックすると立ち上がる.(プロジェクトができた時も立ち上がってる.)
4.1ビルドの前にswingパッケージをImport対象として指定する.
左から2番目のタブ'Dependencies'にある'Imported Packages'で'Add...'ボタンを押す.
でてきたDialogから'javax.swing'を選ぶ(もしくはフィールドに入力する).

4.2ビルド
一番左のタブ'Overview'にあるExportingの3項目
'3. Export the plug-in in a format suitable for deployment using the(?) Export Wizard'をクリック(Export Wizard部分)
で,Deployable Plugin-ins and fragmentsダイアログがでる.
DestinationタブのDirectoryを選択しテキトーな場所(ディレクトリ)を指定.(以降ここを${DIRECTORY}と呼ぶ)
Finishを押す.

${DIRECTORY}/plugins/tutorial.example3_1.0.0.jarが出来上がる.
0.依存関係のあるBundleのjarファイルをEclipseに追加しておく
(これをEclipseの中でどうやるのかわからなかったので無理矢理な解決法です.誰か正攻法があれば教えてください.自分でExample2のプロジェクトをつくって,Package Explorer中でOpenしてある場合はそれはそのまま参照されています.)
Example3はExample2を利用します.Example2で定義してあるInterfaceを利用しているのでExample2のjarをEclipseが見えるようにしておきまます.
jarファイル: http://y30.net/pg/plugins/osgis/tutorial.Example_2_1.0.0.jar
これをEclipseのpluginsフォルダに放り込んでおきます.
で,起動.
1.Projectを作成
New/'Project' を選択(Java Projectじゃないよ)
Wizerdの選択にてPlug-in Projectを選択.
(画像はexample1の時を流用しているので1->3と読み直してください)Dialogに入力
Project name: tutorial.example3
Target Platform: an OSGi framework standard
(ほかそのまま)
Nextを押す.

#(OSGi framework standardが選べればEclipse 3.2でも良いはずです)
'Plug-in Content'のDialogとなる.
Finishを押す.

2.プロジェクトに依存するtutorial.Example_2 Bundleを指定しておく.
Plug-in Manifest Editorを使ってbuildする.
このEditor, META-INF/MANIFEST.MFをクリックすると立ち上がる.(プロジェクトができた時も立ち上がってる.)
左から2番目のタブ'Dependencies'にある'Required Plug-ins'で'Add...'ボタンを押す.

でてきたDialogから'tutorial.Example_2'を選ぶ(もしくはフィールドに入力する).
これは0.で入れてないと(もしくはExample_2をプロジェクトとして持っていないと見えない.)

保存することを忘れずに.
3.Activator.javaの編集
src/example/tutorial3/Activator.javaにここのコードを書き写す.
ただし以下の部分が改造部.
- 改造内容
- sample.FelixApplicationはコンソールがないためDialogで処理するように改造
- tutorial2, 2bと複数登録した場合に両方利用した結果を返すように改造
- 改造前 1
System.out.print("Enter word: ");
word = in.readLine();- 改造後 1
word = JOptionPane.showInputDialog("Enter word: ");JOptionPaneを使うのでswingのサンプル- 改造前 2
// First, get a dictionary service and then check
// if the word is correct.
DictionaryService dictionary =
(DictionaryService) context.getService(refs[0]);
if (dictionary.checkWord(word))
{
System.out.println("Correct.");
}
else
{
System.out.println("Incorrect.");
}
// Unget the dictionary service.
context.ungetService(refs[0]);- 改造後 2
String msg = "";
for (int i = 0; i < refs.length; i++) {
ServiceReference sr = refs[i];
DictionaryService dictionary = (DictionaryService) context
.getService(sr);
String lang = (String) sr.getProperty("Language");
if (msg.length() != 0) {
msg += "\n";
}
msg += lang;
if (dictionary.checkWord(word)) {
msg += ": Correct.";
} else {
msg += ": Incorrect.";
}
context.ungetService(sr);
}
JOptionPane.showMessageDialog(null, msg);
4.Plug-in Manifest Editorを使ってbuildする.
このEditor, META-INF/MANIFEST.MFをクリックすると立ち上がる.(プロジェクトができた時も立ち上がってる.)
4.1ビルドの前にswingパッケージをImport対象として指定する.
左から2番目のタブ'Dependencies'にある'Imported Packages'で'Add...'ボタンを押す.
でてきたDialogから'javax.swing'を選ぶ(もしくはフィールドに入力する).

4.2ビルド
一番左のタブ'Overview'にあるExportingの3項目
'3. Export the plug-in in a format suitable for deployment using the(?) Export Wizard'をクリック(Export Wizard部分)
で,Deployable Plugin-ins and fragmentsダイアログがでる.
DestinationタブのDirectoryを選択しテキトーな場所(ディレクトリ)を指定.(以降ここを${DIRECTORY}と呼ぶ)
Finishを押す.

${DIRECTORY}/plugins/tutorial.example3_1.0.0.jarが出来上がる.
ラベル:
apache felix,
eclipse,
java,
OSGi
2008年3月9日日曜日
GWT on Rails : JSON Requestを処理できるようにしたその後とEclipseに入れてみる
さて改めてJSON Request / REST が処理できるサーバができたところからを復習すると以下の感じになる(Rails 2.0.2).
Project: Railsに作ったモデル.
dashboard: Webアプリケーション(サービス)の名前(アクセス時のパスにもなる)
出来上がるファイル
さてGWTを使うんだからEclipseにて編集したいのは私だけではないと思う(思いたい).
部分的にJava編集のためだけ使ってそれ以外はすべてコンソールでもいっこうに良いと思う.
'File/New/Java Project'にてCreate Java Projectダイアログをだし,Contentsのチェックで'Create project from existing source'側を選択し${RAILS_PROJECT}/app/gwt/dashboardを指定すれば良い.自動的にsrcを認識してくれるしディレクトリツリー下にあるjarをライブラリとして組み込んでくれる.あと外部Jarとして${GWT_HOME}/gwt-user.jarを入れてあげることもお忘れなく.(GWT1.4系はJava1.5系の<>で囲んで型を書くやつ(ジェネリクス?)が使えないのでEclipse側のJRE等も1.4系にしておくと良いかも)
また全体をEclipseに入れるとしても同じようにしてあげればよい.この時はvendor/plugins/gwt_on_rails下のjarもライブラリとして登録されるので外しておく.あとは部分的の場合と同じ.この場合External Toolとしてrakeが呼べるので下の画像の用に登録してあげて動かす.

GEM_HOMEが不明で動かない場合は環境変数を入れてあげる.

Refeshタブのチェックボックスも入れといても良いかもね.
これでEclipseからGWTのコンパイルが呼べるし,まぁその他いろいろ便利になるかもしれない.
> script/plugin install http://gwt-on-rails.googlecode.com/svn/trunk/gwt_on_rails
> script/generate gwt_resource Project dashboard
> rake db:migrate
> script/generate gwt_client dashboard ${GWT_HOME}
Project: Railsに作ったモデル.
dashboard: Webアプリケーション(サービス)の名前(アクセス時のパスにもなる)
出来上がるファイル
app/gwt/dashboard/src/dashboard/client/Dashboard.java等を編集.その後コンパイル.
app/views/dashboard/index.html.erb
> rake dashboard:compile
さてGWTを使うんだからEclipseにて編集したいのは私だけではないと思う(思いたい).
部分的にJava編集のためだけ使ってそれ以外はすべてコンソールでもいっこうに良いと思う.
'File/New/Java Project'にてCreate Java Projectダイアログをだし,Contentsのチェックで'Create project from existing source'側を選択し${RAILS_PROJECT}/app/gwt/dashboardを指定すれば良い.自動的にsrcを認識してくれるしディレクトリツリー下にあるjarをライブラリとして組み込んでくれる.あと外部Jarとして${GWT_HOME}/gwt-user.jarを入れてあげることもお忘れなく.(GWT1.4系はJava1.5系の<>で囲んで型を書くやつ(ジェネリクス?)が使えないのでEclipse側のJRE等も1.4系にしておくと良いかも)
また全体をEclipseに入れるとしても同じようにしてあげればよい.この時はvendor/plugins/gwt_on_rails下のjarもライブラリとして登録されるので外しておく.あとは部分的の場合と同じ.この場合External Toolとしてrakeが呼べるので下の画像の用に登録してあげて動かす.

GEM_HOMEが不明で動かない場合は環境変数を入れてあげる.

Refeshタブのチェックボックスも入れといても良いかもね.
これでEclipseからGWTのコンパイルが呼べるし,まぁその他いろいろ便利になるかもしれない.
2008年2月23日土曜日
Apache Felix OSGi tutorial: Example 1 をEclipse 3.3で.
追記 2008/06/28 これを元にMac用のアプリを作りました.
1.Projectを作成
New/'Project' を選択(Java Projectじゃないよ)
Wizerdの選択にてPlug-in Projectを選択.

Dialogに入力
Project name: tutorial.example1
Target Platform: an OSGi framework standard
(ほかそのまま)
Nextを押す.

#(OSGi framework standardが選べればEclipse 3.2でも良いはずです)
'Plug-in Content'のDialogとなる.
Finishを押す.

2.Activator.javaの編集
(面倒な人は編集しなくてもテンプレートで十分だよ.)
src/example/tutorial1/Activator.javaにここのコードを書き写す.
3.Plug-in Manifest Editorを使ってbuildする.
このEditor, META-INF/MANIFEST.MFをクリックすると立ち上がる.(プロジェクトができた時も立ち上がってる.)
一番左のタブ'Overview'にあるExportingの3項目
'3. Export the plug-in in a format suitable for deployment using the(?) Export Wizard'をクリック(Export Wizard部分)
で,Deployable Plugin-ins and fragmentsダイアログがでる.
DestinationタブのDirectoryを選択しテキトーな場所(ディレクトリ)を指定.(以降ここを${DIRECTORY}と呼ぶ)
Finishを押す.

${DIRECTORY}/plugins/tutorial.example1_1.0.0.jarが出来上がる.
4.FelixApplicationに対する修正.
ここのMain.javaにおいて
5.実行!
FelixApplicationプロジェクトのexample.Mainクラスを実行.
Tutorial通りなら以下
Eclipseのテンプレートのままなら
とConsoleに表示されるはず.
どっちも止められないからConsole Viewの停止ボタンで止めてね.

以上.
ちなみに「Windowを出したいな.」なんてことでSwingなんかを使いたくなったらこんな感じにする.
1.Projectを作成
New/'Project' を選択(Java Projectじゃないよ)
Wizerdの選択にてPlug-in Projectを選択.

Dialogに入力
Project name: tutorial.example1
Target Platform: an OSGi framework standard
(ほかそのまま)
Nextを押す.

#(OSGi framework standardが選べればEclipse 3.2でも良いはずです)
'Plug-in Content'のDialogとなる.
Finishを押す.

2.Activator.javaの編集
(面倒な人は編集しなくてもテンプレートで十分だよ.)
src/example/tutorial1/Activator.javaにここのコードを書き写す.
3.Plug-in Manifest Editorを使ってbuildする.
このEditor, META-INF/MANIFEST.MFをクリックすると立ち上がる.(プロジェクトができた時も立ち上がってる.)
一番左のタブ'Overview'にあるExportingの3項目
'3. Export the plug-in in a format suitable for deployment using the(?) Export Wizard'をクリック(Export Wizard部分)
で,Deployable Plugin-ins and fragmentsダイアログがでる.
DestinationタブのDirectoryを選択しテキトーな場所(ディレクトリ)を指定.(以降ここを${DIRECTORY}と呼ぶ)
Finishを押す.

${DIRECTORY}/plugins/tutorial.example1_1.0.0.jarが出来上がる.
4.FelixApplicationに対する修正.
ここのMain.javaにおいて
public static String PLUGINS_LOCATION = "file:/path/to/plugins/";
をpublic static String PLUGINS_LOCATION = "file:${DIRECTORY}/plugins/";
に変更.
5.実行!
FelixApplicationプロジェクトのexample.Mainクラスを実行.
Tutorial通りなら以下
Starting to listen for service events.
Eclipseのテンプレートのままなら
Hello World!!
とConsoleに表示されるはず.
どっちも止められないからConsole Viewの停止ボタンで止めてね.

以上.
ちなみに「Windowを出したいな.」なんてことでSwingなんかを使いたくなったらこんな感じにする.
追記:上のはちょっとまった.Felix側でjavax.swingをexportしてあげないといけない.このやり方はまた今度!
追記2:plugin側でjavax.swingを'Imported Pakages'にて設定したら,このFelixApplicationではこの一行を追加する.private static String getString_SystemPackages() {
List list = new ArrayList();
list.add("org.osgi.framework; version=1.3.0");
list.add("org.osgi.service.packageadmin; version=1.2.0");
list.add("org.osgi.service.startlevel; version=1.0.0");
list.add("org.osgi.service.url; version=1.0.0");
list.add("javax.swing"); // <- これを追加
return join(list, ",");
}
ラベル:
apache felix,
eclipse,
java,
OSGi
Apache Felixをプラットフォームにする.
追記 2008/06/28 これを元にMac用のアプリを作りました.
Apache FelixはOSGi R4 Service Platformの実装です.
まぁ端的に言えばプラグイン(Plugin)型(OSGiではバンドル(Bundle)と呼ぶ)のアプリケーションを作る上での土台みたいなモノです.
で,そのやり方をちょこっと書いてみます.
0.材料
ここからdownload. (Felix 1.0.3)
必要なのはfelix-1.0.3/bin/felix.jar
1.Eclipse Projectでやってみる.
ここではJava Project.
'FelixApplicatin'という名前.
'.class'ファイルの場所を分けるため,'project layout'の設定でsrc/binをもうける方にする.(趣味?)

でとりあえず作成しちゃう.
2.外部jarの設定
プロジェクト名上で右クリックにてコンテクストメニューを出す.
'Build Path / Add External Archive...' にてfelix.jarを追加.

3.Main classを作る.
起動用のMain class( example.Main )をsrcの下に作る.
で,コードはこんな感じ.
4.で,このMainを起動.
なんだけど上の例ではtutorial.example1_1.0.0.jarというjarをpluginとして読み込んでる.
こいつは"Apache Felix Tutorial Example 1"で作り方が書かれているサンプルPlugin.
で,これについてはまた今度.
ここまでのプロジェクトツリーはこんな感じ.

#'cache'は実行すると作られる.
#コードの'(1)'で定義している名前となる.
Apache FelixはOSGi R4 Service Platformの実装です.
まぁ端的に言えばプラグイン(Plugin)型(OSGiではバンドル(Bundle)と呼ぶ)のアプリケーションを作る上での土台みたいなモノです.
で,そのやり方をちょこっと書いてみます.
0.材料
ここからdownload. (Felix 1.0.3)
必要なのはfelix-1.0.3/bin/felix.jar
1.Eclipse Projectでやってみる.
ここではJava Project.
'FelixApplicatin'という名前.
'.class'ファイルの場所を分けるため,'project layout'の設定でsrc/binをもうける方にする.(趣味?)

でとりあえず作成しちゃう.
2.外部jarの設定
プロジェクト名上で右クリックにてコンテクストメニューを出す.
'Build Path / Add External Archive...' にてfelix.jarを追加.

3.Main classを作る.
起動用のMain class( example.Main )をsrcの下に作る.
で,コードはこんな感じ.
src/example/Main.javapackage example;
import java.util.Map;
import java.util.List;
import java.util.ArrayList;
import org.osgi.framework.Constants;
import org.apache.felix.framework.Felix;
import org.apache.felix.framework.cache.BundleCache;
import org.apache.felix.framework.util.StringMap;
import org.apache.felix.main.AutoActivator;
public class Main {
private static Felix felix = null;
private static String join(List list, String d) {
if (list.isEmpty()) {
return "";
}
StringBuffer ret = new StringBuffer((String) list.get(0));
for (int i = 1; i < list.size(); i++) {
ret.append(d);
ret.append((String) list.get(i));
}
return ret.toString();
}
private static String getString_SystemPackages() {
List list = new ArrayList();
list.add("org.osgi.framework; version=1.3.0");
list.add("org.osgi.service.packageadmin; version=1.2.0");
list.add("org.osgi.service.startlevel; version=1.0.0");
list.add("org.osgi.service.url; version=1.0.0");
return join(list, ",");
}
public static String PLUGINS_LOCATION = "file:/path/to/plugins/"; // http:でもいいよ
private static String getString_AutoStartProp() {
List list = new ArrayList();
list.add(PLUGINS_LOCATION + "tutorial.example1_1.0.0.jar");
return join(list, " ");
}
public static void main(String[] argv) throws Exception {
Map configMap = new StringMap(false);
configMap.put(Constants.FRAMEWORK_SYSTEMPACKAGES,
getString_SystemPackages());
configMap.put(AutoActivator.AUTO_START_PROP + ".1",
getString_AutoStartProp());
configMap.put(BundleCache.CACHE_PROFILE_DIR_PROP, "cache");
List activators = new ArrayList();
activators.add(new AutoActivator(configMap));
felix = new Felix(configMap, activators);
try {
felix.start();
} catch (Exception ex) {
System.err.println("Could not create framework: " + ex);
ex.printStackTrace();
System.exit(-1);
}
}
}
4.で,このMainを起動.
なんだけど上の例ではtutorial.example1_1.0.0.jarというjarをpluginとして読み込んでる.
こいつは"Apache Felix Tutorial Example 1"で作り方が書かれているサンプルPlugin.
で,これについてはまた今度.
ここまでのプロジェクトツリーはこんな感じ.

#'cache'は実行すると作られる.
#コードの'(1)'で定義している名前となる.
参考: ありがとうございました.
Apache Felix - Launching and Embedding Apache Felix
Gridshore » Blog Archive » Starting with OSGi using apache felix (step 1)
ラベル:
apache felix,
eclipse,
java,
OSGi
2008年2月17日日曜日
GWT-Ext用のEclipse内でのbuild.xmlを考える.
・必要なファイル達についてはこちらの'0'の項を参照してください.
・プロジェクト('MyProject')の作成はこちらの'1-3'を参照してください.
で
(必要なら)web.xmlを用意.
で
で
#WEB-INF以下にclasses/**/*.class, lib/servlet.jarをcopyするところはRPC用.
で
プロジェクトはこんな感じ.

で
Ant実行終了時にできたファイル等をExplorerに反映するためにRefreshにチェックをいれておくと便利.

MyProject.javaをいじる前にMyProject.gwt.xmlのmodule要素の直下に一行追加するのをお忘れないように…
#私が忘れてハマっただけです…
・プロジェクト('MyProject')の作成はこちらの'1-3'を参照してください.
で
(必要なら)web.xmlを用意.
MyProject/WEB/web.xml<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<welcome-file-list>
<welcome-file>MyProject.html</welcome-file>
</welcome-file-list>
</web-app>
で
MyProject/build.properties#
src.dir=src
dist.dir=dist
#
gwt.location=GWT_HOME
gwtext.location=GWTExt_HOME
ext.location=ExtJS_HOME
#
project.package=com.mycompany
src.public.dir=${src.dir}/${project.package}/public
gwt.entrypoint.class=${project.package}.MyProject
content.dir=${dist.dir}/${gwt.entrypoint.class}
war.name=MyProjectWeb
#
tomcat.webapps=TOMCAT_HOME/webapps
で
MyProject/build.xml<project name="MyProject" default="build" basedir=".">
<property file="build.properties" />
<path id="gwt.compile.classpath" >
<pathelement path="${java.class.path}/" />
<pathelement location="${src.dir}" />
<pathelement location="${gwt.location}/gwt-user.jar" />
<pathelement location="${gwt.location}/gwt-dev-mac.jar" />
<pathelement location="${gwtext.location}/gwtext.jar" />
</path>
<target name="clean" >
<delete dir="${dist.dir}" />
</target>
<target name="build" >
<java classpathref="gwt.compile.classpath"
classname="com.google.gwt.dev.GWTCompiler"
maxmemory="128m"
fork="true">
<arg value="-out" />
<arg value="${dist.dir}" />
<arg value="${gwt.entrypoint.class}" />
</java>
</target>
<target name="dist" depends="build">
<mkdir dir="${content.dir}/js/ext" />
<copy todir="${content.dir}/js/ext">
<fileset dir="${ext.location}">
<exclude name="*-debug.js" />
<include name="*.js" />
<include name="adapter/**/*" />
<include name="resources/**/*" />
</fileset>
</copy>
<copy todir="${content.dir}/WEB-INF">
<fileset dir="WEB-INF">
<include name="web.xml"/>
</fileset>
</copy>
<mkdir dir="${content.dir}/WEB-INF/lib" />
<copy todir="${content.dir}/WEB-INF/lib">
<fileset dir="${gwt.location}">
<include name="gwt-servlet.jar"/>
</fileset>
</copy>
<mkdir dir="${content.dir}/WEB-INF/classes" />
<copy todir="${content.dir}/WEB-INF/classes">
<fileset dir="bin">
<include name="**/*.class"/>
</fileset>
</copy>
<jar jarfile="${dist.dir}/${war.name}.war"
basedir="${dist.dir}/${gwt.entrypoint.class}" />
</target>
<target name="deploy" depends="dist">
<copy todir="${tomcat.webapps}"
file="${dist.dir}/${war.name}.war" />
</target>
</project>
#WEB-INF以下にclasses/**/*.class, lib/servlet.jarをcopyするところはRPC用.
で
プロジェクトはこんな感じ.

で
Ant実行終了時にできたファイル等をExplorerに反映するためにRefreshにチェックをいれておくと便利.

MyProject.javaをいじる前にMyProject.gwt.xmlのmodule要素の直下に一行追加するのをお忘れないように…
#私が忘れてハマっただけです…
MyProject/src/sample/MyProject.gwt.xml<module>
<inherits name='com.gwtext.GwtExt' />
…
2008年2月16日土曜日
GWT開発をEclipseで開始する時の方法(これが正攻法?
ここに書いてあった.
0.ディレクトリを用意.
1.Eclipseのプロジェクト(関連ファイル)作成
2.GWTのプロジェクト作成
3.EclipseにImport
メニューの'File/Import...'を選択.
Dialogが表示される. 'General/Existing Projects into Workspace'を選択.
Select root directory ...にてMyProjectディレクトリを選択.
Projects中にMyProjectが表示される(はず).
FInish!.
4.実行
メニューの'Run/Open Run Dialog...'を選択
Dialogが表示される.Java Applicationの中にMyApplicationという項があるので選択.
Run!.

5.表示
GWTのサーバが起動.
ブラウザが以下のように表示される.

こいつの苦労は...orz.
Getting Started - Google Web Toolkit - Google Code
http://code.google.com/webtoolkit/gettingstarted.html
0.ディレクトリを用意.
> mkdir MyProject
> cd MyProject
1.Eclipseのプロジェクト(関連ファイル)作成
> ${GWT_HOME}/projectCreator -eclipse MyProject
2.GWTのプロジェクト作成
> ${GWT_HOME}/applicationCreator -eclipse MyProject com.mycompany.client.MyApplication
3.EclipseにImport
メニューの'File/Import...'を選択.
Dialogが表示される. 'General/Existing Projects into Workspace'を選択.
Select root directory ...にてMyProjectディレクトリを選択.
Projects中にMyProjectが表示される(はず).
FInish!.
4.実行
メニューの'Run/Open Run Dialog...'を選択
Dialogが表示される.Java Applicationの中にMyApplicationという項があるので選択.
Run!.

5.表示
GWTのサーバが起動.
ブラウザが以下のように表示される.

こいつの苦労は...orz.
2008年2月15日金曜日
GWT-ExtのHelloWorldをやってみる / Eclipse 3.3 / MacOSX 10.5
追記(2008/09/29)
このページをみていただいたそうですが私よりわかりやすい文章の解説ページが作成されていました.Ext.JS情報|株式会社エイシーエル
http://www.acl-inc.co.jp/modx/gwt_ext.html
追記
最近このページへのアクセスがちょっと多いのでコメントしときますがEclipse+GWTの開発はこっちがおそらく正攻法です.
参考はこれ.
Tutorial:Introduction to GWT-Ext 2.0
http://gwt-ext.com/wiki/index.php/Tutorial:Introduction_to_GWT-Ext_2.0
0. 用意するもの
参考にある用意するもののうちJava SDKはLeopard付属のモノ(JDK1.5)をつかう.
0.1 GWT
ここのここからdownload (1.4.61).
#10.5なのでLeopard用(!).
どこかに展開しておく.
開発用の道具等も含まれているのでそれなりの所に.
この展開した場所をGWT_HOMEと呼ぶことにする.
0.2 Ext JS
ここのここからdownload (2.0.1).
どこかに展開しておく.
参考にもあるように最終的に必要なのは以下だ.
(-debug.jsはいらないように思う)
* /adapter
* /resources
* ext-all.js
* ext-all-debug.js
* ext-core.js
* ext-core-debug.js
0.3 GWT-Ext
ここのここからdownload (2.0.1).
こいつで必要なのは'gwtext.jar'のみ.
この展開した場所をGWTExt_HOMEと呼ぶことにする.
1. プロジェクトの作成
とりあえずJavaプロジェクト(名前は'GWTExt_HelloWorld'とした.)で.
(あと作成時に'Project Layout'として'Create separate folders for sources and class files'を選んでます.
2.外部jarの設定
必要なのjarとして以下のjarをプロジェクトのPropertiesでJava Build Path項のLibrariesタブにて設定する.
#あとでlib/gwtext.jarを説明のしやすさの都合で置くのでgwtext.jarについてはこちらでも良い.
GWT_HOME/gwt-dev-mac.jar
GWT_HOME/gwt-user.jar
GWTExt_HOME/gwtext.jar
追記:gwt-dev-mac.jarはいらないみたいです.すみません.
(画像との整合性の都合で消さないですけど…)

3.説明の都合で行う作業
プロジェクト内にlibフォルダを作成.
libにgwtext.jar(GWTExt_HOME/gwtext.jar)をimportする.
ここまでのプロジェクトはこんな感じ.

4.(GWTとしての)プロジェクトの作成
外部ツールの設定を行う.
このアイコンからメニューを出して'Open External Tool Dialog ...'を選ぶ.


で,左のツリーの中からProgramというアイテムを選択しておいて左上'New'(下のアイコン)のボタンを押す.

でもって各値を設定(Mainタブだけですw).
Locatoin: ${GWT_HOME}/applicationCreator
Working Directory: ${workspace_loc:GWT_Ext_HelloWorld}
Argument: com.mycompany.mypackage.client.HelloWorld
LocationはBrowse File System...でGWT_HOMEにあるapplicationCreatorを指定.
('${GWT_HOME}は自分で設定したら使えるけど通常はないので直接選択すればよい.
Working DirectoryはBrowse Workspace...でGWTExt_HelloWorldを指定.
Argumentsは参考のままw.(clientの文字はないといけないみたい.)
Nameはテキとー.

でRun!
プロジェクトルートでコンテキストメニュ(右クリック)を出してRefreshすると作成されたファイルが見える.
こんな感じ.

5.Ext JSを配置する.
src/com/mycompany/mypackage/publicの下に'js/ext'ディレクトリを作成
0.2でも書いた以下のファイルをこのextディレクトリにimportする.
* /adapter
* /resources
* ext-all.js
* ext-core.js
こんな感じになる.

6.HelloWorld-compileを編集
javaコマンドのクラスパス(-cpの次の引数)に'GWTExt_HOME/gwtext.jar'を追加する.
3.をやっている人は'./lib/gwtext.jar'となる.
変更前: .../gwt-dev-mac.jar" com.google.gwt.dev.GWTCompiler ...
変更後: .../gwt-dev-mac.jar:./lib/gwtext.jar" com.google.gwt.dev.GWTCompiler ...
7.HelloWorld-shellを編集
javaコマンドのクラスパス(-cpの次の引数)に'GWTExt_HOME/gwtext.jar'を追加する.
3.をやっている人は'./lib/gwtext.jar'となる.
変更前: .../gwt-dev-mac.jar" com.google.gwt.dev.GWTShell ...
変更後: .../gwt-dev-mac.jar:./lib/gwtext.jar" com.google.gwt.dev.GWTShell ...
8.src/com/mycompany/mypackage/HelloWorld.gwt.xmlを編集
参考のとおり内容を以下に置き換える.
<module>
<!-- Inherit the core Web Toolkit stuff. -->
<inherits name='com.google.gwt.user.User' />
<!-- Inherit the GWTExt Toolkit library configuration. -->
<inherits name='com.gwtext.GwtExt' />
<!-- Specify the app entry point class. -->
<entry-point class='com.mycompany.mypackage.client.HelloWorld' />
<stylesheet src="js/ext/resources/css/ext-all.css" />
<script src="js/ext/adapter/ext/ext-base.js" />
<script src="js/ext/ext-all.js" />
</module>
9.src/com/mycompany/mypackage/public/HelloWorld.htmlを編集
参考のとおり内容を以下に置き換える.
#開くときはそのままだとWeb Browserで開く(ことがある).
#コンテキストメニュ(右クリック)でOpen With .../Text Editorとする.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Author" content="Sankar Gorthi">
<title>Hello World</title>
</head>
<body>
<iframe id="__gwt_historyFrame" style="width:0;height:0;border:0"></iframe>
<!-- The GWT js file generated at run time -->
<script type="text/javascript" src='com.mycompany.mypackage.HelloWorld.nocache.js'></script>
</body>
</html>
10.src/com/mycompany/mypackage/client/HelloWorld.javaを編集
参考の通り'public void onModuleLoad()'メソッドの内容を以下に置き換える.
public void onModuleLoad() {
Panel mainPanel = new Panel();
// Setting the Panel's properties
mainPanel.setTitle("Hello World!");
mainPanel.setHeight(300);
mainPanel.setWidth(500);
RootPanel.get().add(mainPanel);
}Panelはcom.gwtext.client.widgets.Panelをimportする.
11.起動
HellowWorld-shellを実行.
外部ツールの設定を行う.
このアイコンからメニューを出して'Open External Tool Dialog ...'を選ぶ.


で,左のツリーの中からProgramというアイテムを選択しておいて左上'New'(下のアイコン)のボタンを押す.

でもって各値を設定(Mainタブだけですw).
Locatoin: ${workspace_loc:/GWTExt_HelloWorld/HelloWorld-shell}
Working Directory: ${workspace_loc:GWTExt_HelloWorld}
Argument:
LocationはBrowse Workspace ...でGWTExt_HelloWorld(プロジェクト)にあるHelloWorld-shellを指定.
Working DirectoryはBrowse Workspace...でGWTExt_HelloWorldを指定.
Argumentsは空.
Nameはテキとー.

でRun!
'tomcat'というディレクトリができるこいつはGWTのサーバの環境用らしい.
12.表示.
起動した'Google Web Toolkit Development Shell / Port 8888'ウインドウとそのブラウザでの表示.


13.コンパイル
HellowWorld-compileを実行.
外部で(GWTのサーバでなく)使うためのコードを用意するため(?).
外部ツールの設定を行う.
このアイコンからメニューを出して'Open External Tool Dialog ...'を選ぶ.


で,左のツリーの中からProgramというアイテムを選択しておいて左上'New'(下のアイコン)のボタンを押す.

でもって各値を設定(Mainタブだけですw).
Locatoin: ${workspace_loc:/GWTExt_HelloWorld/HelloWorld-compile}
Working Directory: ${workspace_loc:GWTExt_HelloWorld}
Argument:
LocationはBrowse Workspace ...でGWTExt_HelloWorld(プロジェクト)にあるHelloWorld-compileを指定.
Working DirectoryはBrowse Workspace...でGWTExt_HelloWorldを指定.
Argumentsは空.
Nameはテキとー.

でRun!
'www'というディレクトリにファイル群ができる.
この中のHelloWorld.htmlファイルをFinder等で表示して直接クリックすればSafariがfile://...でアクセスして表示する.
2007年4月26日木曜日
ペアプログラミング - Plugin [え]
ttp://www.azzurri.jp/ja/software/soloprogramming/index.jsp
ふとTigerたんにしてみるか?とおもい画像を作成して入れ替えてみる.
ttp://www.tonbi.jp/iGirls/Tiger/
(画像を掲載しようかと思ったが著作権関連が面倒なのでやめときます.)
これもWidgetのようにBBSを用意してその手のツッこみ方を諸先輩方にお任せしてみるのもおもしろんじゃないかしらw.
(twitterへ自動で「build中」とか「commit中」とか投げてくれるプラグインってのもありかしら(そんなのtwitterに書いてる人がいたのをみたからだけどね))
#掲載に問題があるだろうから画像はなしにしとく.
ふとTigerたんにしてみるか?とおもい画像を作成して入れ替えてみる.
ttp://www.tonbi.jp/iGirls/Tiger/
(画像を掲載しようかと思ったが著作権関連が面倒なのでやめときます.)
これもWidgetのようにBBSを用意してその手のツッこみ方を諸先輩方にお任せしてみるのもおもしろんじゃないかしらw.
(twitterへ自動で「build中」とか「commit中」とか投げてくれるプラグインってのもありかしら(そんなのtwitterに書いてる人がいたのをみたからだけどね))
#掲載に問題があるだろうから画像はなしにしとく.
jadclipseの設定での備忘録
jadclipse
http://sourceforge.net/projects/jadclipse/
jad
http://www.kpdus.com/jad.html
でやることは
pluginにjadclipseをいれてpropertiesでJava/Jadclipseにてjadへのパスを設定すること.だけでなく
エディタの関連付けで*.classの対応をJadClipseのエディタがDefaultになるように設定すること
これ忘れてた…ハマった.(昔やったのに…老いたか)
参考:
開発メモ.COMありがとう.
JadClipseのインストールから設定まで(Javaクラスの逆コンパイルができるEclipseプラグイン)
http://www.develop-memo.com/java/eclipseplugin/jadclipse.html
2007年4月25日水曜日
MacOS X - EclipseでJavaSE6を有効にする方法
個別プロジェクトで有効にすることを目的とします.
0.ADCよりdmgを取得してインストールしておくこと
1.プロジェクトのProperties/Java Build Path/Librariesをみる
2.既存のJRE System Libraryをremove
3.Add Library ...を押し,出たダイアログ中のJRE System Libraryを選択(Next)する
4.Alternate を選ぶ.セレクトボックスにでれば良いのだがなかった.Installed JREs...を押す
5.Copyで1.5.0あたりを複写.名前を"1.6.0"とかにしてJRE Home Directoryを指定.
でも面倒なのでテキストフィールドを編集して "1.5.0"って書いてあるのを"1.6.0"にする.
6.下にでてるjre郡が更新されて1.6.0のものを示すようになる.
7.もどる.(途中で変更を適用するかきいてくるのが「後で」ってしておけばよい)
8.Properties/Java Compilerを選択(展開しない親要素ね)
9.Enable project specific settingsにチェック
10.Complier compliance levelを6.0にする
11.Applyして適用
1.プロジェクトのProperties/Java Build Path/Librariesをみる
2.既存のJRE System Libraryをremove
3.Add Library ...を押し,出たダイアログ中のJRE System Libraryを選択(Next)する
4.Alternate を選ぶ.セレクトボックスにでれば良いのだがなかった.Installed JREs...を押す
5.Copyで1.5.0あたりを複写.名前を"1.6.0"とかにしてJRE Home Directoryを指定.
でも面倒なのでテキストフィールドを編集して "1.5.0"って書いてあるのを"1.6.0"にする.
6.下にでてるjre郡が更新されて1.6.0のものを示すようになる.
7.もどる.(途中で変更を適用するかきいてくるのが「後で」ってしておけばよい)
8.Properties/Java Compilerを選択(展開しない親要素ね)
9.Enable project specific settingsにチェック
10.Complier compliance levelを6.0にする
11.Applyして適用
2007年4月18日水曜日
Cometってなんだろう.
Tomcat 6の実力を早速試す - 移行するべき? その時期は?
(14) I/O機能の拡張によるCometのサポート(1)
http://journal.mycom.co.jp/special/2007/tomcat6/013.html
(15) I/O機能の拡張によるCometのサポート(2)
http://journal.mycom.co.jp/special/2007/tomcat6/014.html
(16) I/O機能の拡張によるCometのサポート(3)
http://journal.mycom.co.jp/special/2007/tomcat6/015.html0.MacOSX 10.4.9
1.Tomcat6を展開
・$TOMCAT_HOME/binのしたの*.shファイルに実行権限を追加
>chmod u+x *.sh
2.EclipseにTomcatPlugin 3.2bを導入
・ttp://www.develop-memo.com/java/eclipseplugin/tomcatplugin.html
3.Tomcatプロジェクトの作成
・プロジェクトプロパティにてTomcat/WARの配置を設定
・catalina.jarをプロジェクトに追加
4.WEB-INF/srcにサンプル作成
4.1 コンパイルを1.5で行うようににする.
4.2 が,ArrayListの型宣言(名前忘れた)でERRORとなる.
4.3 あきらめて"<>"部を削除.読み出し部でキャストするように直す.
4.4 errorってメソッドも見つからず.コメント化
5.WEB-INF/web.xmlを作成
・サンプル記述の前後に<web-app>タグをわすれずに
6.$TOMCAT_HOME/conf/server.xmlを編集
7.コンテキストメニューTOMCATよりwarを作成
8.TOMCAT起動
9.SafariでアクセスしてもFirefoxでも表示されん!
10.telnetで確認w.
>telnet localhost 8080
>GET /[foobar]/CometSampleServlet
言いたいことはわかった.と思う.
ブックマーク:
http://recompile.net/2006/09/cometjetty_6_continuation.html
http://recompile.net/2006/09/cometjetty_6_continuation_1.html
http://recompile.net/2006/09/cometjetty_6_continuation_2.html
ラベル:
apache tomcat,
eclipse,
java
登録:
投稿 (Atom)




