czwartek, listopada 6

szacowanie projektu - Był sobie król

chciałbym wam polecić pewien artykuł Był sobie król;

miłego czytania;

po przeczytaniu artykułu zrozumiecie zdanie:
nieraz te baba jagi dają w łapę :P

IoC, a prelekcja Sławka

witam;

no to jesteśmy po spotkaniu Lublin JUG które to odbyło się 4 listopada 2008 w godzinach 18-20; jak zwykle Sławek Sobótka w swój unikalny i porywający sposób wygłosił prelekcję pod tytułem: 'IoC/Dependency Injection na przykładzie Spring';
nie będę się rozpisywał na temat prelekcji, jeżeli chcecie się dowiedzieć coś więcej to odsyłam na blog autora art-of-software.blogspot.com, obiecał on umieścić małe streszczenie prelekcji; slajdy oraz kod z prezentacji można znaleźć na stronie LJUG;


ps. w momencie pisania posta streszczenia nie było, ale znając Sławka w najbliższym czasie powinno się pojawić;

środa, listopada 5

JSF po raz pierwszy

witam; udało się uruchomić aplikację jsf + maven + tomcat; budując aplikacje standalone i pracując z spring i paroma innymi framework'ami nadeszła pora na poznanie technologii webowych;

od czego by ty wystartować...
instalacja frameworków:
  • maven - najlepiej jest to opisane na oficjalnej stronie projektu
  • tomcat - tu podobnie jak wcześniej oficjalna strona jest jednym z najlepszych źródeł informacji

no to startujemy; tworzymy projekt z archetypu softeu-archetype-jsf lekko, modyfikowałem go do postaci:



by uruchomić bardzo prosty przykład należy stworzyć kilka plików; w niniejszym poście opiszę tylko znaczące elementy plików;

web.xml, zwany też plikiem konfiguracyjnym vel deskryptor wdrożenia:

<web-app>
<servlet>
  <servlet-name>Serwlet JavaServer Faces</servlet-name>
  <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
  <servlet-name>Serwlet JavaServer Faces</servlet-name>
  <url-pattern>*.faces</url-pattern>
</servlet-mapping>

<listener>
  <listener-class>com.sun.faces.config.GlassFishConfigureListener</listener-class>
</listener>

<welcome-file-list>
  <welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>


jednym z ciekawszych elementów w pliku jest servlet-mapping, zawiera on informację o mapowaniu adresów, strony JSF są przetwarzane przez specjalny serwlet, aby zapewnić poprawne aktywowanie tego serwletu w momencie żądania strony JSF; tomcat musi wiedzieć które to strony są JSF, w konfigruacji adresy będą się kończyły rozszerzeniem .faces;
parametr welcome-file-list zawiera informacje o tym jaka strona zostanie uruchomiona zaraz po tym jak zostanie wpisany adres projektu do przeglądarki;


plik faces-config.xml zawiera informacje konfiguracyjne dla części związanej z JSF;

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

<managed-bean>
  <managed-bean-name>myClass</managed-bean-name>
  <managed-bean-class>pl.arekborek.MyClass</managed-bean-class>
  <managed-bean-scope>session</managed-bean-scope>
</managed-bean>


nic prostszego tag <navigation-rule> zawiera informacje na temat zasad nawigacji, czyli z jakiego widoku po spełnieniu warunku, gdzie zostanie przeniesiony użytkownik;
tag <managed-bean> zawiera informacje na temat beanów jakie będą widoczne w aplikacji; dla każdego trzeba określić zasięg, klasę oraz nazwę pod jaką będzie widziany; w JSF zdefiniowano następujące zasięgi widoczności request, session, application, none

pozostaje jeszcze kilka plików do opisania, ale zawartość ich nie jest zbyt interesująca; jeżeli kogoś interesował by cały działający przykład proszę się odezwać do mnie na mila;

poniedziałek, listopada 3

SEVERE: Error configuring application listener

