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