要看這篇文章,先要對Remoting有些概念
Remoting是可以讓Flash AS程式與異質(heterogeneric)程式語言直接溝通的介面
也就是讓AS可以直接與其他程式語言進行溝通、呼叫、傳遞物件
可以省去大量的資料解析的動作
由於不同程式語言的基礎型別都不太一樣
所以會有一個物件對照表
方便資料在不同程式中傳遞時進行轉換的動作
預設的物件對照僅包含基礎型別的物件與常用的容器型別
傳遞其他類別物件的時候
仍然必須自行作少量的資料解析動作
自訂類別轉換可以補足此一缺憾
因為OpanAMF是開放原始碼的計畫
而且又是連結Java平台介面
功能遠比其他版本的Remoting來得強大
以下就用OpenAMF介紹自訂類別轉換的功能
1.設定類別對照
找出OpenAMF設定檔
[WebApp]/WEB-INF/openamf-config.xml 在config結點內加入以下XML設定:
<custom-class-mapping>
<java-class>idv.swl.remoting.myClass</java-class>
<custom-class>idv.swl.remoting.myClass</custom-class>
</custom-class-mapping>
這樣就可以將Server端的Java Class: idv.swl.remoting.myClass
與Flash端的AS Class:idv.swl.remoting.myClass完成對照
2.撰寫Flash AS Class
myClass.as:
class idv.swl.remoting.myClass {
var count:Number;
var log:String;
function myClass() {
}
function doTrace() {
trace("count : "+count);
trace("log : "+log);
}
}
3.撰寫Server Java Class
Java Class要依循JavaBean的撰寫規範
才能進行序列化、反序列化的動作
myClass.java:
package idv.swl.remoting;
public class myClass implements java.io.Serializable {
public int count;
public String log;
public myClass() {
}
public void setCount(int count) {
this.count = count;
}
public int getCount() {
return count;
}
public void setLog(String log) {
this.log = log;
}
public String getLog() {
return log;
}
public void doTrace() {
System.out.println("count : " + count);
System.out.println("log : " + log);
}
}
4.撰寫測試程式
以下的測試程式是將自訂類別(myClass)物件在Client-Server之間互丟
並執行myClass for Java and AS的function 直到myClass.count計數器累加到3
Server Class:
package idv.swl.remoting;
public class server {
public static myClass process(myClass obj) {
obj.count++;
obj.log += "java processing at " + new Date() + "n";
obj.doTrace();
return obj;
}
}
Flash AS in Frame 1:
//==================================================
import idv.swl.remoting.myClass;
Object.registerClass("idv.swl.remoting.myClass", idv.swl.remoting.myClass);
//==================================================
var nc:NetConnection = new NetConnection();
nc.onResult = function(data) {
trace("onResult : ");
data.doTrace();
if (data.count<3) {
data.log += "Flash processing at "+new Date()+"n";
nc.call("idv.swl.remoting.server.process", nc, data);
}
};
nc.onStatus = function(data) {
trace("onStatus : ");
for (var i in data) {
trace(i+" : "+data[i]);
}
};
nc.connect("http://localhost:8084/RemotingTest/gateway");
//==================================================
var obj:myClass = new myClass();
obj.log = "";
obj.count = 0;
nc.call("idv.swl.remoting.server.process", nc, obj);
Flash Output:
onResult :
count : 1
log : java processing at Mon Apr 04 14:55:03 CST 2005
onResult :
count : 2
log : java processing at Mon Apr 04 14:55:03 CST 2005
Flash processing at Mon Apr 4 14:55:03 GMT+0800 2005
java processing at Mon Apr 04 14:55:03 CST 2005
onResult :
count : 3
log : java processing at Mon Apr 04 14:55:03 CST 2005
Flash processing at Mon Apr 4 14:55:03 GMT+0800 2005
java processing at Mon Apr 04 14:55:03 CST 2005
Flash processing at Mon Apr 4 14:55:03 GMT+0800 2005
java processing at Mon Apr 04 14:55:03 CST 2005
分享到:
相关推荐
openamf-1.0RC12-exampless.rar
FLEX连接java的开源框架
openamf,java版本的remoting
openamf openamf-1.0RC12 openamf实例 openamf+flash实例 openamf最完整实例java + flash+eclipse工程源码
amf开源,flash客户端服务器端通讯协议的序列化类,rtmp的底层类
通过java客户端调用openamf协议的实例,把取回的结果转换成list或bean. 这个实例是我调查好几天才整出来的.
第十五节 OPENAMF.docx
Moonfree是使用Flex2-Java通信开发RIA的开源框架。 集成flex-openamf-spring-java并添加服务器/客户端通信层。
NULL 博文链接:https://balan326.iteye.com/blog/1285663
openamf相关文件 博文链接:https://kt8668.iteye.com/blog/115607
已经在早前就听说了,Adobe公司的开源项目bazeds,可是当时做flash,用到了openamf,所以没有在意,但是现在觉得flex开发应用软件更具有杀伤力,所以准备研究flex。折腾了一周的时间想做个flex+java的helloworld例子...