Появилась необходимость перетащить разработку портлета с версии портала 6.0.6 на 6.1.
Соответственно, я все переделал под Liferay Plugins SDK 6.1( ServiseBuilder построил заного).
Задача портлета записать значение в таблицу после чего отобразить все записи в таблице вместе с последней добавленной.
MyEntity - единственный ентити который я использовал.
Портлет после переноса заработал, вот только появилась маленькая проблема:
При записи значения в таблицу оно там появляется, но NoteLocalServiceUtil.getMyEntityCount() показывает количество Entity до добавления (то есть на 1 меньше).
NoteLocalServiceUtil - физически содержит новую запись (NoteLocalServiceUtil.getMyEntitys - возвращает все, в том числе и последнюю добавленную ).
Получается, проблема только в getMyEntityCount().
Полез я туда внутрь и вот что нашел:
1
2public int countAll() throws SystemException {
3
4 Long count = (Long)FinderCacheUtil.getResult(FINDER_PATH_COUNT_ALL,
5 FINDER_ARGS_EMPTY, this);
6
7 if (count == null) {
8 Session session = null;
9
10 try {
11 session = openSession();
12
13 Query q = session.createQuery(_SQL_COUNT_NOTE);
14
15 count = (Long)q.uniqueResult();
16 }
17 catch (Exception e) {
18 throw processException(e);
19 }
20 finally {
21 if (count == null) {
22 count = Long.valueOf(0);
23 }
24
25 FinderCacheUtil.putResult(FINDER_PATH_COUNT_ALL,
26 FINDER_ARGS_EMPTY, count);
27
28 closeSession(session);
29 }
30 }
31
32 return count.intValue();
33 }
Как я понял, он делает запрос к СУБД если не находит нужных значений в кеше.
То есть, в моем случае, оно увидело что в кеше есть все что нужно и взяло старое значение оттуда, хотя оно давно изменилось .
Время поджимает и я решил проблему по простому:
Сначала очистил кэш :
1FinderCacheUtil.clearCache();
Только потом вызвал метод
1NoteLocalServiceUtil.getMyEntityCount()
Теперь все работает.
Незнаю правильно ли так делать, позже буду разбираться, но пока все работает как надо.