Ну, я столкнулся с той же проблемой при соединении двух серверов BlazeDS с SINGLE flex-клиентом (swf). На самом деле, как говорит гибкая документация:
"Каждое приложение Flex, написанное в MXML или ActionScript, в конечном итоге компилируется в SWF-файл. Когда SWF-файл подключается к серверу BlazeDS, создается объект flex.messaging.client.FlexClient для представления этого SWF-файла в сервер. SWF-файлы и экземпляры FlexClient имеют взаимно-однозначное сопоставление. В этом сопоставлении каждый экземпляр FlexClient имеет уникальный идентификатор с именем id, который генерируется сервером BlazeDS. Также создается одноэлементный класс ActionScript mx.messaging.FlexClient. для приложения Flex для доступа к его уникальному идентификатору FlexClient. "
Например, у вас есть два сервера BlazeDS. 1) УДАЛЕНО 2) ЛОКАЛЬНЫЙ и одиночный FlexApp (swf) «MyClient».
Шаг 1. MyClient подключается к удаленному серверу BlazeDS. Таким образом, генерируется один уникальный идентификатор.
Шаг 2. Теперь MyClient подключается к локальному серверу BlazeDS. Тот же идентификатор, сгенерированный на шаге 1, будет использоваться, поскольку для одного FlexApp (swf) может быть сгенерирован только один уникальный идентификатор.
Шаг 3. Теперь MyClient снова подключится к удаленному серверу BlazeDS. Помните, что каждый раз, когда FlexApp (SWF) подключается к серверу BlazeDS, генерируется уникальный FlexClient, а также уникальный идентификатор. Итак, теперь на этом шаге 3 у нас уже есть идентификатор, сгенерированный на шаге 1. Поэтому, безусловно, он выдаст исключение Duplicate Session.
Решение:
В моей заявке есть обходной путь, который я нашел и применил. Оно работает.
Каждый раз, когда FlexApp (swf) переключает сервер blazeDS, генерируйте id = null.
FlexClient.getInstance().id=null;
В приведенном выше примере сделайте id = null после шага 1. Теперь, когда он подключится к LOCAL blazeDS, он не будет использовать идентификатор, сгенерированный на шаге 1. Вместо этого он создаст один новый уникальный идентификатор при работе в LOCAL. режим BlazeDS.
Опять же, когда вы переключаетесь из ЛОКАЛЬНОГО в ДИСТАНЦИОННЫЙ режим (Шаг 3), сделайте id = null этим фрагментом кода. Итак, теперь, когда FlexApp (swf) подключается к REMOTE blazeDS, будет сгенерирован новый уникальный идентификатор, и не будет исключения Duplicate Session.
Спасибо и всего наилучшего,
Анупам Г.