如何解决如何使用Apache Geode类型注册表来编写域对象数组
我正在一个FIX重复组中,其中报价请求可以具有x条腿。我已经做了一个这样的Leg类:
public class Leg : IPdxSerializable
{
public string Side { get; set; }
public decimal Size { get; set; }
public string ValueDate { get; set; }
public void ToData(IPdxWriter writer)
{
writer.WriteString("Side",Side);
writer.WriteDouble("Size",Convert.Todouble(Size));
writer.WriteString("ValueDate",ValueDate);
}
public void FromData(IPdxReader reader)
{
Side = reader.readString("Side");
Size = (decimal) reader.ReadDouble("Size");
ValueDate = reader.readString("ValueDate");
}
public static IPdxSerializable CreateDeserializable()
{
return new Leg();
}
public Leg () { }
}
报价请求的腿写为这些Leg
对象的数组。在报价请求类中,有一个Leg[]
声明和一个ToData FromData
实现。构建报价请求对象,并将put
作为PDX类型writer.WriteObjectArray("Legs",Legs.ToList<object>());
进入Geode区域,在该区域中,由PDX Writer将分支数组写入为:
List
我为Leg
的{{1}}尝试了不同类型的PDX类型和域对象类型,但是当我get
GFSH
中的对象时,leg数组具有给出错误的味道,例如:
Could not create an instance of a class Leg (through reference chain: org.apache.geode.pdx.internal.PdxInstanceImpl[0]->org.apache.geode.pdx.internal.PdxInstanceImpl["object"])
或
Could not create an instance of a class Leg (through reference chain: java.util.Vector[0]->org.apache.geode.pdx.internal.PdxInstanceImpl["object"])
我认为这是因为Geode服务器尚未在服务器的Leg
中注册TypeRegistry
对象类型。从本地客户端的Geode版本10开始,不再有像这样使用的Serializable.RegisterPdxType
:
Serializable.RegisterPdxType(Leg.CreateDeserializable);
我发现了TypeRegistry类引用,并且在初始化缓存时,区域还将类型注册到缓存中:
_cache.TypeRegistry.RegisterPdxType(Leg.CreateDeserializable);
但仍然出现相同的错误。
writer.WriteObject("Legs",Legs);
如果我将Leg
对象转换为string[]
表示形式,则可以将WriteStringArray
和ReadStringArray
用作引号请求,而Legs
在字符串数组,但是有它自己的问题,我想使用Leg对象数组,最好是PDX包装。我想念什么?
解决方法
您可以使用rupweb:
output.WriteObject(LEGS_KEY_,Legs);
和
Legs = (Leg[])input.ReadObject(LEGS_KEY_);
代替WriteObjectArray / ReadObjectArray。不知道这些限制是什么。仍在调查中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。