2016-08-04 41 views
0

我想要一个C++客户端应用程序,它维护来自Java服务器的对象的缓存。这些对象需要兼容。我明白,Gemfire以可序列化的格式维护它们。这意味着Java类需要等同于C++类。C++客户端中的缓存Java对象

是否有一种常见的做法是在独立于语言的规范中定义类结构,并生成可序列化到PDX或Gemfire使用的任何其他表单的等效Java和C++类?

问候,
佳日

回答

1

PDX之前我用来创建我的域的语言无关的表示,并同时生成Java,C++和使用DataSerializable .NET类。但是,PDX在大多数情况下并不需要这些。我附上下面的示例配置。

如果遇到您使用的是Java不支持的类型,你还没有诉诸生成序列化,但你可以专注在序列化一个类型(见http://gemfire.docs.pivotal.io/pdf/pivotal-gemfire-ug.pdf

考虑产生564页您自己的序列化程序,因为自动序列化程序可能会产生拖动,这通常是不需要的,但如果这样做,请执行以下操作: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;字符串myName}在Java中,我不能有MyClass {字符串myName; int myID}在C++中。即使Auto PDX序列化,它们也需要匹配。我可以使用什么与语言无关的表示来定义Java和C++类?我更感兴趣的是让两种语言的课堂结构正确。系列化速度对我来说不是一个问题。 – Yash

+0

考虑到具体情况,考虑将Java POJO用作服务器端表示形式,然后在C++本机客户机上覆盖Employee PDXSerializer'toData'和'fromData'以处理不同的排序和/或类型(请参阅http:// gemfire .docs.pivotal.io /文档-的GemFire/gemfire_nativeclient/CPP-缓存-API/using_pdxserializer.html)。如果您必须具有语言中立性,请将所有内容存储为字符串并覆盖序列化程序中的订单/类型。为了简化和自动化,我使用了代码生成器来从对象元数据生成序列化器,并使其成为CI的一部分。 –

+0

你能推荐一个代码生成器吗?你使用了哪一个? – Yash