カスタム検索
ラベル java の投稿を表示しています。 すべての投稿を表示
ラベル java の投稿を表示しています。 すべての投稿を表示

2010年1月27日水曜日

コンパイルされたClassファイルからJavaのバージョンを取得する

Javaのバージョントラブルがあったので、忘れないうちにメモ!
ココを参考にしました。

javap -v ClassFile | grep major
(クラスファイル名に .class はなしでOK)

で以下のように表示される(はず)

major version: 47

Javaのバージョンとの対比表

1.1 = 45.3
1.2 = 46.0
1.3 = 47.0
1.4 = 48.0
1.5 = 49.0
1.6 = 50.0

なので、上記の場合は 1.3でコンパイルされている、と。
Grailsって中のファイルとPluginでコンパイルされるバージョンが違う・・・Javaの参照の仕方が違うのかな

2009年11月16日月曜日

Slim3を試してみた

Slim3がPreviewReleaeされたと言うことなのでGetting Startedをみながら早速試してみました。

・Eclipseのダウンロード
3.5をゲッツ

・まずは日本人なので日本語化
ここからダウンロード

・EclipseにGooglePluginをインストール
http://dl.google.com/eclipse/plugin/3.5 を指定してインストール

・slim3の空プロジェクトをダウンロード
ここから最新版をダウンロード

・ファイル>インポート>既存のプロジェクトをワークスペースへ>アーカイブファイルでダウンロードしたzipを選択

・環境設定>Java>コードスタイル>インポートの編成で java.lang.Math.*に必要な静的インポート数を1に

・環境設定>Java>エディター>コンテンツアシスト>お気に入りで 新規タイプから以下の3つを追加
org.hamcrest.CoreMatchers
org.junit.Assert
org.junit.matchers.JUnitMatchers

・プロジェクト名を適当に変更して、war/WEB-INF/web.xml の以下の値も適当に変更

<context-param>
<param-name>slim3.rootPackage</param-name>
<param-value>slim3test</param-value>
</context-param>

・プロジェクトのプロパティから Javaコンパイラー>注釈処理>ファクトリーパス>JARの追加で lib/slim3-gen-EA1-SNAPSHOT.jar を追加

ここまでやってとりあえず実行可能な状態になったのでとりあえず走らせてみる

The server is running at http://localhost:8080/

と出たのでブラウザでアクセスしてみたら画面が出たよ!


しかしOnlineDemoもみても動作速度が遅い・・・(AppEngineが遅いんだろうけど)

AppEngineにあげるのはGooglePlugin側の設定かな?
次回はここいらへんをちょっとテストしてみたいと思います

2009年4月3日金曜日

merapiがもたらすAirとJavaの素敵な関係

Air(Flex)でJavaを呼び出すという夢のようなライブラリが登場したようです。
まだベータですが試してみましたのでつらつらと書いていきます。

参考
公式サイト
マイコミの紹介
javaとairを繋ぐmerapiを使ってみた。


まずはJava側の実装から



merapi本体を解凍した中にある framework/java/libs にあるのがJava側で必要なライブラリ
適当なクラスを作って、IMessageHandler を implements する

public static void main の中で Bridge クラスに、自身を regist する


public class MerapiTest implements IMessageHandler {
public static void main(String[] args) {
System.out.println("start");
Bridge.getInstance().registerMessageHandler("merapiSample", new MerapiTest());
}
}


第一引数でBridgeに登録するID(タイプと呼ぶらしい)、第二引数が自身のJavaクラスのインスタンス

flexから呼ばれた時に handleMessage がcallされるのでこれをクラスに書いておく(インターフェース定義されてます)


public void handleMessage(IMessage obj) {
try {
System.out.println("flex > java :"+((Message)obj).getData());
Message response = new Message("merapiSample", "hello merapi");
Bridge.getInstance().sendMessage(response);
} catch(Exception e) {
System.out.println("Caught Exception");
}
}


IMessageというのがFlexから受け取るデータ、MessageにキャストしてgetDataすると中身を取得出来る。
System.out.println("flex > java :"+((Message)obj).getData());

void なんで return値はなし、Flexに情報を返したい場合は Bridge の sendMessageを使う。
Messageの第一引数にregistしたのと同じIDを指定、第二引数に送りたいデータをセットする。
Message response = new Message("merapiSample", "hello merapi");
Bridge.getInstance().sendMessage(response);

続いてFlex側の実装



merapi本体を解凍した中にある framework/flex/libs にあるのがflex側で必要なライブラリ

まずはBridgeのインスタンスを作成する

<merapi:BridgeInstance id="bridge" result="handleMessage(event)" />


こっちはresultのfunction名を指定出来る、Javaと同じにしとといた方がわかりやすいかもね!

メッセージの送信は以下のように

var message:Message = new Message("merapiSample","from flex");
bridge.sendMessage(message);


MessageクラスはJavaとおんなじ使い方でOK

実行方法


まずは java のクラスを起動してやる必要がある
起動して regist した時点で listen 状態で待機される

この状態でFlexを起動してやると、メッセージを送信出来る
Flexが終了した時点でJavaも落ちる

欠点はJavaを起動する必要がある所かな・・・
終了は一緒に終わってくれるので問題なさそうだけど、Airの起動時にJavaが動いてないとエラーになるんで
なんとかしてJavaを起動してAirを起動するような仕組みが必要

うまく使えばクライアントサイドで今以上に色んな事が出来そうですね!
Grailsとの絡みで考えると、Grails1.1からGORMが単体で使えるようになっているのでsqliteを使った生なDBでなく、GORMを使ってHSQLとかでクライアントDBを実装出来たら素敵な気がする!