2016-08-04 44 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