2012-03-30 4 views
0

Java에서 언어 경계를 넘기 위해서는 직렬화 할 클래스가 DataSerializable 인터페이스를 구현해야합니다. deserializer가 어떤 클래스인지를 C#에 알리려면 classID를 등록해야합니다.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 { ...} 
} 

괜찮아 보이지만 내가 그것을 실행할 때 나는이 예외가 : 예에 따라, 나는 다음과 같은 자바에서 내 클래스를 작성

[2012년 3월 30일 15시 6분 경고 : 풀 인스 등록 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 닷컴에서 com.gemstone.gemfire.cache.client.internal.AbstractOp.attemptReadResponse (AbstractOp.java:163) 에서 emfire.cache.client.internal.RegisterInstantiatorsOp $ RegisterInstantiatorsOpImpl.processResponse (RegisterInstantiatorsOp.java:76) . gemstone.gemfire.cache.client.internal.AbstractOp.attempt 닷컴에서 com.gemstone.gemfire.cache.client.internal.ConnectionImpl.execute (ConnectionImpl.java:229) 에서 (AbstractOp.java:363). gemstone.gemfire.cache.client.internal.pooling.PooledConnection.execute com.gemstone.gemfire.cache.client.internal.OpExecutorImpl.executeWithPossibleReAuthentication (OpExecutorImpl.java:646)에서 (PooledConnection.java:321) 012에서 3,516,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) 닷컴 .gemstone.gemfire.internal.InternalInstantiator.sendRegistrationMessageToServers (InternalInstantiator.java:188) at com.gemstone.gemfire.internal.InternalInstantiator._register (InternalInstantiator.java:143) 에 012 3,516,com.gemstone.gemfire.internal.InternalInstantiator.register 재료에 (InternalInstantiator.java:71) com.gemstone.gemfire.Instantiator.register (Instantiator.java:168)에서 . (Stuff.java)

원인 : java.lang.ClassNotFoundException : Stuff $ 1

나는 이유를 알 수 없었는데 경험이있는 사람이 누구인가? 미리 감사드립니다!

+0

더 많은 코드 예제를 제공 할 수 있습니까? – Avinash

답변

1

대부분의 구성에서 GemFire ​​서버는 개체를 색인화하고 쿼리를 실행하고 수신기를 호출하기 위해 개체를 deserialize해야합니다. 따라서 인스턴스 생성기를 등록하면 클래스는 분산 시스템의 모든 시스템에 등록됩니다. 따라서 클래스 자체는 클러스터의 모든 곳에서로드 할 수 있어야합니다.

예외 스택 추적은 원격 노드에서 오류가 발생한다고 말합니다.

클러스터에 참여하는 모든 시스템에 Stuff 클래스가 있는지 확인하십시오. 최소한 캐시 서버에 있어야합니다.