Operacje w managedbeanie JSF.

0

Witam. Pisze dynamiczną aplikację internetową i mam pewien problem. Mianowicie posiadam 4 klasy zmapowane z tabel w bazie danych opisujące użytkowników, którzy mogą się logować do systemu. I mam taką wątpliwość co do implementacji metody odpowiedzialnej za logowanie. Stworzyłem JSF managedBeana i tam właśnie umieściłem metodę odpowiedzialną za logowanie, który wygląda następująco.

@ManagedBean
@RequestScoped
public class LoginMB {
    
    private static final String PERSISTENCE_UNIT_NAME = "ePrzychodnia-ejbPU";
    private static EntityManagerFactory factory;
    private String login;
    private String password;         

    /**
     * Creates a new instance of LoginMB
     */
    public LoginMB() {
    }

    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
    
    public String validate() {
        factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
        EntityManager em = factory.createEntityManager();
        Query q = em.createQuery("SELECT a FROM Admin a WHERE a.personalId = :login AND a.password = :password");
        q.setParameter("login", login);
        q.setParameter("password", password);
        try {
            Admin admin = (Admin)q.getSingleResult();
            if (login.equals(admin.getPersonalId()) && password.equals(admin.getPassword())) {
                return "admin";
            }
        } catch (Exception e) {
            System.out.println("Błąd: " + e.getMessage());
            return "failed";
        }
        return "failed";
    }
} 

Rozchodzi mi się o tą metodę validate. Wszystko oczywiści działa tak jak tego chciałem, ale wiem, że w JSF tworzymy wygląda naszej aplikacji i nie powinno się tam umieszczać skomplikowanych obliczeń takich jak np. operacje na bazie danych. Jednak zupełnie nie wiem gdzie takowy kod miałbym umieścić? Poza tym mam klasy reprezentujące te 4 typy użytkowników mapujące tabele w bazie danych. Klasy DAO i fasady dla każdego typu użytkownika. Więc gdzie niby miałbym umieścić ten kod jeśli nie w managedBeanie? Tworzyć osobną klasę, w które zaimplementuję tą metodę a w managedBeani stworzyć zmienną reprezentująca tę klasę? Czy jak to się powinno robić?

Mam jeszcze pytanie dotyczące metody logującej validate umieściłem tam tylko sprawdzanie tabeli admin w poszukiwaniu danego użytkownika. Jednak będą musiał powielić ten kod dla 3 pozostałych tabel, który będzie zwracał w postaci Stringa typ danego użytkownika. Czy takie podejście jest prawidłowe i ta metoda jest w miarę sensownie napisana? Czy można to jakoś inaczej zrealizować? Ciężko coś znaleźć tego typu w internecie. Wszystko to raczej proste przykłady z logowaniem na sztywno.

0
  1. Struktura: rzeczywiście w większość projektów w java wydziela się warstwy DAO (czy też nowe trendy repository). ALe według klasycznego podejścia beany JSF powinny komunikować się z warstwą serwisów np. o DTO a ta z warstwa DAO już za pomocą encji. Ale to wszystko nic innego jak strukutyzacja kodu równie dobrze możęsz sobie wydzielić bean JSF'owego który posiada logikę dostępu do bazy danych.....

Według mnie jeżęli nie czujesz potrzeby wydzielania warstw to tego nie rób....ludzie z Rails śmieją się z nas javowców.......

  1. Oczywiście możesz wytworzyć metodę parametryzowaną która oprócz login i hasła przyjmie nazwę obiekt na rzecz którego należy wyonać zapytanie

P.S w bardzo dizwny sposób korzystać z EntityMangera....tak się nie robi

1 użytkowników online, w tym zalogowanych: 0, gości: 1