powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / EJB Stateless Bean и транзакции
6 сообщений из 6, страница 1 из 1
EJB Stateless Bean и транзакции
    #34408730
yanich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток.
Помогите разобраться и ткните пальцем куда надо...
Есть Entity:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
@Entity
@NamedQuery(name = "Man.findAll", query = "select o from Man o")
@Table(name = "MAN")
 public   class  Man  implements  Serializable {
    @Column(nullable = false)
     private   Long  age;
    @Id
    @Column(nullable = false)
     private   Long  id;
     private  String name;

    ... Ну и Геттеры и сеттеры соответственно
}

Есть Stateless Session Bean:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
@Stateless(name="SessionFacade")
 public   class  SessionFacadeBean  implements  SessionFacade, SessionFacadeLocal {
    @PersistenceContext(unitName="Model")
     private  EntityManager em;

     public  SessionFacadeBean() {
    }

    /** <code>select o from Man o</code> */
     public  List<Man> queryManFindAll() {
        List<Man> lst = em.createNamedQuery("Man.findAll").getResultList();
         return  lst;
    }
}

и есть клиент этого бина:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
 public   class  SessionFacadeClient {
     public   static   void  main(String [] args) {
         try  {
             final  Context context = getInitialContext();
            SessionFacade sessionFacade = (SessionFacade)context.lookup("SessionFacade");
            List<Man> l = sessionFacade.queryManFindAll();
             for  (Man m: l) 
                System.out.println(m.getId() + " " + m.getAge() + " " + m.getName());
        }  catch  (Exception ex) {
            ex.printStackTrace();
        }
    }

     private   static  Context getInitialContext()  throws  NamingException {
         return   new  InitialContext();
    }
}


Все работает нормально.
Но есть одна тонкость:
Проделываю следующую последовательность действий:
1) Запускаю Session bean
2) Запускаю клиента - выборку делает правильно
3) Ручками в базе изменяю строку
4) Запускаю клиента - выборка получается что и в случае 2. То есть изменения внесенные другими прилижениями не видны.

Насколько я понимаю, что из-за того что выбока em-ом делается из PersistanceContext, то есть при второй выборке в базу никто не лезит. Так вот вопрос - правильно ли я думаю и как сделать так, чтобы выбирались текущие значения из базы данных?
...
Рейтинг: 0 / 0
EJB Stateless Bean и транзакции
    #34410232
expp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
после 3) Ручками в базе изменяю строку
скажи commit
...
Рейтинг: 0 / 0
EJB Stateless Bean и транзакции
    #34410397
yanich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exppпосле 3) Ручками в базе изменяю строку
скажи commit

Ну естественно сказал - дело не в базе, дело именно в том что выборка идет из контекста приложения !!!
...
Рейтинг: 0 / 0
EJB Stateless Bean и транзакции
    #34413253
expp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
непохоже. бин не Statefull. PC не экстендится. Разве только кэш какой то стоит. но странно очень
...
Рейтинг: 0 / 0
EJB Stateless Bean и транзакции
    #34426548
yanich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неужели никто не поможет советом? - ну очень надо...
По поводу кеша - что за кеш и где он конфигурится ?
...
Рейтинг: 0 / 0
EJB Stateless Bean и транзакции
    #34427440
yanich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтож - порыскал и нашел-таки ответ...
Действиетльно из-за кеша JPA-провайдера.
Надо заменить
Код: plaintext
1.
@NamedQuery(name = "Man.findAll", query = "select o from Man o")
на
Код: plaintext
1.
@NamedQuery(name = "Man.findAll", query = "select o from Man o", hints = {@QueryHint(name = "toplink.refresh", value = "true")})

Надеюсь в будущем кому-ть поможет :-)
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / EJB Stateless Bean и транзакции
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]