EJB Stateless Bean и JPA-выборка
От: yanich  
Дата: 22.03.07 11:06
Оценка:
Доброго времени суток.
Помогите разобраться и ткните пальцем куда надо...
Есть Entity:


@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:


@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;
    }
}




и есть клиент этого бина:


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, то есть при второй выборке в базу никто не лезит. Так вот вопрос — правильно ли я думаю и как сделать так, чтобы выбирались текущие значения из базы данных?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.