19 lipca 2010

Clojure w aplikacji webowej Java EE 6 z Eclipse Helios, Apache Maven i Apache Tomcat

Ufff, udało się! Ależ radości przyniosło mi uruchomienie aplikacji webowej Java EE 6 z logiką napisaną w...Clojure! A później to spisywanie - tego najbardziej nie lubię, kiedy każdy szczegół ma znaczenie i trzeba przerabiać materiał kilkakrotnie. Chciałoby się to po prostu nagrać, zamiast spisywać (ale to po urlopie).

Właśnie ukończyłem prace nad nowym artykułem w moim Wiki - Clojure w aplikacji webowej Java EE 6 z Eclipse Helios, Apache Maven i Apache Tomcat, który przedstawia moje ostatnie doświadczenia z "produkcyjnym" wykorzystaniem Clojure z JEE6. Do całości dorzuciłem jeszcze integrację Eclipse Helios z Apache Maven (przez wtyczkę m2eclipse) i counterclockwise do obsługi Clojure. Powinno się podobać.

Nie przeciągając dłużej (i bez zbytniego zachwalania treści artykułu :-)) wierzę, że każdy znajdzie tam coś dla siebie. Niektórzy poznają Eclipse i jego środowisko (aż dwie wtyczki użyte), niektórzy samo uruchomienie aplikacji JEE6, a inni Clojure z Javą. Zapraszam do lektury i komentowania.

Jeszcze jutro recenzja książki o Springu i w nadchodzący czwartek znikam na długooczekiwany urlop. Jeszcze tylko 2 dni!

4 komentarze:

  1. A teraz jak zrobić to samo w samym Clojure i bez serwera aplikacyjnego. Startujemy od zera -- nie trzeba mieć nawet Clojure zainstalowanego, wystarczy samo JRE; zakładam, że pracujemy na Linuksie lub OS X (na Windows jest trudniej).

    1. Ściągamy Leiningena (to taka Clojurowa nakładka na Maven):

    wget http://github.com/technomancy/leiningen/raw/stable/bin/lein
    chmod 755 lein
    sudo cp lein /usr/bin
    lein self-install

    Leiningen sam dociągnął wymagane przez siebie części w Clojure i wrzucił je do naszego repozytorium Maven.

    2. Wchodzimy do naszego katalogu z projektami. Wydajemy polecenie:

    lein new witaj

    Pojawia się katalog "witaj" z inicjalną strukturą projektu Clojurowego.

    3. Otwieramy w naszym ulubionym edytorze tekstu plik witaj/project.clj. Dodajemy tam zależność od biblioteki Ring; plik powinien wyglądać tak:

    (defproject witaj "1.0"
    :main witaj.core
    :dependencies [[org.clojure/clojure "1.2.0-beta1"]
    [org.clojure/clojure-contrib "1.2.0-beta1"]
    [ring "0.2.5"]])

    Ring to taka funkcyjna acz dość niskopoziomowa abstrakcja nad protokołem HTTP.

    4. Otwieramy w naszym ulubionym edytorze plik witaj/src/witaj/core.clj. Piszemy tam:

    (ns witaj.core
    (:gen-class)
    (:use ring.adapter.jetty))

    (defn handler [req]
    {:status 200
    :headers {"Content-Type" "text/html; charset=UTF-8"}
    :body "Cześć, tu mówi Clojure"})

    (defn -main []
    (run-jetty #'handler {:port 8080}))

    Najważniejszy tu jest handler. Zwraca on Clojurową mapę, w której poszczególne pary klucz-wartość odpowiadają częściom odpowiedzi HTTP (więcej o tym, co może się pojawiać w żądaniach i odpowiedziach, można przeczytać w specyfikacji Ring: http://github.com/mmcgrana/ring/blob/master/SPEC).

    5. Wchodzimy do katalogu witaj i wydajemy magiczne polecenie:

    lein uberjar

    Teraz czekamy cierpliwie, aż Maven wykona swoją magię.

    6. Startujemy naszą aplikację:

    java -jar witaj-1.0-standalone.jar

    Wchodzimy na http://localhost:8080 i cieszymy się naszą pierwszą webaplikacją w Clojure.

    PT Czytelnikom pozostawiam porównanie prostoty obu podejść :-)

    OdpowiedzUsuń
  2. @wujek.srujek: no ja w Emacsie, ale jak wolisz notatnik to nic Cię nie powstrzymuje.

    OdpowiedzUsuń
  3. Myślę, że integracja Clojure z Eclipse i JEE jest bardzo ważna. Tak samo ten samouczek.

    Eclipse to w tym momencie najlepszy sposób, żeby przemycić Clojure do projektów w firmach ;)

    OdpowiedzUsuń