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!
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).
OdpowiedzUsuń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ść :-)
Tak - i dalej piszemy projekt w notepad?
OdpowiedzUsuń@wujek.srujek: no ja w Emacsie, ale jak wolisz notatnik to nic Cię nie powstrzymuje.
OdpowiedzUsuńMyślę, że integracja Clojure z Eclipse i JEE jest bardzo ważna. Tak samo ten samouczek.
OdpowiedzUsuńEclipse to w tym momencie najlepszy sposób, żeby przemycić Clojure do projektów w firmach ;)