Обновление типа объекта Значение записи в EntryProcessor внутри транзакции не работает - PullRequest
0 голосов
/ 21 января 2019

Я работаю на зажигать 2.7.0

У меня есть тип значения, как показано ниже

public class Entity {
 String id;
 String value;
 Date date;
}

затем взаимодействуйте с кешем, как показано ниже

try (Transaction tx =
 ignite.transactions().txStart(TransactionConcurrency.PESSIMISTIC,TransactionIsolation.SERIALIZABLE)) {
 cache1.invoke("k6", new EntryProcessor<String, Entity, Object>() {
     @Override     
     public Object process(MutableEntry<String, Entity> mutableEntry, Object... objects) throws EntryProcessorException {
         Entity e = mutableEntry.getValue();
         e.setId("hello3");
         e.setValue("v3");
         mutableEntry.setValue(e);
         return null;
     }
 });
 tx.commit();
}

Но значение записи не изменяется после фиксации.

Если я кодирую, как показано ниже, значение записи изменится после фиксации.

try (Transaction tx =
   ignite.transactions().txStart(TransactionConcurrency.PESSIMISTIC,TransactionIsolation.SERIALIZABLE)) {
   cache1.invoke("k6", new EntryProcessor<String, Entity, Object>() {
       @Override     
       public Object process(MutableEntry<String, Entity> mutableEntry, Object... objects) throws EntryProcessorException {
           mutableEntry.setValue(new Entity("test2", "a2", new Date()));
           return null;
       }
   });
   tx.commit();
}

Я обнаружил, что изменения в записи не вступят в силу после принятия, когда вызывается mutableEntry.getValue ().

Как я могу решить эту проблему?

Большое спасибо.

...