Strona główna > EJB, JavaEE 5, JSF > JSF i EJB 3 – prosta aplikacja CRUD

JSF i EJB 3 – prosta aplikacja CRUD

Tutorial do którego dzisiaj się odniosę to prosta aplikacja webowa wykonana w środowisku Netbeans z wykorzystaniem JSF, EJB 3 oraz bazy danych (autor wykorzystuje PostgreSQL, ja miałem pod ręką MySQL – ale w tym przypadku baza nie robi różnicy).

Tutorial składa się z trzech części: pierwsza druga i trzecia

U mnie problemy zaczęły się w trzeciej części, w drugim kroku „Add fields to the User Entity Bean”
Po dodaniu nowych pól do bazy i klasy aplikacja przestała działać – pojawił sie wyjątek, już nie pamiętam dokładnie co tam pisało 😛 ale jakiś problem z PU i odnalezieniem klasy UserDAOBean.
Jak sobie z tym poradziłem? W części webowej aplikacji, z gałęzi „Libraries” usunąłem JumpStartEjbJsf-ejb.jar i dodałem go jeszcze raz. Czy można inaczej, nie wiem. Jeśli ktoś ma pomysł proszę o podpowiedź.

Ale to nie koniec. Kolejny problem to kroki 3-7. Po dodaniu do gałęzi „Libraries” podanych bibliotek Apache Commons Lang, Apache Commons Validator oraz Jakarta Oro, i próbie dodania użytkownika z błędnym mejlem dostałem taki wyjątek


codjava.lang.NoClassDefFoundError: org/apache/commons/validator/EmailValidator

to samo z lang/StringUtils. Oczywiście wujek Google prawie zawsze pomaga, no i tutaj podpowiada żeby te pliki *jar wrzucić do katalogu /WEB-INF/lib – pomogło.

Jednak walidacja mejla nadal sypie wyjątkami, tym razem


javax.servlet.ServletException: Uncompilable source code.

Problem leży w klasie EmailValidator, nie ma takiej metody jak


htmlInputText.getLabel()

Oczywiście znowu google, przeglądanie API i taki przebłysk, skąd w gałęzi „Libraries” mam MyFaces? Okazuje się że podczas dodawania JSF do projektu z menu „Properties”, w zakładce „Libraries” opcja „Registered Libraries” domyślnie wybrane jest „Facelets 1.1.14 MyFaces”. W związku z tym usunąłem te pliki jar, i z menu kontekstowego „Add Library…” wybrałem JSF 1.2.

Co się okazuje, tu metoda getLabel() jest, i poprzedni problem również znika, tzn można usunąć katalog /lib z WEB-INF i wszystko ładnie działa.

Źródeł nie zamieszczam, w przytoczonym tutorialu źródła są pełne, więc przerabiajac go nic nam nie umknie 🙂
Mam nadzieję że nie ma jakiś strasznych herezji w tym artykule 😉 jeśli są proszę o zwrócenie mi uwagi.

Pozdrawiam

Reklamy
  1. chlebik
    8 listopada 2009 o 10:06

    Skad ja znam tego typu problemy. W ksiazkach/tutorialach wszystko jest piekne i ladne, zas jak czlowiek zaczyna klepac kod to podobne sytuacje sa na porzadku dziennym – jakies wyjatki, braki klas, cholera wie co jeszcze.

  2. Krzysztof
    27 Maj 2010 o 21:56

    Witam,
    mam pytanie jak skonfigurować połączenie z MySQL ? Autor kursu pisał o tym aby w komentarzach dodać tą prośbę jednak tamten kurs jest z 2007 , wiec małe szanse żeby mi udzielił odp. Z góry dziękuje. Pozdrawiam

  3. 28 Maj 2010 o 7:51

    @Krzysztof można na dwa sposoby:

    1. To zgodnie z tym co jest w pierwszym linku w kroku 6, w konsoli administratora (tylko z rolki wybrać MySQL)

    2. Można od razu w NetBeans, w zakładce „Services”, prawym przyciskiem na „Databases”. W otworzonym oknie należy ustawić opcje:
    name – MySQL(Connector/J driver)
    host – localhost (o ile korzystasz z lokalnej)
    port – 3306 (domyślny, chyba że podczas instalacji ustawiłeś inny)
    database, user name, password – to jest oczywiste
    dodatkowo zaznacz „remember password”

    a później już przy tworzeniu encji (krok 7) będziesz musiał dodać nowy „DataSource” na bazie utworzonego połączenia (wybiera się tylko połączenie z rolki i podajesz dowolną nazwę JNDI)

    Mam nadzieję że to Ci pomoże 🙂

  4. NKG
    21 lipca 2010 o 10:53

    Przeszłem jak na razie część pierwszą pod NetBeans 6.9, GlassFish 3.0.1 i PostgreSQL 8.3.11. Oto problemy jakie napotkałem i jak se z nimi poradziłem:

    Step 6: Set up a JDBC connection pool in Glassfish – pominąć. NetBeans ustawi to za nas.

    Step 7: Create the User Entity Bean – nie bedzie jdbc/test_db, trzeba utworzyc:
    Z rolki wybrać: New Data Source…
    INDI Name: jdbc/test_db
    I z rolki: New Database Connection…
    Potem w drugim oknie:
    Driver Name: PostgreSQL
    no i raszta chyba intuicyjna no i OK
    Potem Select schema: public

    Po zmianie klasy Users na User, jak ktoś przeoczył „11. Uncheck Generate Named Query Annotations for Persistent Fields.” to musi również pozmieniać wszystkie Users na User w NamedQuery. Refaktoryzator mi tego nie zrobił automatycznie.

    W @SequenceGenerator dodać: allocationSize=1:
    @SequenceGenerator(name=”users_seq_generator”, sequenceName=”users_user_id_seq”, allocationSize=1)

    Step 10: Configure page flow in faces-config.xml – nie miałem pliku faces-config.xml
    Trzeba go utworzyć przez New->Others… i potem JavaServer Faces->JSF Faces Configuration

    No i jakoś ruszyło 🙂 c.d.n.

  5. NKG
    21 lipca 2010 o 11:24

    W części drugiej bez problemów. Jedynie musiałem dodać:

    user_deleted
    /index.jsp

    pod:

    /index.jsp

    c.d.n.

  6. NKG
    21 lipca 2010 o 11:32

    Ehh, wywaliło tagi…
    W części drugiej bez problemów. Jedynie musiałem w pliku „faces-config.xml” dodać:

    <navigation-case>
    <from-outcome>user_deleted</from-outcome>
    <to-view-id>/index.jsp</to-view-id>
    </navigation-case>

    pod:

    <navigation-rule>
    <from-view-id>/index.jsp</from-view-id>

    Bo się brzydki komunikat pojawiał o braku „user_deleted”.

    c.d.n.

  7. NKG
    21 lipca 2010 o 11:59

    Trzecia część poszła bez problemów.

  1. No trackbacks yet.

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj / Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj / Zmień )

Zdjęcie na Google+

Komentujesz korzystając z konta Google+. Wyloguj / Zmień )

Connecting to %s

%d blogerów lubi to: