<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Flex訪問BlazeDS/LCDSservice 避免硬編碼的方法

    這篇文章提到的方法挺好的,就是用一個httpservie動態加載一個配置文件,在配置文件里寫好remote service的配置.
    原文請參考
    http://coenraets.org/blog/2009/03/externalizing-service-configuration-using-blazeds-and-lcds/

    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.

    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.

    When you create a new BlazeDS or LCDS project in Flex Builder, you are typically told to select J2EE as the “Application Server Type” and then check “use remote object access service”. 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’ll see something like this:

    -services “c:\blazeds\tomcat\webapps\samples\WEB-INF\flex\services-config.xml”

    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 compile time 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’t use these tokens for AIR applications).

    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’t want to recompile your application when you move it to another server). At a high level, it works like this:

    var channelSet:ChannelSet = new ChannelSet();
    var channel:AMFChannel = new AMFChannel("my-amf""http://localhost:8400/lcds-samples/messagebroker/amf");
    channelSet.addChannel(channel);
    remoteObject.channelSet 
    = channelSet;

    This is still not what we want because the endpoint URL is still hardcoded in the application. At least in this case it’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:

    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
        applicationComplete
    ="configSrv.send()">

        
    <mx:Script>
        
    <![CDATA[

        import mx.controls.Alert;
        import mx.messaging.channels.AMFChannel;
        import mx.messaging.ChannelSet;
        import mx.rpc.events.ResultEvent;

        private 
    var channelSet:ChannelSet;

        private 
    function configResultHandler(event:ResultEvent):void
        {
            
    var xml:XML = event.result as XML;
            
    var amfEndpoint:String = "" + xml..channel.(@id=="amf").@endpoint;
            
    if (amfEndpoint == "")
            {
                Alert.show(
    "amf channel not configured""Error");
            }
            
    else
            {
                channelSet 
    = new ChannelSet();
                
    var channel:AMFChannel = new AMFChannel("my-amf", amfEndpoint);
                channelSet.addChannel(channel);
                ro.channelSet 
    = channelSet;
                ro.getProducts();
            }
        }

        ]]
    >
        
    </mx:Script>

        
    <mx:HTTPService id="configSrv" url="config.xml" resultFormat="e4x" result="configResultHandler(event)"/>

        
    <mx:RemoteObject id="ro" destination="product"/>

        
    <mx:DataGrid dataProvider="{ro.getProducts.lastResult}" width="100%" height="100%"/>

    </mx:Application>


    The configuration file looks like this:

    <?xml version="1.0" encoding="utf-8"?>
    <config>
        
    <channels>
            
    <channel id="amf" endpoint="http://localhost:8400/lcds-samples/messagebroker/amf"/>
        
    </channels>
    </config>

    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).

    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’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 Flex ActionScript framework that does that very well.


    posted on 2010-07-20 13:45 想飛就飛 閱讀(673) 評論(0)  編輯  收藏 所屬分類: Flex

    公告


    導航

    <2010年7月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    統計

    常用鏈接

    留言簿(13)

    我參與的團隊

    隨筆分類(69)

    隨筆檔案(68)

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 四虎成人精品国产永久免费无码| 久久精品国产亚洲AV忘忧草18| 美女免费视频一区二区| 麻豆一区二区免费播放网站| 久久久久亚洲AV无码观看| 香蕉免费一区二区三区| 中国在线观看免费的www| 亚洲国产高清精品线久久| 一区二区在线免费视频| 成人免费黄色网址| 亚洲女人影院想要爱| 国产成人免费AV在线播放 | 亚洲伊人tv综合网色| 亚洲爆乳AAA无码专区| 8x网站免费入口在线观看| 久久亚洲美女精品国产精品| 99精品视频在线观看免费专区 | 国内永久免费crm系统z在线| 亚洲人成网站在线播放vr| 国产成人精品亚洲一区| 亚洲国产激情一区二区三区| a级日本高清免费看| 免费人成在线观看播放国产| 视频免费1区二区三区| 国产精品久久久亚洲| 日本最新免费网站| 亚洲1区2区3区精华液| 国产偷窥女洗浴在线观看亚洲| 免费一区二区三区| 亚洲宅男精品一区在线观看| 人妻丰满熟妇无码区免费| 亚洲av产在线精品亚洲第一站| 国产午夜免费福利红片| 亚洲av无码一区二区三区四区 | 国产亚洲婷婷香蕉久久精品 | 亚洲精品国产精品乱码视色| 91av视频免费在线观看| 男男gay做爽爽的视频免费| 久久夜色精品国产嚕嚕亚洲av| 成在人线AV无码免费| 麻豆狠色伊人亚洲综合网站 |