2016-06-20 5 views
1

У меня есть 3 узла Apache Ignite Cluster, я создал кеш с Integer как ключ и POJO подписчика как значение, когда я подключаюсь к кластер изнутри программы JAVA и получить доступ к кешу, я получаю вышеупомянутое исключение, у меня есть свойство «peerclassloading», которое установлено в false, и я развернул «POJO Binaries» подписчика на всех узлах. Пожалуйста, найдите полную трассировку стека ниже. Что мне здесь не хватает? Почему он ищет какой-то файл внутри моего IGNITE_HOME, когда я запускаю клиент в моей программе JAVA с помощью Ignition.start()?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, из списка классов нагруженных класса по умолчанию загрузчика, если он не находит его там, он выглядит внутри выстроил классы, на моем case, мое значение POJO находилось внутри тестовых ресурсов, поэтому загрузчик класса по умолчанию не загружал класс, заставляя зажечь заглядывать в папку с сортированными классами (IGNITE_HOME/work/marshaller /).

1

Похоже, что кеш пытается десериализовать значение после извлечения его из кеша, но у вас нет класса для него на узле, где был вызван IgniteCache.get(). Вы можете развернуть класс или использовать IgniteCache.withKeepBinary() во избежание десериализации: https://apacheignite.readme.io/docs/binary-marshaller#binaryobject-cache-api

Смежные вопросы