Archive

Archive for Październik 2009

JSF i EJB 3 – prosta aplikacja CRUD

30 października 2009 7 komentarzy

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

Ajax w GWT – pogodynka

24 października 2009 4 komentarze

Czas na pierwszy, konkretny wpis. Jako że chciałem mniej więcej zobaczyć GWT, wygrzebałem link z moich zakładek na delicious: Ajax for Java developers: Exploring the Google Web Toolkit

Wpis z 2006, kilka metod przestarzałych, no i oczywiście aplikacja nie działa z nową biblioteką HTTP Components.

Informacja: W tym i kolejnych artykułach nie będę się rozpisywał o technologii, szkoda czasu na bawienie się w tłumacza i przepisywanie tego co już jest napisane, więc w razie potrzeby będę odsyłał do innych artykułów.

Potrzebujemy:

Krótki tutorial na temat używania Netbeans i GWT można znaleźć tutaj

Tworzymy nowy projekt „Java WebApplication” na liście frameworków wybieramy „Google Web Toolkit”. Do bibliotek dodajemy paczki httpclient-4.0.jar , httpcore-4.0.1.jar oraz commons-logging-1.1.1.jar. Po przeczytaniu artykułu na którym bazuję idziemy dalej.

Na początek zmiany w kodzie mające na celu usunięcie przestarzałych metod [w klasie Weather].

Najważniejsze zmiany to kod odpowiedzialny za przechwytywanie zdarzeń.

Czyli naciśnięcie klawisza ENTER zmieniamy z

txBox.addKeyboardListener(new KeyboardListenerAdapter(){
    public void onKeyPress(Widget sender, char keyCode, int modifiers) {
        if ((keyCode == 13) && (modifiers == 0)) {
            validateAndSubmit();
        }
    }
});

na

 txBox.addKeyPressHandler(new KeyPressHandler() {
    public void onKeyPress(KeyPressEvent event) {
        if ((event.getCharCode() == KeyCodes.KEY_ENTER) && (event.isAnyModifierKeyDown() == false)) {
            validateAndSubmit();
        }
    }
});

wykrycie kliku lewego przycisku myszy z

 Button btn = new Button("Submit", new ClickListener() {
    public void onClick(Widget sender) {
       validateAndSubmit();
    }
});

na poniższy kod

 Button btn = new Button("Submit", new ClickHandler() {
    public void onClick(ClickEvent event) {
        validateAndSubmit();
    }
});

w kilku miejscach znajdziemy też

ucRadio.setChecked(true)
ucRadio.isChecked();

i zmieniamy odpowiednio na

ucRadio.setValue(true)
ucRadio.getValue();

Reszta zmian, to dostosowanie aplikacji do nowej wersji bibliotek Apache HTTP Components [v.4].
W klasie YahooWeatherServiceImpl zmieniamy ciało funkcji getWeatherRssDocument() z:

String url = getRequestUrl(zip, isCelsius);

 HttpClient client = new HttpClient();
 GetMethod get = new GetMethod(url);
 try {
    int resultCode = client.executeMethod(get);
    log.debug("HTTP response: "+resultCode);

    if (resultCode == 200) {
       InputStream in = get.getResponseBodyAsStream();

       DocumentBuilder builder = builderFactory.newDocumentBuilder();
       return builder.parse(in);
    } else {
         throw new IOException("HTTP Communication problem, response code: "+resultCode);
      }

 } finally {

 get.releaseConnection();
 }

na następujący kod:

String url = getRequestUrl(zip, isCelsius);

 HttpClient client = new DefaultHttpClient();
 HttpGet get = new HttpGet(url);
 try {

 HttpResponse response = (HttpResponse) client.execute(get);
 int resultCode = response.getStatusLine().getStatusCode();
 log.debug("HTTP response: " + resultCode);
 HttpEntity entity = response.getEntity();
 if (resultCode == HttpStatus.SC_OK) {
 InputStream in = entity.getContent();

 DocumentBuilder builder = builderFactory.newDocumentBuilder();
 return builder.parse(in);
 } else {
 throw new IOException("HTTP Communication problem, response code: " + resultCode);
 }

 } finally {
 // Process the data from the input stream.
 }

To wszystko. Aplikacja działa 🙂 pokazuje pogodę [przykładowy kod pocztowy 90210].
Źródło aplikacji dostępne jest tutaj

Jeśli ktoś ma jakieś pytania co i jak, lub sugestie odnośnie lepszych rozwiązań zapraszam do komentowania 🙂

coś na początek

23 października 2009 2 komentarze

Witaj 🙂

Pewnie odwiedzasz kolejny blog programisty i jesteś ciekaw co tu znajdziesz.

Szczerze powiedziawszy nie wiem.

Uczę się technologi Java EE 5, przerabiam różne tutoriale w sieci, sporo jest starych, sprzed kilku lat, i sprawiają mnóstwo problemów 😛 co rusz jakiś Exception, jakieś metody są przestarzałe. Autor czegoś nie dopowiedział.

Plan jest taki żeby pisać właśnie o starych artykułach, jak przez nie przechodziłem, co zmieniłem żeby było świeższe 😛 żeby działało.

Zobaczę co z tego wyjdzie, bo 24 godziny muszę jakoś podzielić na pracę, magisterkę, naukę JEE, życie prywatne no i może ten blog 🙂 Mam nadzieję że coś fajnego z tego wyjdzie. Może komuś pomogę, może ktoś pomoże mi jeśli jakieś brednie powypisuję 😛

W każdym razie zapraszam do subskrypcji 🙂

Pozdrawiam 🙂

Paweł Ryznar

Kategorie:Informacje Tagi: