﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-&lt;img src="http://www.suprasoft.com.cn/images/suprasoft-logo.png" /&gt;-随笔分类-RIA/Flex</title><link>http://www.blogjava.net/charles/category/36951.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 26 Dec 2008 05:03:01 GMT</lastBuildDate><pubDate>Fri, 26 Dec 2008 05:03:01 GMT</pubDate><ttl>60</ttl><item><title>OpenAMF 配置文件详解</title><link>http://www.blogjava.net/charles/archive/2008/12/26/248403.html</link><dc:creator>suprasoft Inc,.</dc:creator><author>suprasoft Inc,.</author><pubDate>Fri, 26 Dec 2008 03:38:00 GMT</pubDate><guid>http://www.blogjava.net/charles/archive/2008/12/26/248403.html</guid><wfw:comment>http://www.blogjava.net/charles/comments/248403.html</wfw:comment><comments>http://www.blogjava.net/charles/archive/2008/12/26/248403.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/charles/comments/commentRss/248403.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/charles/services/trackbacks/248403.html</trackback:ping><description><![CDATA[<p>OpenAMF openamf-config.xml 配置<br>第一个标签<br>&lt;amf-serializer&gt;<br>&lt;force-lower-case-keys&gt;false&lt;/force-lower-case-keys&gt;<br>&lt;/amf-serializer&gt;<br>这个标签的存在的意义在于当openamf发送传递给Flash 客户端的AMF消息时，是否把用来返回自定义类的Hashmap里面的key转换成小写。<br>一边情况下，当我们发送一个hashmap给客户端时，客户端把它当作一个custom class的object来对待。<br>比如你有一个java方法返回一个hashmap<br>public Hashmap getValue(){<br>Hashmap resultObj=new Hashmap();<br>result.put("nameSpace","com.flashseer.org");<br>return resultObj;<br>}<br>在actionscript中你可以用<br>resultObj.nameSpace<br>的写法来引用java里面hashmap中的一个值。<br>当你把这个标签的属性设置为true的时候，返回给Flash client的object中，所有的key都被转换成小写。<br>所以，如果你使用Actionscript2.0的时候，因为AS2区分大小写。你就不可能用resultObj.nameSpace来引用了。<br>因为，nameSpace已经被转换为小写了。你必须使用namespace来引用。<br>这里，官方的example里面注释说了，<br>如果你用actionscrpt2.0的话，把这个设置为false。否则，如果你用了大写的字母作为key，在客户端就会出问题。<br>如果你用as1的话，可以设置为true<br>第二个标签<br>&lt;invoker&gt;<br>&lt;name&gt;Java&lt;/name&gt;<br>&lt;class&gt;org.openamf.invoker.JavaServiceInvoker&lt;/class&gt;<br>&lt;/invoker&gt;<br>这个标签是用来调用java端的服务的。<br>这里，提供了许多的invoker供你使用。<br>放在这里的是最常用的一个invoker。这个invoker的作用就是根据service的位置在classpath里面找到这个class，并且调用其中的方法。<br>另外，还可以使用其他的invoker，<br>比如EJB，Spring，WebService都是非常实用的invoker.<br>按照需要，放置这些invoker.<br>可以在example的配置文件里找到所有的invoker<br>第三个标签：自定义类的映射<br>&lt;custom-class-mapping&gt;<br>&lt;java-class&gt;org.openamf.examples.Person&lt;/java-class&gt;<br>&lt;custom-class&gt;org.openamf.examples.Person&lt;/custom-class&gt;<br>&lt;/custom-class-mapping&gt;<br>这个映射的作用是让你的FlashClient接收到正确的类型。<br>比如，在flashclient端，你调用一个方法后，接收到一个resultObj<br>如果你不进行类型映射，那么，这个resultObj是没有类型的。他就是一个object.你无法使用这个object的方法，只能通过引用属性的方法引用到属性。<br>但是，如果你在这里做了映射，在flash里面就可以得到一个具有类型的object。<br>用 trace(resultObj instanceof org.openamf.examples.Person) 就可以看到效果。<br>这个标签可以重复，映射多个自定义class<br>第四个标签：命名你的service（注意，这个部分需要使用advancedGateway）<br>&lt;service&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--name这个 node定义一下你的service的名字，这样，你就不用在flash里面把你的整个class都写在里面了，而只需要用这个name来代替--&gt;<br>&lt;name&gt;Directory&lt;/name&gt;<br>&lt;!--这个标签的作用其实就是让你指定你上面定义的那个name对应哪个class。--&gt;<br>&lt;service-location&gt;org.flashseer.Example&lt;/service-location&gt;<br>&lt;!---这个标签 同上面的invoker标签对应，这样，一旦advancedGateway发现了你定义的这个service，就不用遍历所有的invoker来查找相应的服务。<br>注意如果你没有定义这个的话，默认情况下，openamf会给所有可能的class打一个分，取分最高的来调用---&gt;<br>&lt;invoker-ref&gt;Java&lt;/invoker-ref&gt;<br>&lt;!--这里定义一下需要call的方法--&gt;<br>&lt;method&gt;<br>&lt;!-- 方法名 --&gt;<br>&lt;name&gt;addPerson&lt;/name&gt;<br>&lt;!--参数定义，这里的参数可以使用一个class的名字或者使用通配符，<br>*就代表许多个参数，?代表一个参数--&gt;<br>&lt;parameter&gt;<br>&lt;type&gt;*&lt;/type&gt;<br>&lt;/parameter&gt;<br>&lt;!-- 这个result-filter实际上是可以自己来写实现的。实现org.openamf.filter.ResultFilter即可<br>其中，class标签中，是你需要使用的filter。 你可以使用两个由openamf提供的filter,也可以自己来实现。<br>其中parameter的两个标签其实就是一个自定义的object,你可以自己随便定义然后，在实现filter的时候来使用。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br>&lt;result-filter&gt;<br>&lt;class&gt;org.openamf.filter.BeanListToRecordSet&lt;/class&gt;<br>&lt;parameter&gt;<br>&lt;name&gt;ignore&lt;/name&gt;<br>&lt;value&gt;extraInfo&lt;/value&gt;<br>&lt;/parameter&gt;<br>&lt;/result-filter&gt;<br>&lt;/method&gt;<br>&lt;/service&gt;<br>这个标签的意义在于它可以帮助你更快，更方便的找到flash remoting说调用的service.前面也提到了，如果你不指定的话，可能会导致每次openamf都要去做match,计算匹配值，然后取高的。</p><img src ="http://www.blogjava.net/charles/aggbug/248403.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/charles/" target="_blank">suprasoft Inc,.</a> 2008-12-26 11:38 <a href="http://www.blogjava.net/charles/archive/2008/12/26/248403.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>