Hi:
The implementations name maybe not same.
Like my example:
class DataEntity {
Integer id;
string name;
Integer age;
….. and other
Externalizable.read(in){
if(in.readBoolean()) {
id = in.readInt();
}
same as name,age...
}
Externalizable.write(out){
out.writeBoolean(id != null);
if(id != null) {
out.writeInt(id);
}
same as name,age...
}
}
class ServiceEntity {
Integer id;
Integer age;
…. and other
Externalizable.read(in){
if(in.readBoolean()) {
id = in.readInt();
}
if(in.readBoolean()) {
in.readString(); // ignore name
}
if(in.readBoolean()) {
age = in.readInt();
}
… and other
}
Externalizable.write(out){
out.writeBoolean(id != null);
if(id != null) {
out.writeInt(id);
}
out.writeBoolean(false); // null for name
out.writeBoolean(age != null);
if(age != null) {
out.writeInt(age);
}
… and other
}
}
The other implementation class can be serialized and deserialized
custom rules by Externalizable.read and Externalizable.write.
Each of the different types of servers property needs are different,it
does not require a complete serialization.
> 在 2015年11月9日,下午10:22,Denis Magda <[email protected]> 写道:
>
> Hi,
>
> As I understand both servers have different implementations but the names of
> those implementations are the same, correct?
> Because otherwise I don't see how your code could get to the point of
> checksum validation if one implementation's name is ServiceEntity while the
> other's is DataEntity.
>
> If my assumptions above are correct then I would recommend to do the
> following:
>
> 1) Extend Serializable instead of Externalizable
>
> interface Entity extends Serializable {
> .....
> }
>
> 2) Add custom serialVersionUID to each implementation. This will help you get
> rid off checksum related exception
>
> class EntityImpl implements Entity {
> private static final long serialVersionUID = 0L;
> ......
> }
>
>
> Regards,
> Denis
>
> On 11/8/2015 3:27 PM, 姜 为 wrote:
>> Hi guys:
>>
>> I’m using ignite 1.4.
>> In IgniteCompute.call will transfer of an object to the cluster.
>> The object should implement Serializable or Externalizable interface.
>> OptimizedClassDescriptor.read method will check whether the object is in
>> the same class.
>>
>> In my use case,I have some type of servers in cluster.
>> The server type A will check the business,and the server type B will
>> persistent data.
>> There is a entity interface Entity extends Externalizable have different
>> implementations on different servers.
>> Such like this:
>>
>> interface Entity extends Externalizable {
>> method a();
>> method b();
>> method c();
>> }
>>
>> class ServiceEntity implements Entity {
>> method a(){
>> // do something...
>> }
>>
>> method b(){
>> // do something...
>> }
>>
>> method c(){
>> throw new UnsupportedException...
>> }
>>
>> Externalizable.read...
>> Externalizable.write...
>> }
>>
>> class DataEntity implements Entity {
>> method a(){
>> // do something...
>> }
>>
>> method b(){
>> throw new UnsupportedException...
>> }
>>
>> method c(){
>> // do something...
>> }
>>
>> Externalizable.read...
>> Externalizable.write...
>> }
>>
>>
>> And IgniteCompute.call(new IgniteCallable(
>> public Object call(){
>> Entity.a() or b and c;..
>> }
>> ));
>>
>> Different implementations of the same class are to achieve read and write
>> methods.
>> But OptimizedClassDescriptor.read will check the class sum and throw
>> ClassNotFoundException.
>>
>> I recommend verifyChecksum object set as optional,and I really need is
>> change.
>>
>> Here is my pr:
>> https://issues.apache.org/jira/browse/IGNITE-1854
>> <https://issues.apache.org/jira/browse/IGNITE-1854>
>> <https://issues.apache.org/jira/browse/IGNITE-1854>
>> <https://issues.apache.org/jira/browse/IGNITE-1854>
>> https://github.com/apache/ignite/pull/200/
>> <https://github.com/apache/ignite/pull/200/>
>> <https://github.com/apache/ignite/pull/200/>
>> <https://github.com/apache/ignite/pull/200/>
>>
>>
>