2015-11-01 2 views
1

Я использую карту с Hazelcast:Hazelcast: NotSerializableException

// Когда я делаю:

map.put(gen.newId(), myObject); 

MyObject является очень сложным объектом и не реализует Serializable.

Я думал, что помещение конфигурации, как показано ниже было достаточно, не имея для реализации сериализации:

<map name="myMap"> 
    <in-memory-format>OBJECT</in-memory-format> 
</map> 

Док Hazelcast говорит: http://docs.hazelcast.org/docs/3.5/manual/html/entryprocessor.html «Когда он хранится в качестве объекта (формат объекта), то процессор ввода применяется непосредственно к объекту. В этом случае не выполняется сериализация или десериализация «

Спасибо за любое предложение.

ответ

4

К сожалению, объект всегда будет десериализован при вызове map.put, независимо от формата памяти. Это происходит потому, что обычно есть резервные копии, и им также необходимо получить копию. Поэтому в этом случае ваш единственный выход - сделать ваш объект «сериализуемым». Вы можете использовать сериализацию Java, но вы также можете полагаться на что-то вроде Kryo для обработки сложных графов объектов.

+1

Это то, от чего я был отпущен. Thx для вашего ответа ... – Zitun

+0

Другая причина в том, что Hazelcast в настоящее время не знает разницы между изменяемым и неизменяемым объектом. Поэтому представьте, что мы будем отслеживать ссылку на ваш объект, а теперь объект потенциально может быть разделен между потоками. Затем вы запускаете всевозможные неприятные условия гонки и проблемы с видимостью. Кроме того, представьте себе, что вы делаете некоторую логику своего общего объекта, и вы меняете некоторые поля и, в конечном счете, запускаете какое-то исключение. Теперь ваш объект, поскольку он является общим, частично изменен и приводит к постоянно противоречивому представлению. – pveentjer

1

Я думаю, вы могли бы также использовать более эффективные решения для конкретных лесных орехов. Here - сравнительная таблица решений. Portable работает для меня, но это боль в заднице для реализации и поддержки больших объектов. DataSerializable - это более простое решение и очень похоже на Parcelable от Android.

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

  • Нет связанных вопросов^_^