Передача всего объекта на сервере CORBA клиенту - PullRequest
2 голосов
/ 01 февраля 2012

Я занимаюсь разработкой распределенного приложения на CORBA, используя Java IDL, предоставляемый по умолчанию в JDK, и, конечно же, клиент и сервер, разработанные на Java.

Я поддерживаю некоторое состояние объекта на сервере.

Теперь на стороне клиента я хочу получить полное состояние (снимок) этого объекта со стороны сервера. и это объект какого-то типа Java. Поскольку я не могу передать весь объект любого типа Java с сервера на клиент, из-за определения IDL и, конечно, функции CORBA, поскольку она не зависит от языка.

Один из способов, который я нашел, это использование JSON

Я сплющу весь Java-объект любого типа в строку и передам его клиенту, используя строковый тип данных, позже на клиенте я смогу выгрузить объект из строки. также я могу определить тип строки в idl.

но это добавляет некоторую обработку для выравнивания / дефлаттинга с обеих сторон

есть ли другой способ передать объект от клиента? или может я что то пропустил?

Обновление:

Объекты следующих типов переносятся

class MyObject{ Map<String,String> object; }

Ответы [ 3 ]

1 голос
/ 01 февраля 2012

CORBA уже имеет концепцию Objects By-Value , так что вы можете использовать это, если ваш ORB поддерживает это. Поместите ваши переменные состояния в valuetype и перейдите оттуда.

Имейте в виду, что CORBA - это не Java. CORBA может использоваться со многими языками, поэтому, если вы попытаетесь понять, как отправлять вещи только с Java через систему CORBA, вам будет очень сложно. Чтобы передавать что-либо в CORBA, он должен быть в первую очередь представлен в IDL. Если valuetype не соответствует вашим потребностям, используйте подход struct, предложенный в другом ответе.

0 голосов
/ 09 февраля 2012

Вы просто должны определить свои MyObjects как объекты CORBA. Для этого вы будете использовать IDL. Ваша Карта - это простое имя, список значений.

module Foo { 
  struct MapEntry { 
    string name;
    string value;
  }; 

  sequence<MapEntry> MyMap; 
  }; 
}; 

Это создаст массив объектов MapEntry в Java. Если вы хотите переназначить их в карту Java, не стесняйтесь. Это способ CORBA передать карту чего-либо. Создать структуру, поместить ее в последовательность, готово. Это также работает правильно для других языков, поддерживаемых CORBA (например, C ++)

0 голосов
/ 01 февраля 2012

Звучит так, как будто вы хотите, чтобы состояние объекта стало частью интерфейса (потому что если вы действительно передаете состояние, возможность воссоздать объект зависит от получателя, чтобы понять переданное состояние, следовательно, он становится интерфейсом) .

Таким образом, определите struct, содержащий поля данных в IDL, и добавьте метод в интерфейс объекта для возврата состояния в этой форме. Передача затем обрабатывается обычным маршаллером CORBA.

...