2016-06-20 1 views
1

3 노드 Apache Ignite Cluster를 사용하고 있는데 Integer를 Key로, 'Subscriber'POJO를 값으로 설정했습니다. Java 프로그램 내부에서 클러스터를 액세스하고 캐시에 액세스하면 위에서 언급 한 예외가 발생하며 'peerclassloading'속성을 false로 설정하고 모든 노드에 '구독자'POJO 바이너리를 배포했습니다. 아래의 전체 스택 추적을 찾으십시오. 내가 여기서 무엇을 놓치고 있니? Ignition.start()으로 JAVA 프로그램 내 클라이언트를 시작할 때 IGNITE_HOME 내의 일부 파일을 찾는 이유는 무엇입니까?org.apache.ignite.IgniteCheckedException : 파일에서 클래스 이름을 읽지 못했습니다.

class org.apache.ignite.IgniteCheckedException: Failed to read class name from file [id=-1219769240, file=/home/benakaraj/Downloads/apache-ignite-fabric-1.5.0.final-bin/work/marshaller/-1219769240.classname] 
at org.apache.ignite.internal.MarshallerContextImpl.className(MarshallerContextImpl.java:158) 
at org.apache.ignite.internal.MarshallerContextAdapter.getClass(MarshallerContextAdapter.java:174) 
at org.apache.ignite.internal.binary.BinaryContext.descriptorForTypeId(BinaryContext.java:483) 
at org.apache.ignite.internal.binary.BinaryReaderExImpl.deserialize(BinaryReaderExImpl.java:1443) 
at org.apache.ignite.internal.binary.BinaryObjectImpl.deserializeValue(BinaryObjectImpl.java:537) 
at org.apache.ignite.internal.binary.BinaryObjectImpl.value(BinaryObjectImpl.java:117) 
at org.apache.ignite.internal.processors.cache.CacheObjectContext.unwrapBinary(CacheObjectContext.java:280) 
at org.apache.ignite.internal.processors.cache.CacheObjectContext.unwrapBinaryIfNeeded(CacheObjectContext.java:145) 
at org.apache.ignite.internal.processors.cache.CacheObjectContext.unwrapBinaryIfNeeded(CacheObjectContext.java:132) 
at org.apache.ignite.internal.processors.cache.GridCacheContext.unwrapBinaryIfNeeded(GridCacheContext.java:1748) 
at org.apache.ignite.internal.processors.cache.distributed.dht.GridPartitionedSingleGetFuture.setResult(GridPartitionedSingleGetFuture.java:598) 
at org.apache.ignite.internal.processors.cache.distributed.dht.GridPartitionedSingleGetFuture.onResult(GridPartitionedSingleGetFuture.java:454) 
at org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtCacheAdapter.processNearSingleGetResponse(GridDhtCacheAdapter.java:153) 
at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.access$1200(GridDhtAtomicCache.java:128) 
at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache$11.apply(GridDhtAtomicCache.java:295) 
at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache$11.apply(GridDhtAtomicCache.java:293) 
at org.apache.ignite.internal.processors.cache.GridCacheIoManager.processMessage(GridCacheIoManager.java:582) 
at org.apache.ignite.internal.processors.cache.GridCacheIoManager.onMessage0(GridCacheIoManager.java:280) 
at org.apache.ignite.internal.processors.cache.GridCacheIoManager.handleMessage(GridCacheIoManager.java:204) 
at org.apache.ignite.internal.processors.cache.GridCacheIoManager.access$000(GridCacheIoManager.java:80) 
at org.apache.ignite.internal.processors.cache.GridCacheIoManager$1.onMessage(GridCacheIoManager.java:163) 
at org.apache.ignite.internal.managers.communication.GridIoManager.processRegularMessage0(GridIoManager.java:821) 
at org.apache.ignite.internal.managers.communication.GridIoManager.access$1600(GridIoManager.java:103) 
at org.apache.ignite.internal.managers.communication.GridIoManager$5.run(GridIoManager.java:784) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
at java.lang.Thread.run(Thread.java:745) 
Caused by: java.io.FileNotFoundException: /home/benakaraj/Downloads/apache-ignite-fabric-1.5.0.final-bin/work/marshaller/-1219769240.classname (No such file or directory) 
at java.io.FileInputStream.open(Native Method) 
at java.io.FileInputStream.<init>(FileInputStream.java:138) 
at java.io.FileReader.<init>(FileReader.java:72) 
at org.apache.ignite.internal.MarshallerContextImpl.className(MarshallerContextImpl.java:154) 
... 26 more 

답변

0

문제는, 그것은 내부 클래스를 정렬 화 보이는, 거기를 찾을 수없는 경우의 Ignite는, 기본 클래스 로더에 의해로드 된 클래스 목록에서 사용자 정의 POJO를 보이는, 아주 간단 밝혀졌다 내 예를 들어, 내 값 POJO가 테스트 리소스 안에 있었기 때문에 기본 클래스 로더가 클래스를로드하지 않아서 ignite가 마샬링 된 클래스 폴더 (IGNITE_HOME/work/marshaller /)를 살펴 보았습니다.

관련 문제