Mariusz Prowaźnik

o programowaniu w Javie, Scali i Clojure.


Wrażenia ze spotkania Łódź JUG

Tydzień temu miałem przyjemność uczestniczyć w spotkaniu JUG Łódź i chciałbym się podzielić wrażeniami.

Spotkanie odbyło się na nowoczesnej auli na DMCS'ie Politechniki Łódzkiej i w ramach niego Paweł Włodarski, programista z TomTom'a, przedstawił prezentację na temat projektu, w którego realizację jest zaangażowany, oraz wykorzystywanych przy tym projekcie technologii i narzędzi. Krótko omówił główny problem, polegający na tym, że pojedynczy komputer nie dysponuje wystarczającą mocą obliczeniową, aby obsłużyć duże ilości zapytań do map udostępnianych przez TomTom, co oznacza potrzebę rozproszenia obliczeń pomiędzy kilka maszyn. Opowiedział również nieco o Hadoop, GridGain, Spring Batch i ActiveMQ, które można użyć do rozwiązania tego problemu, oraz o tym dlaczego zdecydowali się na GridGain. Następnie uchylił nieco rąbka tajemnicy na temat tego jak organizowana jest praca zespołu programistów w TomTom'ie, czyli podzielił się doświadczeniami z pracą w Scrumie. Słuchaczy wyraźnie to zainteresowało, wywiązała się luźna dyskusja na temat prowadzenia projektów i pracy zespołu. W między czasie zostało wspomniane o podejściu do testowania i użyciu JUnit, DbUnit, EasyMock, o Sonarze za pomocą którego badana jest jakość kodu, o Liquibase służącym do wersjonowania bazy, o Spring AOP, Hibernate Validator, ale raczej pobieżnie. Czasami brakowało jakiegoś wizualnego przedstawienia tych narzędzi, w postaci rysunku, bądź diagramu.

Ogólnie prezentacja była ciekawa, można było dowiedzieć się jak wygląda realizacja projektu w innej firmie. Trochę zaskoczony byłem tym, że przyszło niewiele osób, raczej nie było głośno o tym spotkaniu. O kolejnych można dowiedzieć się z kalendarza spotkań.


ClassNotFoundException przy uruchamianiu projektu Spring+Maven+Tomcat w Eclipse

Podczas wdrażania na serwer Tomcat projektu stworzonego przy użyciu Spring'a i Maven'a w Eclipse można napotkać na problem objawiający się wyjątkiem:

SEVERE: Error configuring application listener of class org.springframework.web.context.ContextLoaderListener
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener 

Problem taki może być powodowany brakiem listenera uruchamiającego kontekst Springa w pliku web.xml;
<context-param>
 <param-name>contextConfigLocation</param-name>
 <param-value>/WEB-INF/Spring/applicationContext.xml</param-value>
</context-param>
 
<listener>
    <listener-class>
          org.springframework.web.context.ContextLoaderListener
    </listener-class>
</listener>

Jeśli to nie jest przyczyną problemu, to należy sprawdzić zawartość katalogu: {workspace}\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\{project}\WEB-INF\lib
Dodając serwer w środowisku Eclipse, tworzy on katalog w przestrzeni roboczej (workspace) i powinny się tam znaleźć wdrażane aplikacje webowe. Podany wyżej katalog powinien zawierać biblioteki projektu, jeśli nie, to jest to przyczyną problemu.

Rozwiązania są następujące:
1. Biblioteki te można skopiować ręcznie
2. Można również dodać wpis w Deployment Assembly we właściwościach projektu:
Należy dodać zależności Maven'a, oraz projekty zależne (o ile takie są).
3. Można też zainstalować dodatki integrujące wtyczkę M2Eclipse z WTP (Web Tools Platform). W tym celu trzeba poprzez Help->Install new software i używając adresu http://m2eclipse.sonatype.org/sites/m2e-extras wybrać Maven Integration for Eclipse WTP:
Po kliknięciu kliknąć prawym przyciskiem myszy na projekcie i wybraniu Maven->Update project configuration wpisy Deployment Assembly powinny się dodać automatycznie: