У меня есть реплицированный кластер, состоящий из нескольких узлов (до 30), на которых есть один процесс JAVA, доступ к кешу связности, и я использую метод map.invoke (ключ, агент) для создания и обновления агентов. Создание и обновление выполняются с установкой значения в методе процесса.Oracle coherence: есть ли способ принудительно вызвать вызов агента на конкретном узле?
Пример (агент представляет собой экземпляр ConcreteEntryProcessor, реализующего интерфейс EntryProcessor):
map.invoke(key, agent);
, которые ссылаются на следующий код объекта агента:
public Object process(Entry entry) {
if (entry.isPresent())
{
//UPDATE
... some stuff which compute the new entry value...
entry.setValue(newValue, true);
return newValue
}
else
{
//CREATION
..other stuff to determine the value...
entry.setValue(value, true);
return value;
}
}
я заметил, что если обновление производится узел, который создал агент, у меня хорошие показатели, в противном случае у меня есть снижение производительности, если обновление сделано из другого узла. Кажется, что существует определенный вид собственности на данные.
Есть ли способ принудительно выполнить действие агента на локальном узле или изменить право собственности на данные?
Что вы подразумеваете под «Я использую метод' map.invoke (key, agent) 'для создания и обновления агентов». «agent» в этом случае является экземпляром «EntryProcessor», который работает с входом в кэш, указанным «ключом», и я не понимаю, как вы создаете/обновляете агенты («EntryProcessor's») с помощью 'map.invoke'. Пожалуйста, покажите пример того, что вы пробовали до сих пор. –
Я изменил вопрос, чтобы ответить на ваш комментарий .. – Fernando