-
Notifications
You must be signed in to change notification settings - Fork 1
/
S2OpenAMF.html
262 lines (228 loc) · 13.9 KB
/
S2OpenAMF.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- don't edit start -->
<head><title>Seasar - DI Container with AOP - </title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="seasar_b.css" type="text/css" rel="stylesheet"><script src="seasar_b.js" type="text/JavaScript" language="JavaScript"></script>
</head><body onload="preload('ja')"><table width="100%" border="0" cellspacing="0" cellpadding="0" align="left" height="100%"><tr>
<td align="left" valign="top" width="780"><table width="780" border="0" cellspacing="0" cellpadding="0" class="white">
<tr><td colspan="7"><img height="5" width="780" src="images/top01_b.gif" alt=""></td></tr>
<tr><td><img height="117" width="235" src="images/top02_b.gif" alt="Seasar"></td>
<td colspan="3"><img height="117" width="289" src="images/top03.gif" alt="DI Container with AOP"></td>
<td colspan="3"><img height="117" width="256" src="images/spacer.gif" alt=""></td>
</tr><tr><td rowspan="2"><img src="images/top04.gif" alt="" height="49" width="235"></td>
<td><a href="index.html"><img src="images/menu01_b_ja.gif" height="30" width="78" border="0" alt="" id="menu01" onmouseover="swap(1)" onmouseout="restore(1)"></a></td>
<td><a href="projects.html"><img src="images/menu02_b_ja.gif" height="30" width="101" border="0" alt="" id="menu02" onmouseover="swap(2)" onmouseout="restore(2)"></a></td>
<td><a href="products.html"><img src="images/menu03_b_ja.gif" height="30" width="110" border="0" alt="" id="menu03" onmouseover="swap(3)" onmouseout="restore(3)"></a></td>
<td><a href="resources.html"><img src="images/menu04_b_ja.gif" height="30" width="113" border="0" alt="" id="menu04" onmouseover="swap(4)" onmouseout="restore(4)"></a></td>
<td><img src="images/menu05_b_ja.gif" height="30" width="109" border="0" alt="" id="menu05" onmouseover="swap(5)" onmouseout="restore(5)"></td>
<td><img height="30" width="34" src="images/menu06.gif" alt=""></td></tr><tr>
<td colspan="6"><img height="19" width="545" src="images/spacer.gif" alt=""></td></tr></table>
<table width="780" border="0" cellspacing="0" cellpadding="0" height="100%" class="white">
<tr align="left" valign="top"><td width="14"><img height="14" width="14" src="images/spacer.gif" alt=""></td><td width="752" class="main">
<!-- don't edit end -->
<ul>
<li><a href="#S2OpenAMF">S2OpenAMFとは</a></li>
<li><a href="#Setup">セットアップ</a></li>
<li><a href="#Use">使い方</a></li>
<li><a href="#JavaCode">Javaのコーディング</a></li>
<li><a href="#FlashCode">Flashのコーディング</a></li>
<li><a href="#Mapping">JavaBeansとActionScriptのクラスとのマッピング </a></li>
<li><a href="#Sample">サンプルの説明</a></li>
</ul>
<h2><a name="S2OpenAMF">S2OpenAMFとは</a></h2>
<p>S2OpenAMFを使うと、Seasar2と<a href="http://www.openamf.org/">OpenAMF</a>が連動するようになります。これによりMacromedia FlashからSeasar2のコンポーネントを簡単に呼び出す事ができるようになります。コンポーネントの呼び出しは、Flashからインターフェース名またはコンポーネント名を指定するだけで呼び出す事ができます。
</p>
<h2><a name="Setup">セットアップ</a></h2>
<p>S2と同様にJDK1.4以上が必要です。サンプルは、<a href="http://jakarta.apache.org/tomcat/">Tomcat</a>と<a href="http://www.sysdeo.com/eclipse/tomcatPlugin.html">Tomcat Plugin</a>を使うことを前提にしています。あらかじめインストールして置いてください。S2OpenAMF-Vxxx.jarを解凍してできたs2openamfディレクトリをEclipseに丸ごとインポートしてください。S2OpenAMFのコンパイル環境は以上でセットアップ完了です。サンプルはS2OpenAMFExample-Vxxx.jarとして別途用意されているので、ダウンロードして解凍してください。解凍してできたs2openamf-exampleディレクトリをEclipseに丸ごとインポートしてください。s2openamf-exampleプロジェクトを右クリックしてプロパティ->Tomcatを選びます。Tomcatプロジェクトであるをチェックし(チェックがついている場合、適用ボタンをクリック)、アプリケーションURIを/S2OpenAMFとします。プロジェクトをビルド後にTomcatを再起動して、ブラウザから<a href="http://localhost:8080/S2OpenAMF/">http://localhost:8080/S2OpenAMF/</a>にアクセスすると<a href="http://localhost:8080/S2OpenAMF/calculator.html">足し算1</a>, <a href="http://localhost:8080/S2OpenAMF/calculator2.html">足し算2</a>, <a href="http://localhost:8080/S2OpenAMF/exception.html">エラー発生</a>, <a href="http://localhost:8080/S2OpenAMF/rmtg_tester.html">汎用リモーティングテスター</a>のサンプルを動作させることができます。</p>
<h2><a name="Use">使い方</a></h2>
下記説明はS2OpenAMFExampleに含まれる設定ファイルを使用していただく事により、省略が可能です。
<ul>
<li>Seasar2をダウンロード
<li>OpenAMFをダウンロード
<li>S2OpenAMFをダウンロード
<li>全てのJARとプロパティファイル等をEclipseのプロジェクトに追加
<li>OpenAMF付属のopenamf-config.xmlにS2OpenAMFのServiceInvokerを追記
<li>OpenAMF付属のweb.xmlにSeasar2のweb.xmlの内容を追記
</ul>
<h3>openamf-config.xml(OpenAMF付属のものに追記)</h3>
<pre>~略~
<!-- Uncomment this to enable EJB invoker
<invoker>
<name>EJB</name>
<class>org.openamf.invoker.EJBServiceInvoker</class>
</invoker>
-->
<font color="green"><invoker>
<name>Seasar2</name>
<class>org.seasar.extension.openamf.S2ServiceInvoker</class>
</invoker></font>
<invoker>
<name>Java</name>
<class>org.openamf.invoker.JavaServiceInvoker</class>
</invoker>
~略~</pre>
<h3>web.xml(OpenAMF付属のものに追記)</h3>
S2Containerを取得するサーブレットFlashから呼び出すコンポーネントが定義されたdiconファイルを指定します。
<pre>~略~
<servlet>
<servlet-name>s2servlet</servlet-name>
<servlet-class>org.seasar.framework.container.servlet.S2ContainerServlet</servlet-class>
<init-param>
<param-name>configPath</param-name>
<param-value><font color="green">s2-openamf-sample.dicon</font></param-value>
</init-param>
<load-on-startup/>
</servlet>
<servlet-mapping>
<servlet-name>s2servlet</servlet-name>
<url-pattern>/s2servlet</url-pattern>
</servlet-mapping>
~略~</pre>
<p>あとはTomcatの設定等ですがここでは割愛します。Seasar2のマニュアルも合わせてご覧ください。</p>
<h2><a name="JavaCode">Javaのコーディング</a></h2>
<p>Seasar2のドキュメントを参考にS2ContainerにFlashから呼び出すコンポーネントを登録してください。</p>
<h2><a name="FlashCode">Flashのコーディング</a></h2>
<p>従来どおりのFlash Remotingのコーディング方法となんら変わりません。serviceの所がコンポーネント名でも呼び出せるという所だけ違います。基本的な手順は以下の通り。Remoting Connectorを使用することもできます。</p>
<pre>
NetServicesオブジェクトを使った例
NetServices.setDefaultGatewayUrl(gatewayUrl);
var serviceConnection = NetServices.createGatewayConnection();
var serviceObject = serviceConnection.getService(service, callback);
serviceObject.methodName(arguments1, arguments2, ...);
</pre>
<pre>
Serviceオブジェクトを使った例
var service:Service = new Service(
gatewayUrl,
null,
serviceName,
null,
null);
var pc:PendingCall = service.methodName(arguments1, arguments2, ...);
pc.responder = new RelayResponder(methodInPath, "resultMethodName", "faultMethodName");
</pre>
<h2><a name="Mapping">JavaBeansとActionScriptのクラスとのマッピング </a></h2>
<p>S2OpenAMF1.0.5からの新機能で、JavaBeansとActionScriptのクラスを相互にマッピングしてJavaとFlashでデータをやり取りできます。例として次のような足し算のデータをやり取りするようなJavaBeansを定義します。</p>
<pre>package test.org.seasar.extension.openamf;
import java.io.Serializable;
public class PlusDto implements Serializable {
private int arg1;
private int arg2;
private int result;
public int getArg1() {
return this.arg1;
}
public void setArg1(int arg1) {
this.arg1 = arg1;
}
public int getArg2() {
return this.arg2;
}
public void setArg2(int arg2) {
this.arg2 = arg2;
}
public int getResult() {
return this.result;
}
public void setResult(int result) {
this.result = result;
}
}</pre>
<p>これに対応するActionScriptのクラスを作成します。</p>
<pre>class PlusDto {
var _remoteClass:String;
var arg1:Number;
var arg2:Number;
var result:Number;
function PlusDto() {
_remoteClass = "test.org.seasar.extension.openamf.PlusDto";
}
}</pre>
<p>Flash Remotingの引数にFlashのPlusDtoクラスを使用し、JavaのPlusDtoクラスとして受け取り、戻り値をFlashのPlusDtoクラスとして受け取るサンプルです。</p>
<pre>import PlusDto;
import mx.remoting.Service;
import mx.remoting.PendingCall;
import mx.rpc.RelayResponder;
import mx.rpc.FaultEvent;
import mx.rpc.ResultEvent;
mx.remoting.debug.NetDebug.initialize();
var gatewayUrl:String = "http://localhost:8080/S2OpenAMF/gateway";
var serviceName:String = "calculatorName";
var service:Service = new Service(
gatewayUrl,
null,
serviceName,
null,
null);
function doSubmit():Void {
var plusDto = new PlusDto();
plusDto.arg1 = Number(num1_txt.text);
plusDto.arg2 = Number(num2_txt.text);
var pc:PendingCall = service.plus(plusDto);
pc.responder = new RelayResponder(this, "plus_Result", "plus_Fault");
}
function plus_Result(re:ResultEvent):Void {
var plusDto = re.result;
ans_txt.text = plusDto.result;
}
function plus_Fault(fa:FaultEvent):Void {
trace("faultstring = " + fa.fault.faultstring);
trace("faultcode = " + fa.fault.faultcode);
trace("type = " + fa.fault.type);
trace("detail = " + fa.fault.detail);
}</pre>
今までのFlash Remotingの引数と戻り値に、ActionScriptのクラスが使用できるようになっただけです。ポイントは次の通り。
<ul>
<li>_remoteClassというプロパティを定義する事。</li>
<li>コンストラクタで_remoteClassにマッピングするJavaBeansのクラス名を代入する事。</li>
</ul>
<p>
<h2><a name="Sample">サンプルの説明</a></h2>
<ul>
<li>calculator.swf<br>
計算機のサンプルです。上ふたつのテキストボックスに数字を入力し、テストボタンをクリックすると下のテキストボックスに答えが表示されます。</li>
<li>calculator2.swf<br>
ActionScriptのクラスとJavaBeansをマッピングして行う計算機のサンプルです。</li>
<br>
<li>exception.swf<br>
独自のExceptionを使用した場合の、エラー内容を表示するサンプルです。</li>
<li>rmtg_tester.swf<br>
Flash Remotingのアプリケーションを汎用的にテストするサンプルです。Seasar2の場合の説明をします。</li>
<table border="1">
<tr>
<td>gatewayUrl</td>
<td>OpenAMFのゲートウェイへのURL。<br>通常http://domainName/contextName/gatewayとなります。</td>
</tr>
<tr>
<td>method</td>
<td>メソッド名<br>コンポーネントのメソッド名を指定します。</td>
</tr>
<tr>
<td>service</td>
<td>コンポーネント名、又はインターフェースのフルパッケージ名<br>コンポーネント定義XMLファイルで指定したname又はインターフェースのフルパッケージ名を入力します。</td>
</tr>
<tr>
<td>arguments</td>
<td>引数<br>コンポーネントへ渡す引数を3つまで入力できます。残念ながらプリミティブ型しか渡せません。</td>
</tr>
</table>
<p>※serviceにPOJOへのフルパッケージ名を入力すると通常のPOJOも呼び出せます。</p>
<p>それぞれを入力し終わったら[Trigger !]ボタンをクリックすることで、テキストエリアに結果が表示されます。戻り値が無いものは何も出ません。エラーの場合もメッセージが表示されます。右端にある[date test]、[calculator test]ボタンはそれぞれのコンポーネントを呼び出す情報を設定するボタンです。クリックすると必要な情報が自動的に入力されますので[Trigger !]ボタンを押すことにより実行できます。(実は計算機は3つ目の数字を入れても動作します)</p>
</ul>
<!-- document end -->
<!-- don't edit start -->
</td>
<td width="14"><img height="14" width="14" src="images/spacer.gif" alt=""></td>
</tr><tr>
<td width="14"><img height="30" width="14" src="images/spacer.gif" alt=""></td>
<td width="766"><img height="30" width="592" src="images/spacer.gif" alt=""></td>
</tr><tr>
<td width="14"><img height="14" width="14" src="images/spacer.gif" alt=""></td>
<td width="766" class="copyright">© Copyright The Seasar Foundation and the others 2004-2005, all rights reserved.</td>
</tr></table>
<td class="backright" align="left" valign="top"> </td></tr><tr>
<td class="backunder" align="left" valign="top" width="780" height="16"> </td>
<td class="backcorner" align="left" valign="top" height="16"> </td>
</tr></table></body>
<!-- don't edit end -->
</html>