witam, postanowiłem zgłębić wiedzę na temat aplikacji webowych, dlatego też zabrałem się za budowanie aplikacji w oparciu o Apache Maven + JSF (implementacja od SUN'a) + Seam a to miało się uruchomić na Apache Tomcat w wersji 6.0.18;

na wstępie oczywiście schodki, po zbudowaniu aplikacji i zrobieniu pierwszego deploy'a otrzymałem piękny komunikat:
...
SEVERE: Error configuring application listener of class com.sun.faces.config.GlassFishConfigureListener
java.lang.ClassNotFoundException: com.sun.faces.config.GlassFishConfigureListener
...


oczywiście za googlałem i jest rozwiązanie:

dla JSF 1.1 w web.xml dodajemy:
<listener>
  <listener-class>
    com.sun.faces.config.ConfigureListener
  </listener-class>
</listener>


a dla JSF 1.2:
<listener>
  <listenerclass>
    com.sun.faces.config.GlassFishConfigureListener
  </listener-class>
</listener>


w następnym poście umieszczę bardzo prosty przykład uruchomienia kawałka kodu;

poniedziałek, października 13

Maven Repository Index

Czytając wiele tutoriali na temat Apache Maven napotkałem na informację, że jak chcę się dodać jakieś dependency należy: kliknąć prawym na projekt i wybrać Maven->Add Depecdency, oczywiście po wykonaniu tych czynności pojawia się okienko, wpisuje się kryteria wyszukiwania i nic okno puste;

Poszukałem rozwiązania i okazało się być banalne ale wszystko po kolei. Najpierw musimy dodać sobie widok Maven Indexes. Dodanie Maven Indexes odbywa się poprzez wybranie w menu głównym eclipse Window->Show View->Other, po kliknięciu w Other pojawia się okno.



W oknie wybieramy Maven->Maven Indexes i klikamy OK.

Na zakładce jaka się pojawiła klikamy prawym i wybieramy opcje Add Index, po wybraniu opcji pojawia się okienko.



w oknie są dane oficjalnego repo Mavena. Dodawanie indeksów jest bardzo proste. Należy w pole Repository URL wpisać jeden z poniższych adresów:

  • http://repo1.maven.org/maven2/ - Oficjalne Repo Maven

  • http://repository.jboss.org/maven2/ - Maven Repo od JBoss


następnie klikamy Retrive Eclipse sam automatycznie z repo pobierze nam Repository Id, na sam koniec pozostaje nam kliknąć OK.

Po wykonaniu tych czynności jak wybieramy Add Dependency mamy do dyspozycji sporą ilość jarków.

The Maven Integration requires that Eclipse be running in a JDK, ...

Jest początkującym użytkownikiem projektu Apache Maven i zaraz po zainstalowaniu otrzymywałem piękne okienko informacyjne.

Rys. 1.

a na konsoli Mavena pojawia się komunikat:

13.10.08 08:40:12 CEST: Eclipse is running in a JRE, but a JDK is required
Some Maven plugins may not work when importing projects or updating source folders.

oczywiście należy ustawić tak eclipse by uruchamiał się z jdk a nie jre. Ja u siebie zrobiłem to poprzez edycję liku z którego uruchamiam eclipse. Teraz mój link ma postać: E:\java\eclipse-SDK-3.4-win32\eclipse.exe -vm E:\java\jdk\sdk5u5\jdk\jre\bin\ oczywiście zmiany te też można osiągnąć poprzez edycje pliku eclipse.ini z katalogu głównego Eclipse.

Mam nadzieję, że za tak banalną informację nie dostane żadnego krytycznego komentarza :P.

wtorek, sierpnia 5

warstwowy model aplikacji

Postaram się w bardzo przystępny sposób przedstawić
warstwowy model aplikacji. Warstwy stanowią logiczny podział systemu. Każda z warstw posiada właściwy zakres odpowiedzialności, co gwarantuję, że będą od siebie oddzielone logicznie. Przy implementowaniu warstw musimy dopilnować by miały pomiędzy sobą bardzo luźne powiązania.

Model warstwowy aplikacji.
Po pięknym teoretycznym wstępie :P, napiszę kilka słów jak taki model osiągnąć. Proces budowania podziału przedstawię na przykładzie niepoprawnie zbudowanego podziału na warstwy. Na koniec przedstawię korzyści jakie płyną z podziału warstwowego. Wysiłek jaki trzeba włożyć w programowanie nie powinien być tylko poniesiony dla faktu posiadania modelu warstwowego. Wykonanie wszystkich czynności oraz za modelowanie aplikacji przynosi bardzo wiele wymiernych korzyści.


Refaktoryzacja architektury.
Należy przenieść kod dostępu do danych bliżej rzeczywistego źródła danych, a logikę przetwarzania z warstwy klienta do warstwy biznesowej. W drugim kroku zostanie przedstawiony model poprawnego rozbicia na warstwy. Na koniec refaktoryzacji przeprowadzone zostanie rozbicie w warstwie biznesowej na komponenty sesyjne zajmujące się logiką biznesową, oraz na komponenty entity stanowiące model trwałych transakcyjnych obiektów.


Podział taki zapewnia bardzo wyraźne rozdzielenie, a w przyszłości zagwarantuje jak największą skalowalność, elastyczność, bezpieczeństwo...
W miarę upływu czasu projekt musi sobie coraz lepiej radzić z elementami związanymi z trwałością danych, transakcjami i skalowalnością usług. Podejście gwarantuje łatwość osiągnięcia tego założenia:


Funkcje potrzebne do zbudowani modelu warstwowego:
  • zbudowanie GUI w oparciu o model MVC
  • podział logiki na niezależne fragmenty
  • ukrycie szczegółów warstwy prezentacji przed warstwą biznesową
  • usunięcie konwersji z widoku
  • wydzielenie kodu dostępu do danych z warstwy prezentacji (DAO)
  • oddzielenie przetwarzania prezentacyjnego od przetwarzania biznesowego (Business Delegate), zastosowania logiki biznesowej pozwoli zastosować usługi nie tylko w warstwie prezentacji, podejście takie gwarantuje dużo większą re - używalność kodu biznesowego
  • redukcja komunikacji pomiędzy komponentami
  • przy takim układzie bardzo ułatwione jest zarządzanie deklaracyjne transakcjami



do poczytania.

piątek, czerwca 27

wzorzec do wzorców :P

Witam, postaram się w skrócie napisać jaka formę będą przyjmowały opisywane wzorce, niezły ze mnie maniak właśnie przedstawię wzorzec, przy pomocy którego będę opisywał wzorce :P

A o to i struktura składająca się z nazwy, oraz 10 akapitów:


Example

Cel, zawiera krótki opis funkcji wzorca. Inaczej mówiąc, jest to definicja bardziej lub mniej formalna;

Motywacja, zawiera opis pewnej sytuacji lub problemu, oraz sposób rozwiązania; czyli kawałek tekstu umoralniającego który ma przekonać czytelnika by zapamiętał wzorzec;

Zastosowanie, zawiera bardziej szczegółowe omówienie sytuacji, w których wzorzec można zastosować.

Struktura, zawiera diagram ilustrujący związki między klasami wzorca, jak ktoś lubi to mu się spodoba ten kawałek UML'a.

Uczestnicy, zawiera klasy i obiekty tworzące dany wzorzec. Tu znajdziemy opis ich zakresów odpowiedzialności i ról.

Współpraca, zawiera omówienie współpracy obiektów lub/i klas wzorca.

Konsekwencje, omawia potencjalne skutki użycia wzorca – pożądane i niepożądane.

Implementacja, to co lubię najbardziej kawałek kodu;

Wcześniejsze zastosowania, trochę to ambitne , ale jak będę wiedział o zastosowaniu danego wzorca postaram się to napisać;

Powiązane wzorce, opis związków i zależności między opisanym właśnie wzorcem, a innymi wzorcami; coś tu napiszę jeśli tylko będę świadom tych związków;


No to mamy wzorzec dla wzorców;

piątek, czerwca 6

edytowany I-szy post

Coś na poważnie, chyba czas rozpocząć pisanie czegoś poważniejszego; miał to być blog o JavaEE, frameworkach apache, jboss, ale nie będzie, pierwsze kilkanaście postów będzie opisywało wzorce projektowe;

Z wzorcami wiąże się bardzo ciekawa historia, gdy pierwszy raz miałem okazje opowiadać o nich na uczelni słuchało mnie 6 osób, jedyny komentarz jaki dostałem na koniec brzmiał: "stary ale kat"; nie wiem co mam o tym sądzić, ale chyba był pozytywny :P

Postaram sie poopowiadać o wzorcach rozpocznę od mniej ambitnych lub bardziej będzie to zależało od tego kto będzie czytał tekst...

... mam nadzieję że nikt nie napisze, ale kat :P