У меня есть IMAP, ключ которого равен String
, а значение является производным от ArrayList
. Мне нужно запустить EntryProcessor
на ключ от этой карты. Также обратите внимание, что Employee
является POJO, который реализует интерфейс Serializable
.Необходимость создания пользовательских сериализаторов при использовании производных от ArrayList как значения в Hazelcast
Когда я выполнил приведенный ниже код, код печатает «Почему так!». и я получил ClassCastException
, в котором упоминалось, что java.util.ArrayList
не может быть отлит до Employees
в способе process()
ListValueEntryProcessor
, приведенном ниже.
Q1. Я узнал, что мне нужно добавить пользовательский сериализатор для моего типа (Employees
), чтобы его можно было сериализовать как объект Employees
, а не как объект ArrayList
. Я хотел бы знать, почему это обязательное дополнение «настраиваемого сериализатора» для встроенного типа, например, ArrayList
, чьи позиции также отмечены Serializable
?
public class Employees extends ArrayList implements Serializable
{
private static final long serialVersionUID = 1L;
/**
Constructs a new employees object
*/
public Employees()
{
super();
}
}
HazelcastInstance hazelcastInstance = HazelcastHelper.getHazelcastInstance();
IMap<String, Employees> empMap = hazelcastInstance.getMap("employeesMap");
Employees empList = new Employees();
Employee employee = new Employee();
empList.add(employee);
empMap.put("companyId", employees);
empMap.executeOnKey("companyId", new IncSalaryEntryProcessor());
public static class ListValueEntryProcessor extends AbstractEntryProcessor<String, Employees>
{
private static final long serialVersionUID = 1L;
@Override
public Object process(Entry<String, Employees> arg0)
{
if(! (arg0.getValue() instanceof Employees))
{
System.out.println("Why so !");
}
// ClassCastException thrown here.
Employees empList = arg0.getValue();
return true;
}
}
да, я уверен, что я использовал 'Java. util.ArrayList'. Существует связанный с этим вопрос, который подтверждает мое понимание. http://stackoverflow.com/questions/31537670/get-returns-a-value-of-the-superclass-arraylist-in-hazelcast-3-5 – Dinesh
можете ли вы отправить трассировку стека? – Sam
@Sam, Исключение происходит в строке 'Сотрудники empList = arg0.getValue();'. Это известный случай с ЛПЭ, см. Ссылку SO, опубликованную выше. – Dinesh