2016-08-04 2 views
0

Я хотел бы иметь клиентское приложение на C++, которое поддерживает кеш объектов, которые поступают с сервера Java. Объекты должны быть совместимы. Я понимаю, что Gemfire поддерживает их в сериализованном формате. Это означает, что класс Java должен быть эквивалентен классу C++.Кэшированные объекты Java в C++-клиенте

Существует ли обычная практика определения структуры класса в общем месте в независимой от языка задаче и генерации эквивалентных классов Java и C++, которые могут быть сериализованы для PDX или любой другой формы, используемой Gemfire?

С уважением,
Яш

ответ

1

Перед PDX я использовал для создания языка нейтрального представления моего домена и одновременно генерировать Java, C++ и классы .Net с использованием DataSerializable. Однако PDX делает это ненужным по большей части. Ниже приведен пример конфигурации примера.

Если вы столкнулись с типами, которые вы используете, что Java не поддерживает, вы все равно не придется прибегать к генерации сериализаторов, но вы можете сосредоточиться на сериализации, что один тип (см 564 http://gemfire.docs.pivotal.io/pdf/pivotal-gemfire-ug.pdf

генерации Рассмотрим ваши собственные сериализаторы, когда у вас есть безумная потребность в скорости, так как автоматический сериализатор может вызвать перетаскивание. Обычно это не нужно, но если вы это сделаете, вот инструкции: http://data-docs-samples.cfapps.io/docs-gemfire/latest/javadocs/japi/com/gemstone/gemfire/DataSerializer.html

Вот конфигурация для использования pdx auto сериализатор:

<!-- Cache configuration configuring auto serialization behavior --> 
<cache> 
<pdx> 
    <pdx-serializer> 
    <class-name>com.gemstone.gemfire.pdx.ReflectionBasedAutoSerializer 
    </class-name> 
    <parameter name="classes"> 
     <string>com.company.domain.DomainObject</string> 
    </parameter> 
    </pdx-serializer> 
</pdx> 
... 
</cache> 

Если я ответил на ваш вопрос, просьба указать «Ответ». Благодарю.

+0

Если у меня есть класс MyClass {int myID; String myName} в Java, у меня не может быть MyClass {String myName; int myID} в C++. Оба они должны совпадать даже с сериализацией Auto PDX. Какое языковое нейтральное представление можно использовать для определения классов Java и C++? Я больше заинтересован в том, чтобы структуры классов были правильными для обоих языков. Скорость сериализации для меня не беспокоит. – Yash

+0

Учитывая это, рассмотрите возможность использования своего Java POJO в качестве своего серверного представления, а затем переопределите ваш Employee PDXSerializer 'toData' и' fromData' на собственном клиенте C++ для обработки вашего различного порядка и/или типов (см. Http: // gemfire .docs.pivotal.io/Docs-gemfire/gemfire_nativeclient/CPP-кэширование-апи/using_pdxserializer.html). Если у вас должен быть нейтральный язык, сохраните все как строку и переопределите заказы/типы в ваших сериализаторах. Чтобы упростить и автоматизировать, я использовал генераторы кода, чтобы генерировать сериализаторы из метаданных объектов и сделать их частью CI. –

+0

Можете ли вы предложить генератор кода? Какой из них вы использовали? – Yash