Внешняя настройка клиента ChannelSet для веб-приложения Flex / Java - PullRequest
2 голосов
/ 10 декабря 2010

Я ищу подход, который позволил бы мне (каким-то образом) динамически передавать имя сервера, порт сервера и веб-контекст моему клиенту Flex, чтобы он мог создать ChannelSet для использования его удаленными объектами. Эти три свойства, конечно, легко доступны для моего Java-кода на стороне сервера, поэтому мне просто нужен способ передать их клиенту.

По умолчанию Adobe сообщает , что вы должны скомпилировать свое приложение Flex на основе файла конфигурации сервера "services-config.xml". Это очень негибкая практика, которую Спринг говорит, что следует избегать (я согласен).

Один популярный подход - это использовать http-сервис Flex для загрузки файла конфигурации XML. Мне нравится эта идея, но я не хочу жестко кодировать XML-файл и хранить его в моем WAR-файле. Есть ли способ динамически генерировать это из кода Java?

Другая идея, которая у меня возникла, заключается в том, чтобы каким-то образом использовать flashvars для передачи свойств с содержащейся HTML-страницы в SWF-файл. Но опять же, я не хочу жестко кодировать их на HTML-странице. Есть ли способ (может быть, с Javascript?), Чтобы динамически установить их значение при загрузке страницы?

1 Ответ

3 голосов
/ 10 декабря 2010

Вот как я это делаю.Я надеюсь, что вы найдете это полезным:

public static function getRemoteObject(destination:String, channelName:String,
    showBusyCursor:Boolean=true):RemoteObject{
    var remoteService:RemoteObject=new RemoteObject(destination);
    var channelSet:ChannelSet=new ChannelSet();
    var url:String = Application(Application.application).url;
    var secure:Boolean = URLUtil.isHttpsURL(url);
    var protocol:String = URLUtil.getProtocol(url);
    var amf:AMFChannel;
    if (secure){
        amf = new SecureAMFChannel(channelName, protocol +
            "://{server.name}:{server.port}" +
            (Application.application as Application).parameters.contextRoot +
            "/graniteamf/amf");
    }else{
        amf = new AMFChannel(channelName, protocol +
            "://{server.name}:{server.port}" +
            (Application.application as Application).parameters.contextRoot
            + "/graniteamf/amf");
    }
    channelSet.addChannel(amf);
    remoteService.channelSet=channelSet;
    remoteService.showBusyCursor=showBusyCursor;
    return remoteService;
}

Так что, как вы можете видеть, единственное, что вам нужно предоставить, это пункт назначения - который должен быть настроен в XML на стороне сервера и contextRoot - переданный как flashVar.Проходя как flashVar в моем случае (через JSP) выглядит так:

String flashVariables = "contextRoot=" + request.getContextPath() +
    "&locale=" + request.getLocale().getLanguage(); 
...