Gemfire 如何使用Apache Geode类型注册表来编写域对象数组
我正在处理一个修复重复组,其中报价请求可以有x个分支。我做了一个类似这样的腿部训练:Gemfire 如何使用Apache Geode类型注册表来编写域对象数组,gemfire,geode,Gemfire,Geode,我正在处理一个修复重复组,其中报价请求可以有x个分支。我做了一个类似这样的腿部训练: 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.Wr
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 () { }
}
quote请求的legs被编写为这些Leg
对象的数组。在quote请求类中有一个Leg[]
声明和ToData FromData
实现。quote request对象被构建并作为PDX类型放入Geode区域,PDX Writer将其中的支腿数组写入为:
writer.writeObject数组(“Legs”,Legs.ToList())代码>
我尝试了不同类型的Leg
的List
作为PDX类型和域对象类型,但是当我get
得到GFSH
中的对象时,Leg数组出现了如下错误:
无法创建类分支的实例(通过引用链:org.apache.geode.pdx.internal.PdxInstanceImpl[0]->org.apache.geode.pdx.internal.PdxInstanceImpl[“object”])
或
无法创建类分支的实例(通过引用链:java.util.Vector[0]->org.apache.geode.pdx.internal.PdxInstanceImpl[“object]”)
我认为这是因为Geode服务器没有在服务器的TypeRegistry
中注册Leg
对象类型。自本机客户端的Geode版本10起,不再有可序列化的.RegisterPDXDType
,其使用方式如下:
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 () { }
}
Serializable.RegisterPDXDType(Leg.CreateDeserializable)代码>
我找到了类引用,初始化缓存时,区域也将类型注册到缓存中:
\u cache.TypeRegistry.RegisterPdxType(Leg.CreateDeserializable)代码>
但仍然会得到相同的错误
如果一个Legs数组仅仅作为一个对象来写,则是相同的错误
writer.WriteObject(“Legs”,Legs)代码>
如果我将Leg
对象转换为string[]
表示,这在WriteStringArray
和ReadStringArray
作为引用请求时可以正常工作,其中Legs
是字符串数组,但这有它自己的问题,我想使用Leg对象数组,最好是PDX包裹。我缺少什么?rupweb您可以使用:
output.WriteObject(LEGS\u KEY\u,LEGS);
及
Legs=(Leg[])输入。读取对象(Legs\u键);
而不是WriteObjectArray/ReadObjectArray。不确定这些限制是什么。仍在调查中