微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用Apache Geode类型注册表来编写域对象数组

如何解决如何使用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);

但仍然出现相同的错误

如果仅将Legs数组写为一个对象,则会出现相同的错误

writer.WriteObject("Legs",Legs);

如果我将Leg对象转换为string[]表示形式,则可以将WriteStringArrayReadStringArray用作引号请求,而Legs在字符串数组,但是有它自己的问题,我想使用Leg对象数组,最好是PDX包装。我想念什么?

解决方法

您可以使用rupweb:

output.WriteObject(LEGS_KEY_,Legs);

Legs = (Leg[])input.ReadObject(LEGS_KEY_);

代替WriteObjectArray / ReadObjectArray。不知道这些限制是什么。仍在调查中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。