2012-03-30 3 views
0

Java側で言語境界を越えるには、直列化されるクラスがDataSerializableインタフェースを実装する必要があります。 c#のデシリアライザにクラスが分かるようにするには、classIDを登録する必要があります。例に続いて、私はこのようなJavaで私のクラスを記述します。GemFire:Javaでオブジェクトをシリアル化し、次にそれらをcで逆シリアル化します。

public class Stuff implements DataSerializable{ 
    static { // note that classID (7) must match C# 
     Instantiator.register(new Instantiator(Stuff.class,(byte)0x07) { 
     @Override 
     public DataSerializable newInstance() { 
      return new Stuff(); 
     } 
     }); 
    } 
    private Stuff(){} 

    public boolean equals(Object obj) {...} 
    public int hashCode() {...} 

    public void toData(DataOutput dataOutput) throws IOException {...} 
    public void fromData(DataInput dataInput) throws IOException, ClassNotFoundException { ...} 
} 

それはOKに見えますが、私はそれを実行したとき、私はこの例外を取得:2012年3月30日15時06警告[

を:プールの インスタンシを登録00.239 JSTのTID = 0x1の]エラー: com.gemstone.gemfire.cache.client.ServerOperationException: は com.gemstone.gemfire.cache.client.internal.AbstractOp.processAckでリモートregisterInstantiatorsを実行している間(AbstractOp.java:247) at com.gemstone.g emfire.cache.client.internal.RegisterInstantiatorsOp $ RegisterInstantiatorsOpImpl.processResponse(RegisterInstantiatorsOp.java:76) com.gemstone.gemfire.cache.client.internal.AbstractOp.attemptReadResponse(AbstractOp.java:163) コムで で。 コムでgemstone.gemfire.cache.client.internal.AbstractOp.attempt(AbstractOp.java:363) でcom.gemstone.gemfire.cache.client.internal.ConnectionImpl.execute(ConnectionImpl.java:229) 。 gemstone.gemfire.cache.client.internal.pooling.PooledConnection.execute(PooledConnection.java:321) com.gemstone.gemfire.cache.client.internal.OpExecutorImpl.executeWithPossibleReAuthentication(OpExecutorImpl.java:646)012で で com.gemstone.gemfire.cache.client.internal.OpExecutorImpl.execute com.gemstone.gemfire.cache.client.internal.PoolImpl.execute(PoolImpl.java:624)で(OpExecutorImpl.java:108) で で com.gemstone.gemfire.cache.client.internal.RegisterInstantiatorsOp.execute com.gemstone.gemfire.internal.cache.PoolManagerImpl.allPoolsRegisterInstantiator(PoolManagerImpl.java:216)で(RegisterInstantiatorsOp.java:39) コム(内部インスタントメッセージ。com.gemstone.gemfire.internal.InternalInstantiator.registerスタッフに(InternalInstantiator.java:71)com.gemstone.gemfire.Instantiator.register(Instantiator.java:168)で 。(Stuff.java)

java.lang.ClassNotFoundException:スタッフ、助けることができる経験を持っている人があるなぜ私が把握することができませんでし$ 1

によって引き起こされますか?前もって感謝します!

+0

さらに多くのコード例や完全なコード例を提供できますか? – Avinash

答えて

1

ほとんどの構成では、GemFireサーバーは、オブジェクトをインデックス化したり、クエリを実行したり、リスナーを呼び出すためにオブジェクトを逆シリアル化する必要があります。したがって、インスタンシエーターを登録すると、そのクラスは分散システムのすべてのマシンに登録されます。したがって、クラスそのものはクラスタ内のどこにでもロードできる必要があります。

例外として、スタックトレースは、リモートノードでエラーが発生したことを示します。

クラスタに参加しているすべてのマシンにStuffクラスがあるかどうか確認してください。少なくともキャッシュサーバー上。