动态BlazeDS端点配置

时间:2014-09-02 14:32:43

标签: java actionscript-3 flex

我使用具有动态BlazeDS端点配置的BlazeDS和Java服务器搜索创建Web Flex应用程序的一些帮助。

首先,我将尝试解释我目前的情况。

我有一个Flex 3.2应用程序,它提供了应用程序的GUI。从ActionScript我使用BlazeDS调用Java方法。要访问BlazeDS,我使用一个Config类,它提供如下所示的端点(它是一个构造函数):

public function Config(): void {

    if (_serviceUrl == null) {
        try {
            var browser: IBrowserManager = BrowserManager.getInstance();
            browser.init();
            var url: String = browser.url; 
            var host: String = mx.utils.URLUtil.getServerName(url);
            var port: uint = mx.utils.URLUtil.getPort(url);
            var parts: Array = url.split('/');
            if (parts[2] == '') {
                url = DEFAULT_URL;
                Alert.show("Unable to determine server location, using default URL: " + DEFAULT_URL, "Connection error");
            }
            else {
                url = parts[0] + '//' + parts[2] + '/' + parts[3] + '/messagebroker/amf';

            }
            _serviceUrl = url;
        } catch (e: Error) {

            Alert.show("Exception while trying to determine server location, using default URL: " + DEFAULT_URL, "Connection exception");
            _serviceUrl = DEFAULT_URL;
        }
    }

}

该类的想法是从请求URL确定端点。我使用Delegate类来使用BlazeDS调用远程方法,如下所示:

{
import com.adobe.cairngorm.business.ServiceLocator;

import mx.rpc.IResponder;
import mx.rpc.remoting.RemoteObject;

public class AbstractRemoteDelegate
{
    public function AbstractRemoteDelegate(responder:IResponder,serviceName:String) 
    {
        _responder=responder;
        _locator=ServiceLocator.getInstance();
        _service=_locator.getRemoteObject(serviceName);
        _service.showBusyCursor=true;
        _service.endpoint = Config.instance.serviceUrl;

    }

    private var _responder:IResponder;
    private var _locator:ServiceLocator;
    private var _service:RemoteObject;

    protected function send(operationName:String,... args:Array) : void {           
        _service.getOperation(operationName).send.apply(_service.getOperation(operationName),args).addResponder(_responder);
    }

}
}

这种方法确实很好。但是,我遇到了无法使用动态确定的URL的情况。在这种情况下,我需要在Config.as文件中使用硬编码的URL。这就是问题所在。尝试将应用程序部署到另一台服务器时,我总是需要在ActionScript类Config中使用新的URL配置重建应用程序。

因此,我搜索了一种为Flex应用程序定义静态配置以连接BlazeDS服务器的方法。以及在不重建应用程序的情况下更改此类配置的方法,以便我可以为客户提供自己的方式来重新配置和移动Flex应用程序。

我考虑过使用配置文件,但Flex在客户端运行,没有配置文件! 我考虑过使用数据库配置,但我在客户端没有任何数据库!

总之,我正在寻找一种方法,如何从配置中获取BlazeDS URL,以便能够在不重建整个应用程序的情况下更改它。

感谢任何有用的建议。

编辑:修改问题更实际。我改进了从请求URL动态确定URL的方法,因此它现在甚至可以用于代理服务器。但是,我的好奇心仍然存在于没有重建的情况下灵活配置。

1 个答案:

答案 0 :(得分:0)

这是我的一个旧例子Blaze DS Service,它与你的基本相同。它只是需要正确创建的字符串。如果端点地址错误,请相应地捕获错误。

由于Flexmojos,我的项目目前无法构建......我还无法测试。

由于它没有正确地解读您的问题,我误解了您:您可以将配置文件放在SWF旁边并通过URLLoader加载它或通过FlashVars传递它。这应该让您可以自由地动态传递端点。

相关问题