エンドツーエンド Web サービスのチュートリアル: モバイル Dilbert アプリケーション
このチュートリアルでは、NetBeans IDE を使用して、Web サービスを消費するモバイルクライアントアプリケーションを作成する方法を説明します。ライブオンラインの Web サービスから日刊紙の Dilbert の連続漫画を取り込んで、グラフィックを圧縮した形式に変換して、漫画をモバイルデバイスに表示するアプリケーションを作成します。
このチュートリアルでは、まずモバイルアプリケーションでオンラインの DailyDilbert サービスに接続する Web サービスクライアントを作成します。次にビジュアル MIDlet デザイナを使用して、アプリケーションのレイアウトをグラフィカルにデザインします。その後、漫画の画像形式を GIF から PNG に変換するコードを追加します。PNG は、モバイルデバイスがサポートする形式です。最後に、エミュレータを使用して IDE で漫画を表示します。
目次
チュートリアルに必要なソフトウェア
開始する前に、次のソフトウェアをダウンロードするか、コンピュータにインストールしてください。
- Java Standard Development Kit (JDK) version 5.0 または 6.0 (ダウンロード)
- NetBeans IDE 6.0 のフルディストリビューション (ダウンロード)
- GlassFish や Tomcat などの Java EE 5 サーバー。前出の項目と同時にインストールできます。
Web サービスクライアントの作成
最初に新しい Web アプリケーションプロジェクトを作成します。このプロジェクトには Web サービスクライアントを含めます。
- 「ファイル」>「新規プロジェクト」を選択します。「カテゴリ」から「Web」を選択します。「プロジェクト」から「Web アプリケーション」を選択します。「次へ」をクリックします。
- 次に示すように、プロジェクト名を DilbertWebApplication にして、「Java EE 5」を選択します。
- 「完了」をクリックしてアプリケーションを作成します。
アプリケーションが作成され、「プロジェクト」ウィンドウに次のように表示されます。
「Web サービスクライアント」ウィザードの使用
次に、DailyDilbert サービスを利用する Web サービスクライアントを追加します。
- DilbertWebApplication プロジェクトノードを右クリックし、「新規」>「Web サービスクライアント」を選択します。次に示すように「新規ファイル」ウィザードからこのウィザードを選択することもできます。
「Web サービスクライアント」ウィザードが表示されます。
- 「WSDL URL」を選択し、次の URL を入力します。
http://www.esynaps.com/WebServices/DailyDiblert.asmx?WSDL
注: この Web サービスはつづりが間違っています。「DailyDilbert.asmx」であるべきところ、実際には「DailyDiblert.asmx」になっています。間違ったつづりを使用しないと、チュートリアルは機能しないことに注意してください。
- パッケージ名を dilbert にします。画面は次のようになります。
- 「完了」をクリックします。
IDE によって WSDL ファイルがダウンロードされ、クライアント側アーティファクトが作成されます。これらのアーティファクトは「ファイル」ウィンドウ内の「build」フォルダ内に表示されます。次に示すように「プロジェクト」ウィンドウに論理ビューが表示されます。
モバイルクライアントの作成
この節では、新しいモバイルアプリケーションプロジェクトを作成します。その後、「モバイルクライアントから Web アプリケーションへの接続」ウィザードを使用して、アプリケーションを DailyDilbert サービスに接続します。
- 「ファイル」>「新規プロジェクト」を選択します。「カテゴリ」から「Mobility」を選択します。次に示すように、「プロジェクト」から「MIDP アプリケーション」を選択します。
「次へ」をクリックします。
- プロジェクト名として DilbertViewer と入力し、「Hello MIDlet を作成」チェックボックスの選択を解除します。
- 「完了」をクリックして MIDlet を作成します。
モバイルアプリケーションが作成され、「プロジェクト」ウィンドウに次のように表示されます。
「モバイルクライアントから Web アプリケーションへの接続」ウィザードの使用
「モバイルクライアントから Web アプリケーションへの接続」ウィザードを使用して、Web サービスクライアントを含む Web アプリケーションに接続するサーブレットを生成することができます。
- 「プロジェクト」ウィンドウで DilbertViewer プロジェクトノードを右クリックし、次に示すように「新規」>「モバイルクライアントから Web アプリケーションへの接続」を選択します。
「次へ」をクリックします。
- Web アプリケーションとして DibertWebApplication が表示されます。サーブレット名を DilbertServlet に変更し、パッケージ名を dilbert にします。次に示すように、「モバイルクライアントの使用」で「Web アプリケーション内の Web サービスクライアント」を選択し、「
DailyDiblert.asmx」を選択します。
「次へ」をクリックします。
- 次に示すように「DailyDilbertImage」を選択します。
「次へ」をクリックします。
- 次に示すように、クライアント名を DilbertViewer に変更し、パッケージ名を dilbert にします。
- 「完了」をクリックします。
新しいアーティファクトが作成され、次に示すように「プロジェクト」ウィンドウにアプリケーションの論理ビューが表示されます。
ビジュアル MIDlet の作成
この節では、ビジュアル MIDlet を作成し、デザイナを使用してコンポーネントを追加し、コンポーネントを相互に接続します。
- DilbertViewer プロジェクトノードを右クリックし、「新規」>「ビジュアル MIDlet」を選択します。
- 次に示すように、ファイル名を DilbertVisualMIDlet にし、パッケージ名を dilbert にします。
「完了」をクリックします。
新しいビジュアル MIDlet ファイルが作成され、ビジュアル MIDlet デザイナで開きます。
- パレット (Ctrl-Shift-8) を使用して、次に示すように警告コンポーネントと待機画面コンポーネントをキャンバスにドラッグ&ドロップします。
コンポーネントはデザイナ内の任意の位置に配置します。
次の節では、新しいコンポーネントを作成し、パレットに追加します。そして、そのコンポーネントをデザイナまでドラッグします。その後、コンポーネントを相互に接続してコンポーネント間の関係を確立します。
キャンバスコンポーネントの作成
この節では、グラフィックファイルを表示するためのカスタムキャンバスコンポーネントを作成します。
- DilbertViewer プロジェクトノードを右クリックし、「新規」>「その他」を選択します。「カテゴリ」で「MIDP」を選択します。次に示すように、「ファイルの種類」で「MIDP キャンバス」を選択します。
「次へ」をクリックします。
- MIDP クラス名として DilbertViewer と入力し、パッケージ名として dilbert と入力します。「完了」をクリックします。
- 新規に作成したファイルを IDE で開き、次のようなコードを挿入します。
package dilbert;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
public class DilbertCanvas extends Canvas {
private int coordX, coordY;
private int imageWidth, imageHeight;
private Image image;
private int screenWidth, screenHeight;
/** Creates a new instance of DilbertCanvas */
public DilbertCanvas() {
screenHeight = getHeight();
screenWidth = getWidth();
}
public void setImage(Image image) {
this.imageWidth = image.getWidth();
this.imageHeight = image.getHeight();
this.image = image;
}
protected void paint(Graphics graphics) {
graphics.setColor(255, 255, 255);
graphics.fillRect(0, 0, getWidth(), getHeight());
graphics.drawImage(image, coordX, coordY, Graphics.LEFT | Graphics.TOP);
}
protected void keyPressed(int keyCode) {
int key = getGameAction(keyCode);
if (key == DOWN) {
if (coordY - screenHeight + imageHeight > 0) {
coordY -= 10;
}
} else if (key == UP) {
if (coordY < 0) {
coordY += 10;
}
} else if (key == RIGHT) {
if (coordX - screenWidth + imageWidth > 0) {
coordX -= 10;
}
} else if (key == LEFT) {
if (coordX < 0) {
coordX += 10;
}
}
repaint();
}
}
- DilbertViewer を右クリックし、「プロジェクトを構築」を選択します。これでキャンバスコンポーネントが構築、コンパイルされます。
次の節では、このコンポーネントをパレットに追加し、パレットからデザイナにドラッグ&ドロップします。
パレットへのキャンバスコンポーネントの追加
次に、キャンバスコンポーネントをパレットに追加してから、キャンバスコンポーネントをアプリケーションに組み込みます。
- DilbertVisualMIDlet ファイルをエディタで開き、パレットを開きます (Ctrl-Shift-8)。パレット内で右クリックし、「パレットマネージャー」を選択します。次に示すようにパレットマネージャーが表示されます。
- 「パレットに追加」をクリックします。次に示すように「パレットに追加」ウィザードが開き、パレットに追加する Java クラスが含まれるモバイルアプリケーションが表示されます。
「次へ」をクリックします。
- 「
dilbert.DilbertCanvas」を選択します。
「完了」をクリックします。
- 次に示すように、キャンバスクラスが追加されたことを確認します。
キャンバスコンポーネントの使用
- ビジュアル MIDlet とパレット (Ctrl-Shift-8) を開きます。「DilbertViewer」項目をパレットの「カスタム」カテゴリからデザイナまでドラッグします。
- ドロップしたキャンバスコンポーネントを右クリックし、「新規または追加」>「了解コマンド」を選択します。
ナビゲータ (Ctrl-7) に次のように表示されます。
- コンポーネントを次のように接続し、フローを作成します。
- モバイルデバイスの「起動」から waitScreen コンポーネントまで接続します。
- waitScreen コンポーネントの SUCCESS_COMMAND から dilbertCanvas コンポーネントまで接続します。
- waitScreen コンポーネントの FAILURE_COMMAND から alert コンポーネントまで接続します。
- dilbertCanvas コンポーネントの okCommand からモバイルデバイスまで接続します。
この時点で、コンポーネント間の接続は次のようになります。
- 「ソース」ビューに切り替え、
getTask() メソッドを次に太字で示すように変更します。
private byte[] dailyDilbertImage_returnValue;
public SimpleCancellableTask getTask() {
if (task == null) {
// write pre-init user code here
task = new SimpleCancellableTask();
task.setExecutable(new org.netbeans.microedition.util.Executable() {
public void execute() throws Exception {
if (dailyDilbertImage_returnValue == null) {
DilbertViewer client = new DilbertViewer();
dailyDilbertImage_returnValue = client.dailyDilbertImage();
Image dilbertImage = Image.createImage(dailyDilbertImage_returnValue, 0, dailyDilbertImage_returnValue.length);
getDilbertCanvas().setImage(dilbertImage);
}
}
});
// write post-init user code here
}
return task;
}
画像の変換
これで、毎日の画像を受信するクライアントアプリケーションが完成しました。ただし受信する画像は GIF 形式なので、メモリー容量が限られているモバイルデバイスには大きすぎます。したがって、画像を PNG 形式に変換する必要があります。PNG 形式は GIF 形式よりもサイズが小さく、モバイルデバイスの多数の異なるディスプレイサイズに合わせて簡単にサイズを調整できます。
- 次に示す
DailyDilbert_Proxy ファイルを開きます。
- 次に太字で示すコードを追加して
dailyDilbertImage() メソッドを変更します。その後、Shift+Ctl+I を押してインポートを修正します。
public byte[] dailyDilbertImage() throws RemoteException, Exception {
try {
ByteArrayInputStream in = new ByteArrayInputStream(getService().getDailyDilbertSoap().dailyDilbertImage());
BufferedImage image = ImageIO.read(in);
ByteArrayOutputStream out = new ByteArrayOutputStream();
ImageIO.write(image, "png", out);
return out.toByteArray();
} catch (java.rmi.RemoteException ex) {
throw ex;
} catch (Exception ex) {
throw ex;
}
}
アプリケーションの配備
まず、Web アプリケーションを配備します。次にモバイルアプリケーションを実行します。
- 「プロジェクト」ウィンドウで DilbertWebApplication を右クリックし、「配備の取り消しおよび配備」を選択します。サーバーがまだ起動していない場合は、しばらくしてから起動します。そしてアプリケーションがサーバーに配備されます。配備されていることを確認するには、次に示すように「サービス」ウィンドウを確認します。
- モバイルプロジェクトを右クリックし、「実行」を選択します。モバイルアプリケーションが実行されます。デバイスのエミュレータが開きます。デバイスのエミュレータ画面で、「起動」の下のボタンをクリックします。次に「選択」ボタンをクリックします。アプリケーションがインターネットにアクセスし、次に示すように、Dilbert の最新の漫画を返します。
まとめ
このチュートリアルでは、「モバイルクライアントから Web アプリケーションへの接続」を使用して、Web サービスを利用する MIDlet を簡単に作成する方法を示しました。
また、カスタムコンポーネントを作成し、ビジュアルモバイルデザイナを使用して、そのコンポーネントをアプリケーションに追加する方法も示しました。
次の手順
IDE に組み込まれている Java ME CDC の開発に関するヘルプのほかに、Mobility Pack でサポートされている技術に関するチュートリアルや記事が次のページにあります。