ラベル java の投稿を表示しています。 すべての投稿を表示
ラベル java の投稿を表示しています。 すべての投稿を表示

2012年7月20日金曜日

Play framework 2.0.2 (Java) Guiceプラグインを利用する

Play 2.0 for Javaで、Guiceプラグインを利用するため試行錯誤したので備忘録として記録。 project/Build.scalaに依存関係を登録。
    val appDependencies = Seq(
      // Add your project dependencies here,
      "com.typesafe" % "play-plugins-guice" % "2.0.3"
    )
ターミナルから依存関係の取得を実行。
$ play dependencies
Eclipseで編集するので、Eclipse用の設定を更新。
$ play eclipsify
ここまでで環境構築は完了。 ここから、環境設定。 conf/直下にplay.pluginsファイルを作成して、GuicePluginを利用することを宣言する。
ここハマッタ。pluginを利用する場合は準備する必要アリ。
# conf/play.plugins
1500:com.typesafe.plugin.inject.GuicePlugin
依存関係をバインドするinitializerを作成。
app/module/Dependencies.javaを作成。
はまったのがここで、パッケージ名とクラス名が決められているので注意
かっこつけてmodules.Dependencies.javaなんてつくったら動かなかった。
DI対象は好きな場所に好きな名前で準備。
package module;

import services.UserSearchService;
import services.impl.UserSearchServiceImpl;

import com.google.inject.Binder;
import com.google.inject.Module;

public class Dependencies implements Module {

    public void configure(final Binder binde) {
        binde.bind(UserSearchService.class).to(UserSearchServiceImpl.class);
    }
}
後はDI先でDIフィールドの宣言を行う。
ここも注意点アリ。
@javax.inject.Injectである必要アリ。
package controllers;

import static play.Logger.debug;

import javax.inject.Inject;

import org.codehaus.jackson.node.ObjectNode;

import play.data.Form;
import play.libs.Json;
import play.mvc.Controller;
import play.mvc.Result;
import services.UserSearchService;
import forms.UserSearch;

public class UserController extends Controller {

    @Inject
    static UserSearchService userSearchService;
}
これで動くはず。

2011年2月23日水曜日

Ubuntu 10.04 Google Chrome に java-plugin インストール

いろいろと面倒くさかったためメモ。

1.sun-java インストール

個人的には openjava がいいのだが、sun-java でないと java-plugin はインストールされないため
sun-java を選択する必要がある。が、apt で管理されていないため、リポジトリを追加する。

sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
sudo aptitude update
sudo aptitude install sun-java6-jdk
java で開発作業もするので jdk をインストール。jdk がいらない場合は sun-java6-plugin で OK。

2.Plugin の設定

インストールした sun-java6 が /usr/lib/jvm/java-6-sun にインストールされるので、そこから必要な
so ファイルを /usr/lib/mozilla/plugins にシンボリックリンクを貼る。

sudo ln -s /usr/lib/jvm/java-6-sun-1.6.0.24/jre/lib/i386/libnpjp2.so .

Google Chrome が起動されている場合、再起動して about:plugins で確認。
http://speed.rbbtoday.com/cgi-bin/rbb003/exec.cgiでスピード測定とかしてみる。

2010年5月28日金曜日

ThreadPoolExecutorの挙動

本職Javaで Thread を管理する仕組みを作成することに。
Java 5 なので、まよわず ThreadPoolExecutor を利用することに。
んで、ハマった挙動についてメモ。

ThreadPoolExecutor はシンプルな FIFO (LIFO) を提供してくれるものと
思っていたが、実はそうではない。ハマりどころはcorePoolSizemaximumPoolSizeの設定値と指定する Queue のサイズによっては
シンプルな FIFO(LIFO) にはならないということ。

Javadoc からすると、
corePoolSize
通常使う thread の数。

maximumPoolSize
thread の最大数


とある。なので、
corePoolSize = 3
maximumPoolSize = 5

とかで Executor を作ったら、通常は 3 つ。Queue があふれてきたら、最大 5 つで動作するという認識だった。
この認識は正解で、最初は thread 3 つで稼働。thread 3 つが埋まると、キューイングされていき、最大キューイング数に達すると thread が増えていった。
が、thread が増えた際に処理されるキューが FIFO ではなかった。
何が処理されたかというと、キューイングであふれた新着 JOB だった。
挙動をまとめると、

  1. job 到着時、通常 thread が開いていたら即座に thread 生成。

  2. 通常 thread が埋まっている場合、キューイング

  3. 通常 thread が埋まっているかつ、キューイングも埋まっている場合、新着 Job を 新規 thread 生成で実行。

  4. MAX thread まで埋まるかつ、キューイングが一杯の場合、execute 時にエラーを吐く。

  5. 新着 Job がこなくて、thread が空くと、キューの先頭 Job が処理される。



FIFO ではないでしょ?

Java 屋なんだけど、初めて Java の記事をのっけた気がする。。。

以上。