RSS2.0 hr
カテゴリ
 連絡事項 (11)
 開発全般 未分類 (2)
 WEB開発 未分類 (1)
 C# (1)
 Java (2)
 PHP (1)
 Flash (1)
 WPF, Silverlight (6)
 Android (2)
 MySQL (1)
 ニコ窓 (66)
 Nico Rec Ctrlr (4)
 Live Seeker (8)
 Live Seeker Lite (4)
 Nico2ls (1)
 未完成ツール (7)
 TinyMCE (4)
 FFmpeg (6)
 Linux (1)
 PCパーツ関連 (1)
 掲載誌 (3)
コンテンツ一覧
最新記事
2015/01/12 12:00
ニコ窓の開発&公開終了
2014/05/04 00:00
ニコ窓 Ver3.015 公開
2014/04/27 00:00
ニコ窓 Ver3.014 公開
2014/03/08 00:00
ニコ窓 Ver3.013 公開
2014/03/02 22:00
Android関連の開発リンク集
コンテンツ一覧
公開ツール
ニコ窓
ニコニコ生放送用
ブラウザ
ニコ窓
コンテンツ
■ Google App Engine for Javaを試す - 2010/11/12 23:00:00

Silverlight のテスト用に、外部サーバで Web サービス(SOAP、REST等)を実装しようと思って色々試していたのですが、結局、Google App Engine を使うことにしました。
最初は、このサーバ(tyopark.in)で PHP で実装してみたのですが、PHP のバージョンが 5.1.x で古く、またサーバ独自の制約があって中途半端な実装になってしまって嫌だったので、結局、諦めました。

Google App Engine は以前から使ってみたかったのですが、登録時に携帯番号orメールが必要なのと、DBが特殊(BigTable)なため躊躇してたのですが、他に候補もないので思い切って使ってみることにしました。

[Google]
Google App Engine
http://code.google.com/intl/ja/appengine/
スタート ガイド: Java
http://code.google.com/intl/ja/appengine/docs/java/gettingstarted/
Google-App-Engine-Japan
http://groups.google.com/group/google-app-engine-japan

Google App Engine では、Python か Java で開発できますが、自分は Python が全く分からないので Java の方を使うことにします。
開発は、Eclipse に Google Plugin for Eclipse をインストールして行えて、Eclipse でサーバへのデプロイまでできるので、かなり楽にできます。
ただ、ここ最近 Java を使っていなかったので、結構忘れてしまっていることが多く、入門書を引っ張りだして勉強し直してたりするので効率は悪いですw

[CodeZine]
Google App Engine for Javaを使ってみよう!
http://codezine.jp/article/corner/289
Google App Engineで開発するスケールするアプリケーション
http://codezine.jp/article/corner/340
Google App Engineで手軽に試すJavaクラウド
http://www.atmarkit.co.jp/fjava/index/index_gaej.html
[ITpro]
Google App EngineでWebアプリを公開してみよう
http://itpro.nikkeibp.co.jp/article/COLUMN/20090609/331586/

今のところ、適当にテストページを作っているだけなのですが、そのうち何か実用的なものを作ってみるつもりです。

[参考書籍]
基礎からのサーブレット/JSP 第3版 (基礎からのシリーズ) - Amazon

自分が持っているのは、改訂版(第2版)です。

カテゴリ: Java  ブックマーク: はてなブックマーク Yahoo!ブックマーク Googleブックマーク Twitterでつぶやく  コメント( 0 )
■ Javaからネイティブコードの呼び出し(JNI) - 2010/03/10 23:00:00

Javaからネイティブコード(C言語、C++等)の関数を呼ぶ場合、JNI(Java Native Interface)を使う方法があります。

今回は、JNIを使って、C++で書かれた関数を呼んでみます。
具体的には、Javaでクラス、C++でDLLを生成して、Javaのクラスから、DLLを呼ぶことになります。
Javaでは、ネイティブコードの関数と同様の型のネイティブメソッドを宣言します。
このネイティブメソッドを宣言すると、ネイティブコードの関数を、通常のメソッドのように、Javaから呼び出せるようになります。

開発環境と主な手順は、以下のようになります。

▽ 開発環境

OS: WindowsXP Professional
Javaコンパイラ: Java SE Development Kit 5.0 Update 8
Cコンパイラ: Visual C++ 2005 Express Edition

▽ 主な手順

① Javaコードを書く(JniTest.java)。
② ①のコード(JniTest.java)をコンパイルし、クラスを生成する(JniTest.class)。
更に、C++用のヘッダーファイルを生成する(JniTest.h)。
③ ヘッダーファイル(JniTest.h)を使って、C++のコードを書く(JniTestLib.cpp)。
④ ③のコードをコンパイルし、DLLを生成する(JniTestLib.dll)。
⑤ ②のJavaのクラス(JniTest.class)を実行し、DLL(JniTestLib.dll)のネイティブメソッドを呼ぶ。

◆ 開発

① Javaコードを書く(JniTest.java)。

