JRun で作成した機能は、Java メソッドを作成するだけで Flash に適用できます。JRun は、次の Java アプリケーションタイプと Flash のコネクティビティをサポートします。
Java アプリケーションを Flash で利用するには、クラスファイルを SERVER-INF ディレクトリに保存する必要があります。
次の表に、Java データタイプとそれらに対応する ActionScript をリストします。
Flash と通信するには、flashgateway
パッケージの一部としてファイルを宣言します。public メソッドは、ActionScript 関数として自動的に Flash ムービーで利用できます。
// パッケージに名前を付けます。 package flashgateway.samples; import java.util.Date; import java.io.Serializable; // クラスを宣言します。 public class FlashExampleBean implements Serializable { private String message; private int count; public FlashExampleBean() { message = "こんにちは JavaBean です。"; count = 0; } // testBoolean メソッドを宣言します。 public boolean testBoolean(boolean b) { return b; } // testDate メソッドを宣言します。 public Date testDate(Date d) { return d; } // setMessage メソッドを宣言します。 public void setMessage(String message) { this.message = "はい " + message; } // getMessage メソッドを宣言します。 public String getMessage() { count++; return message + " (count=" + count + ")"; } // getCount メソッドを宣言します。 public int getCount() { count++; return count; } //setCount を宣言します。 public void setCount(int count) { this.count = count; } }
JavaBean のメソッドが FlashExampleBean
ActionScript 関数にトランスレートされます。次の表は、JavaBean で利用できるメソッドと、対応する ActionScript の関数を示したものです。
ActionScript で JavaBean のメソッドにアクセスする場合は、getService
ActionScript 関数に、flashgateway.samples.FlashExampleBean
のような完全修飾名を指定します。
フレームレベルで適用された次の ActionScript は、JavaBean のメソッドを呼び出します。
#include "NetServices.as"
#include "NetDebug.as" // -------------------------------------------------- // ユーザーとの対話イベントハンドラ // -------------------------------------------------- function runExample() { setMessage(); getMessage(); testBoolean(); testDate(); } function setMessage() { flashtestService.setMessage(messageInput.text); } function getMessage() { flashtestService.getMessage(); } function testBoolean() { if (trueRadio.GetState()) { flashtestService.testBoolean(true); } else { flashtestService.testBoolean(false); } } function testDate() { flashDate = new Date(); dateInput.text = "" + flashDate; flashtestService.testDate(flashDate); } // -------------------------------------------------- // サーバから受信するデータハンドラ // -------------------------------------------------- function setMessage_Result( result ) { } function getMessage_Result( result ) { messageOutput.text = result; } function setMessage_Status( result ) { messageOutput.text = result.details; } function getMessage_Status( result ) { messageOutput.text = result.details; } function testBoolean_Result(result) { boolOutput.text = "result:" + result; } function testBoolean_Status(result) { boolOutput.text = "ステータス:" + result.details; } function testDate_Result(result) { flashDate = result; dateOutput.text = " " + flashDate; } function testDate_Status(result) { dateOutput.text = "ステータス:" + result.details; } // -------------------------------------------------- // アプリケーションを起動します。 // -------------------------------------------------- if (inited == null) { // このコードは 1 度だけ実行します。 inited = true; // デフォルトゲートウェイ URL を設定します (オーサリングで使用するため)。 NetServices.setDefaultGatewayUrl("http://localhost:8200/ flashservices/gateway"); // ゲートウェイに接続します。 gatewayConnnection = NetServices.createGatewayConnection(); // 自身の HTTP セッションの JavaBean へのリファレンスを取得します (初めて新規のリ ファレンスを作成します)。 flashtestService = gatewayConnnection.getService("flashgateway.samples.FlashJava Bean", this); flashDate = new Date(); messageInput.text = "[Enter a Message]"; dateInput.text = "" + flashDate; }
他の EJB とまったく同じように Salsa 用の EJB を作成します。Salsa を通じて示された EJB メソッドにアクセスするには、getService
関数で JNDI EJB 名を使用します。次の ActionScript の例では、Flash ムービーでユーザーが行う選択に応じて、2 種類の EJB を呼び出します。
function getBiggerString()
{ if (useStateless.selected) { flashStatelessEJB.getBiggerString( stringInput.text ); stringOutput.text = "[ステートレス EJB を呼び出し中...]"; } else { flashStatefulEJB.getBiggerString( stringInput.text ); stringOutput.text = "[ステートフル EJB を呼び出し中...]"; } }
EJB アプリケーションと Flash を併用する場合、ActionScript 関数は EJBHome メソッドと EJBObject メソッドにマッピングされます。
次の ActionScript の例では、EJB メソッドを呼び出し、結果を Flash に表示します。
#include "NetServices.as"
#include "NetDebug.as" // -------------------------------------------------- // ユーザーとの対話イベントハンドラ // -------------------------------------------------- function runExample() { // 最初に選択された EJB タイプへのリファレンスを取り出します。 getEJBs(); } // --------------------------------------------------- // ビジネスメソッド // --------------------------------------------------- function getBiggerString() { if (useStateless.selected) { flashStatelessEJB.getBiggerString( stringInput.text ); stringOutput.text = "[ステートレス EJB を呼び出し中...]"; } else { flashStatefulEJB.getBiggerString( stringInput.text ); stringOutput.text = "[ステートフル EJB を呼び出し中...]"; } } function getBiggerInt() { if (useStateless.selected) { flashStatelessEJB.getBiggerInt( (new Number(numInput.getSelectedItem().data)).valueOf() ); stringOutput.text = "[ステートレス EJB を呼び出し中...]"; } else { flashStatefulEJB.getBiggerInt( (new Number(numInput.getSelectedItem().data)).valueOf() ); stringOutput.text = "[ステートフル EJB を呼び出し中...]"; } } // -------------------------------------------------- // サーバから受信するデータハンドラ // -------------------------------------------------- function getBiggerString_Result ( result ) { stringOutput.text = result; } function getBiggerInt_Result ( result ) { numOutput.text = result; } function create_Result( result ) { if (useStateless.selected) { flashStatelessEJB = result; } else { flashStatefulEJB = result; } getBiggerString(); getBiggerInt(); } // このメソッドは、create を呼び出し中にエラーが発生した場合に呼び出されます。 function create_Status( result ) { stringOutput.text = result.details; } function getEJBs() { // EJB へのリファレンスを取得します。 // ステートレス: if (useStateless.selected) { flashstatelessHome = gatewayConnection.getService("FlashSampleStatelessEJB", this); flashstatelessHome.create(); } // ステートフル: else { if (flashstatefulHome == undefined) { flashstatefulHome = gatewayConnection.getService("FlashSampleStatefulEJB", this); flashstatefulHome.create( "stateful message" ); } else { getBiggerString(); getBiggerInt(); } } } // -------------------------------------------------- // アプリケーションを起動します。 // -------------------------------------------------- if (inited == null) { // このコードは 1 度だけ実行します。 inited = true; // デフォルトゲートウェイ URL を設定します (オーサリングで使用するため)。 NetServices.setDefaultGatewayUrl("http://localhost:8200/ flashservices/gateway"); // ゲートウェイに接続します。 gatewayConnection = NetServices.createGatewayConnection(); // カスタムの認証と認可用のセキュリティ情報を設定します。 //gatewayConnection.setCredentials("Flash", "Flashpass"); stringInput.text = "[Enter a Word]"; numInput.setSelectedIndex(0); }
Flash を使用して JMX を通して JRun アプリケーションを呼び出すには、MBean メソッドを呼び出します。ActionScript の getService
関数で MBean オブジェクト名を使用して、JRun の JMX オブジェクトに接続します。
次の ActionScript の例では、MBean メソッドを呼び出し、結果を Flash に表示します。
#include "NetServices.as"
#include "NetDebug.as" // -------------------------------------------------- // ユーザーとの対話イベントハンドラ // -------------------------------------------------- function runExample() { jrunDeployerMBean.getServerName(); jrunDeployerMBean.getEARs(); } // -------------------------------------------------- // サーバから受信するデータハンドラ // -------------------------------------------------- function getServerName_Result(result) { serverName.text = result; } function getEARs_Result(result) { numDeployed.text = result.length; } function onStatus(result) { serverName.text = "status triggered"; } // -------------------------------------------------- // アプリケーションを起動します。 // -------------------------------------------------- if (inited == null) { // このコードは 1 度だけ実行します。 inited = true; // デフォルトゲートウェイ URL を設定します (オーサリングで使用するため)。 NetServices.setDefaultGatewayUrl("http://localhost:8200/ flashservices/ gateway"); // ゲートウェイに接続します。 gatewayConnnection = NetServices.createGatewayConnection(); // リモート MBean へのリファレンスを取得します。 jrunDeployerMBean = gatewayConnnection.getService("DefaultDomain:service= DeployerService", this); }