﻿<?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--随笔分类-Flex</title><link>http://www.blogjava.net/wldandan/category/27690.html</link><description>如果你想飞，那就先努力张开翅膀吧.......</description><language>zh-cn</language><lastBuildDate>Tue, 14 Feb 2012 22:28:20 GMT</lastBuildDate><pubDate>Tue, 14 Feb 2012 22:28:20 GMT</pubDate><ttl>60</ttl><item><title>Flex动态获取Object的属性和值以及完成Object之间value的拷贝</title><link>http://www.blogjava.net/wldandan/archive/2010/08/25/329883.html</link><dc:creator>想飞就飞</dc:creator><author>想飞就飞</author><pubDate>Wed, 25 Aug 2010 05:55:00 GMT</pubDate><guid>http://www.blogjava.net/wldandan/archive/2010/08/25/329883.html</guid><wfw:comment>http://www.blogjava.net/wldandan/comments/329883.html</wfw:comment><comments>http://www.blogjava.net/wldandan/archive/2010/08/25/329883.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wldandan/comments/commentRss/329883.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wldandan/services/trackbacks/329883.html</trackback:ping><description><![CDATA[<pre><code>1.</code>如何动态获取Object中的属性和值</pre>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;ct:CustomObject</span><span style="color: #000000;">=</span><span style="color: #000000;">newCustomObject();&nbsp;<br />
</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;xml:XML&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;describeType(ct);<br />
</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;each(</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;accessor&nbsp;</span><span style="color: #0000ff;">in</span><span style="color: #000000;">&nbsp;xml..accessor){<br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;name:String</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;accessor.@name;<br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;type:String</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;accessor.@type;<br />
&nbsp;&nbsp;trace(ct[name]);<br />
}<br />
</span></div>
<pre><code></code><br />
<code>2. 对象之间的拷贝<br />
</code></pre>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000;">/*</span><span style="color: #008000;">*<br />
&nbsp;*&nbsp;copies&nbsp;a&nbsp;source&nbsp;object&nbsp;to&nbsp;a&nbsp;destination&nbsp;object<br />
&nbsp;*&nbsp;@param&nbsp;sourceObject&nbsp;the&nbsp;source&nbsp;object<br />
&nbsp;*&nbsp;@param&nbsp;destinationObject&nbsp;the&nbsp;destination&nbsp;object<br />
&nbsp;*<br />
&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
public&nbsp;static&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;copyObject(sourceObject:Object,&nbsp;destinationObject:Object):</span><span style="color: #0000ff;">void</span><span style="color: #000000;"><br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;check&nbsp;if&nbsp;the&nbsp;objects&nbsp;are&nbsp;not&nbsp;null</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">((sourceObject)&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;(destinationObject))&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">retrive&nbsp;information&nbsp;about&nbsp;the&nbsp;source&nbsp;object&nbsp;via&nbsp;XML</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;sourceInfo:XML&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;describeType(sourceObject);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;objectProperty:XML;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;propertyName:String;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&amp;nbsp;loop&nbsp;through&nbsp;the&nbsp;properties</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;each(objectProperty&nbsp;</span><span style="color: #0000ff;">in</span><span style="color: #000000;">&nbsp;sourceInfo.variable)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;propertyName&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;objectProperty.@name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(sourceObject[objectProperty.@name]&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(destinationObject.hasOwnProperty(objectProperty.@name))&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;destinationObject[objectProperty.@name]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;sourceObject[objectProperty.@name];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">loop&nbsp;through&nbsp;the&nbsp;accessors</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;each(objectProperty&nbsp;</span><span style="color: #0000ff;">in</span><span style="color: #000000;">&nbsp;sourceInfo.accessor)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(objectProperty.@access&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">readwrite</span><span style="color: #000000;">"</span><span style="color: #000000;">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;propertyName&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;objectProperty.@name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(sourceObject[objectProperty.@name]&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(destinationObject.hasOwnProperty(objectProperty.@name))&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;destinationObject[objectProperty.@name]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;sourceObject[objectProperty.@name];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(err:</span><span style="color: #000000;">*</span><span style="color: #000000;">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span></div>
<pre><br />
</pre>
<br />
<br />
<img src ="http://www.blogjava.net/wldandan/aggbug/329883.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wldandan/" target="_blank">想飞就飞</a> 2010-08-25 13:55 <a href="http://www.blogjava.net/wldandan/archive/2010/08/25/329883.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Flex访问BlazeDS/LCDSservice 避免硬编码的方法</title><link>http://www.blogjava.net/wldandan/archive/2010/07/20/326633.html</link><dc:creator>想飞就飞</dc:creator><author>想飞就飞</author><pubDate>Tue, 20 Jul 2010 05:45:00 GMT</pubDate><guid>http://www.blogjava.net/wldandan/archive/2010/07/20/326633.html</guid><wfw:comment>http://www.blogjava.net/wldandan/comments/326633.html</wfw:comment><comments>http://www.blogjava.net/wldandan/archive/2010/07/20/326633.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wldandan/comments/commentRss/326633.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wldandan/services/trackbacks/326633.html</trackback:ping><description><![CDATA[这篇文章提到的方法挺好的，就是用一个httpservie动态加载一个配置文件，在配置文件里写好remote service的配置.<br />
原文请参考 <br />
http://coenraets.org/blog/2009/03/externalizing-service-configuration-using-blazeds-and-lcds/<br />
<br />
<p>A typical source of confusion when developers start working with
RemoteObject or other BlazeDS/LCDS related classes is where and most
importantly *when* the configuration of your services is being read.</p>
<p>The question often arises after an application stops working when
you move it to another server. This is one of the most frequently asked
questions related to BlazeDS and LCDS, so I figured I would answer it
here. There is nothing really new in this post, but hopefully this will
be a good point of reference.</p>
<p>When you create a new BlazeDS or LCDS project in Flex Builder, you
are typically told to select J2EE as the &#8220;Application Server Type&#8221; and
then check &#8220;use remote object access service&#8221;. This adds a compiler
argument pointing to the location of your services-config.xml. If you
check the Flex Compiler properties of your Flex Builder project, you&#8217;ll
see something like this:</p>
<p>-services &#8220;c:\blazeds\tomcat\webapps\samples\WEB-INF\flex\services-config.xml&#8221;</p>
<p>When you then compile your application, the required values of
services-config.xml are baked into the SWF. In other words,
services-config.xml is read at <strong>compile time</strong> and not
at runtime as you may have thought intuitively. To abstract things a
little bit, you can use tokens such as {server.name}, {server.port},
and {context.root} in services-config.xml. However, {context.root} is
still substituted at compile time, while {server.name} and
{server.port} are replaced at runtime using the server name and port
number of the server the SWF was loaded from (which is why you can&#8217;t
use these tokens for AIR applications).</p>
<p></p>
<p>Fortunately, the Flex SDK provides an API that allows you to
configure your channels at runtime and entirely externalize your
services configuration from your code (you definitely don&#8217;t want to
recompile your application when you move it to another server). At a
high level, it works like this:</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;channelSet:ChannelSet&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;ChannelSet();<br />
</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;channel:AMFChannel&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;AMFChannel(</span><span style="color: #000000;">"</span><span style="color: #000000;">my-amf</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">http://localhost:8400/lcds-samples/messagebroker/amf</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
channelSet.addChannel(channel);<br />
remoteObject.channelSet&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;channelSet;<br />
</span></div>
<p>This is still not what we want because the endpoint URL is still
hardcoded in the application. At least in this case it&#8217;s obvious that
it is. So, the last step is to pass that endpoint URL value at runtime.
There are a number of ways you can pass values to a SWF at runtime
(flashvars, page parameters, etc). The approach I usually use is to
read a configuration file using HTTPService at application startup.
That configuration file includes (among other things) the information I
need to programmatically create my channel set at runtime. Here is a
basic implementation: <br />
</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&lt;?</span><span style="color: #000000;">xml&nbsp;version</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">1.0</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;encoding</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">utf-8</span><span style="color: #000000;">"</span><span style="color: #000000;">?&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">mx:Application&nbsp;xmlns:mx</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">http://www.adobe.com/2006/mxml</span><span style="color: #000000;">"</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;applicationComplete</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">configSrv.send()</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">mx:Script</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;!</span><span style="color: #000000;">[CDATA[<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;mx.controls.Alert;<br />
&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;mx.messaging.channels.AMFChannel;<br />
&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;mx.messaging.ChannelSet;<br />
&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;mx.rpc.events.ResultEvent;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;channelSet:ChannelSet;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;configResultHandler(event:ResultEvent):</span><span style="color: #0000ff;">void</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;xml:XML&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;event.result&nbsp;as&nbsp;XML;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;amfEndpoint:String&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">""</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;xml..channel.(@id</span><span style="color: #000000;">==</span><span style="color: #000000;">"</span><span style="color: #000000;">amf</span><span style="color: #000000;">"</span><span style="color: #000000;">).@endpoint;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(amfEndpoint&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">""</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Alert.show(</span><span style="color: #000000;">"</span><span style="color: #000000;">amf&nbsp;channel&nbsp;not&nbsp;configured</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">Error</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;channelSet&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;ChannelSet();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;channel:AMFChannel&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;AMFChannel(</span><span style="color: #000000;">"</span><span style="color: #000000;">my-amf</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;amfEndpoint);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;channelSet.addChannel(channel);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ro.channelSet&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;channelSet;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ro.getProducts();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;]]</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">mx:Script</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">mx:HTTPService&nbsp;id</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">configSrv</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;url</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">config.xml</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;resultFormat</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">e4x</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;result</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">configResultHandler(event)</span><span style="color: #000000;">"</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">mx:RemoteObject&nbsp;id</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">ro</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;destination</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">product</span><span style="color: #000000;">"</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">mx:DataGrid&nbsp;dataProvider</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">{ro.getProducts.lastResult}</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;width</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">100%</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;height</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">100%</span><span style="color: #000000;">"</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br />
<br />
</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">mx:Application</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
</span></div>
<p><br />
</p>
<p>The configuration file looks like this:</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&lt;?</span><span style="color: #000000;">xml&nbsp;version</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">1.0</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;encoding</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">utf-8</span><span style="color: #000000;">"</span><span style="color: #000000;">?&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">config</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">channels</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">channel&nbsp;id</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">amf</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;endpoint</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">http://localhost:8400/lcds-samples/messagebroker/amf</span><span style="color: #000000;">"</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">channels</span><span style="color: #000000;">&gt;</span><span style="color: #000000; background-color: highlight;"><br />
</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">config</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
</span></div>
<br />
<p>NOTE: With that type of runtime configuration in place, you can
create plain Flex Builder projects (you can select None as the
application server type).</p>
<p>This particular example is not extremely flexible. It assumes I will
always work with an AMF channel and therefore the only thing my
application needs to know at runtime is the AMF channel endpoint URL.
For RemoteObject that&#8217;s a fairly safe bet, however for
messaging-related classes (Producer and Consumer), you may also want to
externalize the type of channel you use (AMF Polling, long polling,
streaming, RTMP, etc.). Before you start creating that kind of dynamic
configuration system, you may want to take a look at the <a href="http://www.pranaframework.org/">Flex ActionScript framework</a> that <a href="http://www.herrodius.com/blog/158">does that</a> very well.</p>
<br />
<img src ="http://www.blogjava.net/wldandan/aggbug/326633.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wldandan/" target="_blank">想飞就飞</a> 2010-07-20 13:45 <a href="http://www.blogjava.net/wldandan/archive/2010/07/20/326633.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>BlazeDS中channel和Endpoint的相关概念</title><link>http://www.blogjava.net/wldandan/archive/2010/03/01/314184.html</link><dc:creator>想飞就飞</dc:creator><author>想飞就飞</author><pubDate>Mon, 01 Mar 2010 09:16:00 GMT</pubDate><guid>http://www.blogjava.net/wldandan/archive/2010/03/01/314184.html</guid><wfw:comment>http://www.blogjava.net/wldandan/comments/314184.html</wfw:comment><comments>http://www.blogjava.net/wldandan/archive/2010/03/01/314184.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wldandan/comments/commentRss/314184.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wldandan/services/trackbacks/314184.html</trackback:ping><description><![CDATA[<strong>1.Channel和Endpoint的定义</strong><br />
Channels are client-side objects that encapsulate the connection
behavior between Flex components and the BlazeDS server. Channels
communicate with corresponding endpoints on the BlazeDS server. You
configure the properties of a channel and its corresponding endpoint in
the services-config.xml file.<br />
<br />
<strong>2.从数据格式上分，Channels分为AMF Channel和HTTP Channel，区别在于</strong>：<br />
The difference between AMF and HTTP channels is that AMF channels transport data in the binary AMF format and HTTP channels transport data in AMFX, the text-based XML representation of AMF.<br />
<br />
<strong>3.从客户端与服务端的交互方式上分，Channels主要分为：</strong><br />
&nbsp; Simple channels and endpoints 包括：<br />
&nbsp;&nbsp; (1) Non-polling channels <br />
&nbsp;&nbsp; (2) Polling channels <br />
&nbsp;&nbsp; (3) Long polling channels <br />
&nbsp; <br />
&nbsp; Streaming channels<br />
&nbsp;&nbsp; (1) Streaming channels <br />
<br />
<strong>3.关于 Non-polling,Polling,Long polling和steaming的一些解释</strong><br />
http://www.qgy18.com/2008/08/webim-design-transport/<br />
http://newteevee.com/2009/10/04/adobe-to-finally-support-http-streaming/<br />
<br />
1.短轮询(polling)：核心思想是客户端定时去服务器取消息。为了实现即时效果，轮询的间隔必须设计得足够短，另外为了操作的流畅，需要使用Ajax来发送请求。本人的QGYWebIM就是采用的此方案。这种方案的优点是：后端程序编写比较容易，发送完响应信息马上断开连接，不会占用太多服务器资源。缺点是一般情况下，频繁的请求中有大半是无用，这些冗余请求无形中浪费了带宽和服务器资源。我们可以通过判断用户的活跃程度来决策请求服务器的间隔，我在51的一个帖子提到过这种方法，但是间隔一旦长了，消息的传送就有延时，违背了即时聊天的初衷了。<br />
<br />
2.长轮询(long-polling)：基本原理是客户端向服务器发送请求，服务器接到请求后hold住连接，直到有新消息才返回响应信息并关闭连接，连接被断开期间用户的新信息会被服务器缓存起来。客户端处理完响应信息后再向服务器发送新的请求。这种做法的优势是如果用户一直没新消息，客户端不会频繁的轮询去服务器取消息，节省了流量，但是服务器维持长连接是很消耗资源的。具体实现起来，前端这边基本不需要什么改动，依然是用Ajax轮询取信息，后端需要在没有新消息时处理一下。<br />
<br />
3.长连接(streaming)：其实很早以前就有人使用这种技术来实现聊天室的通讯，HTTP1.1开始支持。以前在页面中嵌入一个iframe，iframe里放一个使用长连接页面，服务器有新消息就会及时的在iframe里反映出来，再依靠客户端的脚本解析出来就OK了。这样做一个比较严重的问题是：使用 iframe请求长连接时，无论是IE还是firefox都会认为页面没有加载完而显示进度条，很难看。不过这个问题是可以解决的。firefox支持了Streaming Ajax，在readyState为3的时候就能接受数据，所以问题不大；IE则只能在readyState为4，即连接断开时才能得到返回值。但是伟大的Google工程师使用了一个hack成功的解决了这个问题：使用一个被称为&#8220;htmlfile&#8221;的ActiveX，把iframe放在这个ActiveX里就OK了。<br />
<br />
无疑，使用长连接对于用户来说是最好的方案，用户体验最好（消息能及时的到达）、占用用户带宽最少（不会发送无用的请求），但是会增加服务器的开销；长轮询是折中方案，Facebook IM 就是采用这种方案，不过做了一点改动：客户端发起的每个连接服务器都hold10S，这10S中新消息会源源不断的返回给客户端，10s后连接关闭，客户端发起下一个连接。这样做是因为Facebook的用户会不断的打开、关闭新页面，如果每个页面都建立一个永久的长连接，会阻塞浏览器其他请求，服务器也会吃不消的；短轮询因为实现起来简单，适用于小型应用。<br />
<img src ="http://www.blogjava.net/wldandan/aggbug/314184.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wldandan/" target="_blank">想飞就飞</a> 2010-03-01 17:16 <a href="http://www.blogjava.net/wldandan/archive/2010/03/01/314184.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Flex和Grails快速的创建Hello World </title><link>http://www.blogjava.net/wldandan/archive/2008/07/16/215336.html</link><dc:creator>想飞就飞</dc:creator><author>想飞就飞</author><pubDate>Wed, 16 Jul 2008 14:35:00 GMT</pubDate><guid>http://www.blogjava.net/wldandan/archive/2008/07/16/215336.html</guid><wfw:comment>http://www.blogjava.net/wldandan/comments/215336.html</wfw:comment><comments>http://www.blogjava.net/wldandan/archive/2008/07/16/215336.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/wldandan/comments/commentRss/215336.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wldandan/services/trackbacks/215336.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 使用Flex和Grails快速的创建Hello World &nbsp;&nbsp;<a href='http://www.blogjava.net/wldandan/archive/2008/07/16/215336.html'>阅读全文</a><img src ="http://www.blogjava.net/wldandan/aggbug/215336.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wldandan/" target="_blank">想飞就飞</a> 2008-07-16 22:35 <a href="http://www.blogjava.net/wldandan/archive/2008/07/16/215336.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>构建Flex+Grails的开发环境</title><link>http://www.blogjava.net/wldandan/archive/2008/07/08/213472.html</link><dc:creator>想飞就飞</dc:creator><author>想飞就飞</author><pubDate>Tue, 08 Jul 2008 15:24:00 GMT</pubDate><guid>http://www.blogjava.net/wldandan/archive/2008/07/08/213472.html</guid><wfw:comment>http://www.blogjava.net/wldandan/comments/213472.html</wfw:comment><comments>http://www.blogjava.net/wldandan/archive/2008/07/08/213472.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wldandan/comments/commentRss/213472.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wldandan/services/trackbacks/213472.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 快速搭建Flex和Grails的集成开发环境&nbsp;&nbsp;<a href='http://www.blogjava.net/wldandan/archive/2008/07/08/213472.html'>阅读全文</a><img src ="http://www.blogjava.net/wldandan/aggbug/213472.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wldandan/" target="_blank">想飞就飞</a> 2008-07-08 23:24 <a href="http://www.blogjava.net/wldandan/archive/2008/07/08/213472.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>配置FlexUnit 和Ant</title><link>http://www.blogjava.net/wldandan/archive/2008/06/27/211141.html</link><dc:creator>想飞就飞</dc:creator><author>想飞就飞</author><pubDate>Fri, 27 Jun 2008 07:05:00 GMT</pubDate><guid>http://www.blogjava.net/wldandan/archive/2008/06/27/211141.html</guid><wfw:comment>http://www.blogjava.net/wldandan/comments/211141.html</wfw:comment><comments>http://www.blogjava.net/wldandan/archive/2008/06/27/211141.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/wldandan/comments/commentRss/211141.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wldandan/services/trackbacks/211141.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 配置FlexUnit 和Ant&nbsp;&nbsp;<a href='http://www.blogjava.net/wldandan/archive/2008/06/27/211141.html'>阅读全文</a><img src ="http://www.blogjava.net/wldandan/aggbug/211141.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wldandan/" target="_blank">想飞就飞</a> 2008-06-27 15:05 <a href="http://www.blogjava.net/wldandan/archive/2008/06/27/211141.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>初识Flex Data Services(FDS)</title><link>http://www.blogjava.net/wldandan/archive/2007/12/06/165856.html</link><dc:creator>想飞就飞</dc:creator><author>想飞就飞</author><pubDate>Thu, 06 Dec 2007 09:54:00 GMT</pubDate><guid>http://www.blogjava.net/wldandan/archive/2007/12/06/165856.html</guid><wfw:comment>http://www.blogjava.net/wldandan/comments/165856.html</wfw:comment><comments>http://www.blogjava.net/wldandan/archive/2007/12/06/165856.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wldandan/comments/commentRss/165856.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wldandan/services/trackbacks/165856.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: FDS全称Flex Data Services(现在Adobe将其改名为LiveCycle Data Services),是运行在服务器端的java程序.它能够运行在大部分的java应用服务器上,包括JRun, JBoss, WebLogic, WebSphere, Oracle10g, and Tomcat等.使用FDS,能够帮助你创建实时的,数据驱动的Flex Application.&nbsp;&nbsp;<a href='http://www.blogjava.net/wldandan/archive/2007/12/06/165856.html'>阅读全文</a><img src ="http://www.blogjava.net/wldandan/aggbug/165856.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wldandan/" target="_blank">想飞就飞</a> 2007-12-06 17:54 <a href="http://www.blogjava.net/wldandan/archive/2007/12/06/165856.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开始接触Flex,发文鼓励一下</title><link>http://www.blogjava.net/wldandan/archive/2007/12/03/164886.html</link><dc:creator>想飞就飞</dc:creator><author>想飞就飞</author><pubDate>Mon, 03 Dec 2007 07:32:00 GMT</pubDate><guid>http://www.blogjava.net/wldandan/archive/2007/12/03/164886.html</guid><wfw:comment>http://www.blogjava.net/wldandan/comments/164886.html</wfw:comment><comments>http://www.blogjava.net/wldandan/archive/2007/12/03/164886.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/wldandan/comments/commentRss/164886.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wldandan/services/trackbacks/164886.html</trackback:ping><description><![CDATA[嘿嘿,工作需要,开始搞Flex了<br />
今天装上了Flex SDK 和 Flex Builder2<br />
有志同道合的兄弟多多帮助!<br />
<br />
<br />
<img src ="http://www.blogjava.net/wldandan/aggbug/164886.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wldandan/" target="_blank">想飞就飞</a> 2007-12-03 15:32 <a href="http://www.blogjava.net/wldandan/archive/2007/12/03/164886.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>