ネイティブメソッド(TestMethod)の宣言と、Java側の処理を実装します。
サンプルでは、ネイティブメソッドしか呼んでいません。

[ JniTest.java ]

public class JniTest
{
    static
    {
        // ライブラリ(DLL)のロード
        System.loadLibrary("JniTestLib");
    }

    // ネイティブメソッドの宣言
    public native String TestMethod();

    public static void main(String[] args)
    {
        JniTest jt = new JniTest();

        // ネイティブメソッドを呼ぶ
        System.out.println(jt.TestMethod());
     }
}

② ①のコード(JniTest.java)をコンパイルし、クラス(JavaTest.class)を生成する。
更に、C++用のヘッダーファイル(JniTest.h)を生成する。

▽ クラス(JavaTest.class)の生成

コマンドプロンプトから、javac.exe でコンパイルします。

javacでコンパイル

▽ C++用のヘッダーファイル(JniTest.h)の生成

ヘッダーの生成には、javah.exe を使い、引数には、JniTest(.class)を指定します。

javahでヘッダーの生成

以下のような内容のヘッダーが生成されます。
"JNICALL Java_JniTest_TestMethod"メソッドが、C++のDLLで実装するネイティブメソッドになります。

[ JniTest.h ]

/* DO NOT EDIT THIS FILE - it is machine generated */
#include 

/* Header for class JniTest */
#ifndef _Included_JniTest
#define _Included_JniTest
#ifdef __cplusplus
extern "C" {
#endif

/*
 * Class:     JniTest
 * Method:    TestMethod
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_JniTest_TestMethod
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

③ ②のヘッダーファイル(JniTest.h)を使って、C++のコード(JniTestLib.cpp)を書く。

ここからは、Visual C++ 2005 を使います。

▽ 空のプロジェクトの作成

Visual C++ 2005 を起動し、空のプロジェクト(JniTestLib)を作成します。
Expressでは、DLLの項目がないため、ここでは、空のプロジェクトを選択します。

空のプロジェクトを作成

▽ C++ファイルの追加

作成したプロジェクトに、新規にC++ファイル(JniTestLib.cpp)を追加します。

C++ファイルを追加

②で生成したC++用のヘッダー(JniTest.h)をプロジェクトに追加します。

ヘッダーをプロジェクトに追加

[ JniTestLib.cpp ]

#include 
#include 
#include "JniTest.h"

JNIEXPORT jstring JNICALL Java_JniTest_TestMethod(JNIEnv *env, jobject obj)
{
    printf("DLLの Java_JniTest_TestMethod() が呼ばれました。\n");
    return env->NewStringUTF("Java_JniTest_TestMethod() was completed.");
}

④ ③のコードをコンパイルし、DLLを生成する。

▽ プロジェクトのプロパティの設定

プロジェクトのプロパティを、DLL生成用に変更します。
[構成プロパティ]→[全般]→[構成の種類]を "ダイナミック ライブラリ(.dll)" に変更します。

プロジェクトのプロパティの設定

[構成プロパティ]→[C/C++]→[全般]→[追加のインクルードディレクトリ]に、JDKのインクルードディレクトリを指定します。

インクルードディレクトリを指定1
インクルードディレクトリを指定2

[構成プロパティ]→[リンカ]→[全般]→[出力ファイル]の拡張子を、"dll"に変更します。

拡張子の変更

以上で、プロパティの設定は、完了です。

▽ DLLのビルド

ビルドし、エラーがでなければ、JniTestLib.dll が生成されます。

⑤ ②のJavaのクラス(JniTest.class)を実行し、DLL(JniTestLib.dll)のネイティブメソッドを呼ぶ。

②のJavaクラス(JniTest.class)、④のDLL(JniTestLib.dll)を同一ディレクトリにコピーします。
コマンドプロンプトから、Javaクラス(JniTest.class)を実行すると、以下のようにDLL(JniTestLib.dll)のネイティブメソッドが呼ばれます。

ネイティブメソッドを呼ぶ

- 以上 -

編集履歴
[2007/05/17] 新規作成。
[2007/05/19] 前置きを少し修正。
[2008/08/29] レイアウトを修正。
[2009/01/--] サイト移転。レイアウト変更。
[2009/06/24] レイアウト変更。
[2010/03/10] サイト移転。レイアウト変更。
[2010/07/04] URL変更。

カテゴリ: Java  ブックマーク: はてなブックマーク Yahoo!ブックマーク Googleブックマーク Twitterでつぶやく  コメント( 0 )
P. 1 List
お知らせ
サイト情報
2015/01/12 00:00
ニコ窓の開発&公開を終了しました。
閲覧者数
今日: 12 昨日: 24
合計: 806313 (PV)
開始: 2010/03/11
このサイトでは、C#で作成したツールを公開しています。
リンクは自由に張って頂いて構いません。
旧サイト(toypark.in)の記事等が含まれています。
管理人: motta
  はてなブックマーク Yahoo!ブックマーク Googleブックマーク Twitterでつぶやく
  RSS2.0 RSS2.0
  My Yahoo!
  livedoor Reader
  Windows Live
 
ACR WEB