Java on tarpeettoman monimutkaisuuden linnake
Jouduin taas pitkästä aikaa tekemään asioita Tomcatilla ja servleteillä eli konfiguroimaan Javaa. Voi hyvänen aika että se on edelleen hankalaa ja monimutkaista. Sadoittain erilaisia propertyjä, classpatheja, jarreja ja xml-tiedostoja, tolkuttoman pitkiä error traceja.
Java-ihmisillä ei ilmeisesti koskaan käy edes mielessä, että arkkitehtuureja voisi yrittää yksinkertaistaa. Tämä on toisaalta loogista, koska he ovat lähinnä konsultteja, jotka saavat palkkion monimutkaisuuden luomisesta ja ymmärtämisestä.
Omassa tapauksessani piti tehdä simppeli servletti, joka kutsuu toisaalla olevaa SOAP-rajapintaa ja tulostaa sen palauttaman arvon. Käytännössä tämä edellytti ainakin seuraavia asioita (serverinä Ubuntu 9.04):
- Tomcatin, Axis-kirjaston ja mod_jk:n asentaminen.
- Mod_jk:n konfiguroiminen Apachen direktiiveillä.
- Erillisen (turhan) workers.properties-tiedoston konfiguroiminen.
- Tomcast-sovelluksen context-asetusten konfiguroiminen.
- Tomcast-sovelluksen web.xml-asetusten konfiguroiminen (pitää määritellä servlet-name, servlet-description, url-mapping jne.)
- Oikean classpathin ja komentorivin arpominen WSDL2Java-työkalulle (aina yksi puuttuva jarri lisäten ja kilometrin error tracea tulkiten).
- SOAP-stubin generoiminen WSDL2Javalla.
- Pohtiminen, mitä WSDL2Javan generoimasta neljästä luokasta (PortType, Service, ServiceLocator, SOAPStub) pitää oikeasti kutsua.
- Servletin koodaaminen Javalla (tämä oli kaikkein yksinkertaisin osuus).
- Ihmettely, miksi SOAP-stubin käyttäminen aiheuttaa Class Not Found -virheilmoituksen Tomcatissa (joka tietenkin vielä vaihtelee ja antaa hieman erilaisia ilmoituksia välillä).
- Tomcatin permissioiden konfiguroiminen policy.d:hen siten, että servlet saa AllPermissionit, tarvittavat FilePermissionit ja RuntimePermissionin getClassLoaderiin. Ilman ei Axis toimi.
Voi tietysti väittää, että kaiken tämän osaaminen on rautaista ammattitaitoa. Minä taas väitän, että se on pelkkää puupäisyyttä. Käyttämällä SOAPin sijasta REST-rajapintaa tämän kaiken voisi tehdä vaikkapa Pythonilla tai PHP:llä yhdellä ohjelmarivillä, joka tekee yhden HTTP-kutsun.
Ratkaisun tulisi aina olla yhtä yksinkertainen kuin ongelmakin on.
4 Comments
Saman homman olisi tehnyt Microsoftin ASP.NET tekniikoilla muutamalla napin painalluksella. Olen aina ihmetellytkin miksi Java-miehellä nousee karvat pystyyn kun sanoo, että tehdään vain webservice ja keskustellaan sen välityksellä. Java-mies saa tehdä tuon sinun esittämän hirveän listan toimintoja kun taas ASP.NET-kaveri painaa vain New -> Web Service tai valitsee Add Web Reference ja kirjoittaa WSDL:n osoitteen.
En ole ihan vakuuttunut, että tuo Microsoft-puolikaan on niin yksinkertainen.. Käsittääkseni siellä taas täytyy viritellä web-projecteja ja IISsiä ja konffailla Visual Studiota puhumaan oikean IISin kanssa jne.
Itse kannatan edelleenkin PHP:n/Pythonin kaltaista yksinkertaisuutta: lätkäistään vain fileet paikoilleen webroottiin ja kaikki toimii saman tien. Ja kommunikoidaan HTTP:llä/RESTillä, parsitaan vastaukset JSONina, niin koko hommaan tarvii vain muutaman rivin koodia.
Ehkä voisit taas hieman tutustua asioihin enemmän. Se että "käsittääksesi" asiat ovat jotenkin ei tarkoita että ne ovat.
Ei, sinun ei tarvitse viritellä web-projekteja (mutta miksi et tekisi projektia jos kerran teet jotain oikeaa?). Ei, sinun ei tarvitse konffata IISiä. Ja ei, sinun ei tarvitse konffata Visual Studiota, tai käyttää Visual Studiota ollenkaan.
Itse kannatan ASP.NETin kaltaista yksinkertaisuutta: lätkäistään vaan fileet paikoilleen webroottiin ja kaikki toimii saman tien. Ja kommunikoidaan sillä rajapinnalla joka on järkevintä (esimerkiksi voit samalla koodilla kommunikoida RESTillä ja SOAPilla ja melkolailla millä tahansa muullakin tavalla). Ja hommaan tarvii vain muutaman rivin koodia.
Niin, ja kaikki käännetään etukäteen, joten virheiden määrä pienenee (toisin kuin esim PHP:llä), kaikki on nätisti tyypitettyä (taas vähemmän virheitä), järjestelmä parsii sinun puolestasi tyypit ja tarkistaa niiden oikeellisuuden (senkin saat kai pariin riviin koodia?), koodi ajetaan natiivina, joten tehokkuus on parempi jne jne.
Että kummallakos se olikaan yksinkertaisempaa? :)
Tiedän, että ASP.NET-sovelluksen voi koodata ilman web-projekteja. Aiempi kommentoija kuitenkin viittasi nimenomaan siihen, että muutamalla napinpainalluksella voi generoida tällaisen web-projektin. Jos sen jälkeen joutuu korjailemaan tai jatkokehittämään tällaista projektia jälkeenpäin, pitää todellakin asetella kaikki Visual Studion asetukset ja IISit kohdalleen.
You can use Markdown to format your comment:
Separate paragraphs in your text with two newlines