2014-09-02 4 views
0

Я искал некоторую помощь в создании веб-приложения Flex с использованием BlazeDS и Java-сервера с динамической конфигурацией конечных точек BlazeDS.Конфигурация конечной точки Dynamic BlazeDS

Во-первых, я попытаюсь объяснить свою текущую ситуацию.

У меня есть приложение Flex 3.2, которое предоставляет графический интерфейс приложения. Из ActionScript я вызываю методы Java с помощью BlazeDS. Чтобы получить доступ к 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. В такой ситуации мне нужен жестко закодированный URL-адрес в файле Config.as. И в этом проблема. При попытке развернуть приложение на другой сервер мне всегда нужно перестроить приложение с новой конфигурацией URL-адресов в Config Config класса ActionScript.

Поэтому я ищу способ определения статической конфигурации приложения Flex для подключения к серверу BlazeDS. И способ изменить такую ​​конфигурацию, не перестраивая приложение, чтобы я мог предоставить клиенту собственный способ перенастроить и переместить приложение Flex.

Я думал об использовании конфигурационного файла, но Flex работает на стороне клиента, и нет файла конфигурации! Я думал об использовании конфигурации базы данных, но у меня нет базы данных на стороне клиента!

Подводя итог, я ищу способ, как получить URL-адрес BlazeDS из конфигурации, чтобы иметь возможность изменить его, не перестраивая все приложение.

Спасибо за любые полезные предложения.

EDIT: пересмотрено вопрос, чтобы быть более актуальным. Я улучшил способ динамического определения URL-адреса с URL-адреса запроса, поэтому он работает сейчас даже для прокси-сервера. Однако мое любопытство сохраняется для конфигурации flex без перестройки.

+0

Мне наконец-то удалось найти способ динамического определения правильного URL-адреса. Тем не менее, мне все еще интересно, как изменить конфигурацию гибкого диска без необходимости перестраивать, если это возможно. – Sharg

ответ

0

Вот мой старый пример Blaze DS Service, который делает в основном то же самое, что и вы. Строка должна быть создана правильно. Если адрес конечной точки неверен, поймите ошибку.

В настоящее время мой проект не может быть построен из-за Flexmojos ... Я пока не могу это проверить.

Поскольку вы не читали вопрос правильно, я вас неправильно понял: вы можете поместить файл конфигурации рядом с SWF и загрузить его через URLLoader или передать его через FlashVars. Это должно дать вам возможность динамически передавать конечную точку.

+0

Спасибо за ваш пример. Тем не менее, я считаю, что это не решает мою проблему. У вас есть URL-адрес, закодированный в коде. Поэтому вы всегда подключаетесь к одному и тому же URL. Когда вы пытаетесь переместить приложение на другой сервер, вам необходимо перестроить приложение, чтобы заменить строку URL. Я могу жестко закодировать адрес, когда я не могу определить его автоматически.Однако, когда жестко закодировано, мне все равно придется перестроить приложение, чтобы иметь возможность развертывать его в новом месте назначения. – Sharg

+0

О, я вас неправильно понял. Проверьте мой отредактированный ответ. –

+0

Хороший намек, Флориан. Поэтому я просто размещаю файл конфигурации внутри WAR и используя URLLoader. Я могу получить доступ к файлу в ActionScript, не зная URL-адрес сервера? Можете привести пример? Благодарю. – Sharg

Смежные вопросы