2012-02-01 6 views
1

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

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

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

Один из способов я нашел, используют JSON

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

, но это добавляет некоторую обработку для выпрямления/deflattening с обеих сторон

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

Update:

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

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

+0

Не могли бы вы показать пример определения объекта, который хотите передать? – tuergeist

+0

@tuergeist предоставил определение типа объекта. – ajduke

ответ

0

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

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

    sequence<MapEntry> MyMap; 
    }; 
}; 

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

0

Это звучит так, как будто вы хотите, чтобы состояние объекта стать частью интерфейса (потому что если вы на самом деле ПЕРЕЧИСЛЕНИЯ состояние, способное воссоздать объект, зависит от приемника, чтобы понять переданное состояние, следовательно, оно становится интерфейсом).

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

+0

Но этот тип объекта, содержащий java.util.Map как переменные экземпляра – ajduke

+0

Поскольку этот тип не существует в IDL напрямую (неожиданность), вам нужно скопировать данные по запросу - карта, вероятно, будет представлена ​​как «последовательность» типа 'struct', который содержит пары ключ/значение. Или используйте «valuetype», как предложил Брайан. –

1

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

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