Visualisoi EE riippuvuudet (CDI ja EJB)

Visuaalisena ihmisenä tykkään nähdä asioita eri vinkkeleistä ja saada sitä metriikkaa. Hiljattain heräsi projektissa mielenkiinto nähdä miten riippuvuuden olioiden ja komponenttien välillä menevät, missä kohden niitä voi yksinkertaistaa ja siistiä.

Mukavasti juuri törmäsin kirjoitukseen aiheesta ja löysin palikan joka vielä kaiken lisäksi toimii mahtavasti. Asialla taas kerran vanha kunnon Adam Bien 😉

Temppu on hyvin simppeli: Lisää tämä Maven pom.xml tiedostoon:

            <plugin>
                <groupId>de.struller-baumann</groupId>
                <artifactId>visualee</artifactId>
                <version>0.25</version>
                <configuration>
                    <outputdirectory>visualee</outputdirectory>
                </configuration>
                <executions>
                    <execution>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>visualize</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

Ja tadaa! Sieltä ne riippuvuudet piirtyvät buildin ohessa, projektin alle alikansioon /visualee. Sinne tulee HTML+JavaScript+JSON paketti joka on niin paljon vaikuttavampi aidolle projektille ja livenä kuin kuvana – että kannattaa ihan kokeilla itse.

Tuossa kuitenkin maistiaisia:

http://www.struller-baumann.de/visualee/

Kuva

Pikkasen paremmin saa selkoa kun ottaa kiinni palikasta joka kiinnostaa, ja vaikka järjestelee niitä vähän ruudulla – tai käyttää hakutoimintoa.

visualee2

Vinkki: Paikallisesti käytettynä valitettavasti eivät toimi ilman virityksiä Chromessa, mutta esim. Firefox näyttää hienosti myös lokaalina omalta levyltä nämä. Työkalun sivuilla on lisätietoa näistä pikku virityksistä.

 

Lähde:

http://www.adam-bien.com/roller/abien/entry/visualize_your_javaee_dependencies_in

https://github.com/Thomas-S-B/visualee

JavaOne 2013 loppuraportti – executive summary (RasPI, IoT, Lambdas)

Jälleen oli työntäyteinen viikko San Franciscossa – yllättävänä bonuksena aurinkokin pilkisteli hieman. Konferenssi oli Javaa työkseen käyttäville suunnattu – paikalla oli Java kehittäjiä/koodaajia runsain mitoin, mutta samoin myös testaajia, projektinvetäjiä, konsultteja, ylläpitäjiä, ja jonkun verran myös business-puolen ihmisiä. Aurinkoa tuli nähtyä vaikka erityisen lämmintä ei ollutkaan, pääosin kuitenkin aika kului pimeissä konferenssihuoneissa. Yli 20 000 osallistijaa – yli  400 esitystä viikon ajalle jaettuna – valintoja oli tehtävä. Sykettä ja suoranaista innostusta oli taas ilmassa. Wired raportoi Javan renessanssista – tai uudesta tulemisesta. Twitter toteaa miten Java on heille ainoa mahdollinen alusta (Hylättyään Rubyn aikoja sitten Javan hyväksi).

2013-09-22 22.14.05

Ja tähän se yhteenvedon yhteenveto: Uudet versiot Java SE 8 ja Java EE 7 ovat tärkeitä ja merkittäviä päivityksiä. Java alustana elää ja voi vahvasti. Se on siirtynyt entistäkin enemmän avoimen lähdekoodin maailmaan. Jo pitkään hypetetty pilvi on saapunut, se on jo täällä. Se tarjoaa uusia mahdollisuuksia ja Java on nihiin valmis. Nykypäivän ja tulevaisuuden älykkäät päätelaitteet mukaanlukien mobiililaitteet, mutta myös autot ja älykodit kytketään serveripäähän, tyypillisesti HTML5+JavaScript tekniikoin – mutta tilanteen mukaan millä vain. Vuoden 2014 trendejä ovat em ohella Lambdat ja Websocketit, sekä HTML5 ja Javascript. Niitä voivat käyttää jo nyt Glassfish palvelimien käyttäjät (Kuten Tieturi), mutta ensi vuonna myös muilla palvelimilla homma hoituu. Ja aina voi vuokrata pilven päältä viipaleen tilaa itselleen. Lambdat ovat Java-kielen tasolla huomattavasti suurempi muutos kuin esim. Generics aikoinaan.

Yksi piiloteema on myös alustan yhdenmukaistuminen: Java ME 8 + Java SE 8 yhdistyminen lähemmäs toisiaan, jatkuu versiossa 9 toivon mukaan Project Jigsawn kera.  Jatkossa on tarkoitus synkronoida myös SE ja EE julkaisuja enemmän samaan tahtiin. Erittäin mielenkiintoinen huomio taas siitä mitä ei ole: Yhden yhtä Java ME demoa puhelimessa en nähnyt, eli alusta on karkaamassa jo kansoitetusta puhelin ja tablet alustasta (niitä hoidetaan HTML5+Javascript mallilla tai sitten vain natiivikoodauksella ja RESTful web serviceilä) – kohden todellisia sulautettuja järjestelmiä: Kulunhallintaa, kapasiteetin hallintaa, käytön hallintaa, kunnon hallintaa.

Mitä uutta Javasta?

Varsinaiset uutuudet olivat tietysti Javan uudet ja tulevat versiot. Tärkein niistä oli Java EE 7 palvelinstandardi, joka julkaistiin jo viime kesänä ja alkaa nyt valumaan pikkuhiljaa Java-serveriympäristöihin. Toinen tärkeä uutuus on ensi vuonna alkupuolella julkaistava Java SE 8, joka pistää käytännössä kaiken Javan uusiksi – hyvällä tavalla. Vanha Java-koodi tulee toimimaan, kuten aina ennenkin, edelleen ilman muutoksia. Mutta kaikki tulevat rajapinnat tulevat rakentumaan niin vahvasti Java 8 Lambda expression malleihin – ja olemassaoleviakin on jo Java 8 osalta päivitety rajusti – että koodaajilla on edessään suuri osaamisen päivitys. Väittäisin että suurempi kuin Java versiossa 5 aikanaan.

2013-09-25 11.59.55

Rivien välissä oli myös muuta tarinaa trendeistä luettavissa. Näytteilleasettajien puolella oli hurjasti pilvipalveluita tarjolla niille jotka haluavat ja uskaltavat ulkoistaa infransa vuokrattavaksi. Pilvipohjaista kehitysympäristöä, testausympäristöä, entistä helpompaa pilvipohjaista ajoympäristöä sovelluksille, jne. Pilvi on tullut ja on jo osa elämää ja rutiinia. Yhtenä haasteena paikan päällä koodasin CloudFoundry pilveen Spring Tool Suitella tehdyn Spring web-sovelluksen jossa integroin JavaOne tweettejä twitteristä – helppoa kuin heinänteko. Codenvy tarjosi kehitysympäristöä pilveen – jossa voi vuokrata kapasiteetin. Sauce Labs tarjosi testausta pilvessä, web ja mobiilisovelluksille, mahdollisuus testata automatisoidusti yli 150 selain/käyttöjärjestelmäkombinaatiolla.  New Relic tarjoaa edelleenkin ulkoistettua serverin monitorointia pilvessä.

Internet of Things – robottien maihinnousu

Itselleni yllättävä painotus oli Internet of Things – IOT ihan kaikkialla. Konferenssissa esiteltiin Raspberry Pi- tuttavallisemmin RasPi – pohjaisia robotteja, tabletteja, kotiautomaatiota, klustereita, autojen toiminnan etälukua langattomasti, Raspberry Pi esiintyi niin monesti esityksissä että oli pakko ostaa tuliaisiksi itsellekin sellainen – maksaahan yksikkö vain 30 dollaria ja sillä voi sentään ajaa Linuxia ja Javaa! 😉 Tosin omana mielipiteenä on, että mielenkiintoinen sulautettujen yksiköiden suunta on käytetyt matkapuhelimet – pari kolme generaatiota vanha Android on äärimmäisen hyvin ohjelmoitavissa ja niitä saa tyyliin ilmaiseksi kun jaksaa vain kärrätä pois, etenkin käytettynä. Tässäpä olisi business idea: Rakenna klusteroitu supertietokone käytetyistä Android laitteista ja myy sieltä pilvikapasiteettia käyttäjille. Tai tee niistä kodintekniikan keskuksia.

Java embedded-haasteessa joku rakensi sydänmonitorin jossa oli mukana Java, RasPI, sekä Google Glass 😉

Shakinpeluurobotti

Tuotteistettunakin löytyy jo E-Health alusta, joka rakentuu RasPI tai Arduino alustojen päälle, ja mittaa mm. pulssia, hapen määrää veressä, hengitystä, ruumiinlämpöä, EKG:tä, verensokeria, hikoilua, verenpainetta, potilaan asentoa, ja lihaksiston kuntoa – ja lähettää tiedot reaaliajassa analysoitavaksi.

Piiloviesti tämän alla valkeni vasta muutaman esityksen katsottuani: yhteistä IoT esityksille oli vahva Java EE 7 serveri pinnan alla, jossa on tila ja logiikka. Java EE 7 tarjoaa entistäkin helpomman tavan rakennella sovelluksen sydänlogiikka – ja niitä voi viskata pilveen ellei halua omaa serveriä ostaa. Toinen mielenkiintoinen teema oli EE 7 uusi websocket mallin käyttö: Se muuttaa ohjelmoinnin siitä että asiakkaat hakevat aktiivisesti sisältöä sellaiseksi että lukuisat erilaiset asiakasohjelmat vastaanottavat tapahtumia ja sanomia kun serverillä tapahtuu jotain. Näin pystyvät esim. ipad, laptop, ja robotti keskustelemaan sulavasti keskenään. Ideana on että IoT on (mikro- ja muiden) laitteiden pilvi jotka tuottavat sekä Big Dataa että Fast Dataa. Keskellä olevan Java EE 7 serverin rooli on yhdistää, prosessoida ja suodattaa datamääriä. Kyseessä on eräänlainen väylä-ajattelu, vähän eri näkökulmasta.

Hazelcast Lego-Pi cluster

IoT on myös nykyisellään puhdasta villiä länttä. Innovointi on vahvaa, ja se tarkoittaa että tietoturvaa ei yleensä ole juuri ollenkaan. Jo nyt on kertomuksia miten hakkerit ovat murtautuneet auton viihdejärjestelmän kautta sisään ja onnistuneet ohjaamaan pyöriä – tai miten hotellin valonohjaus on otettu haltuun tökkäämällä pistorasiaan oma kontrollimoduuli – tai miten Android puhelimella on hakkeroitu lentokoneen järjestelmiä. Tietoturva on osa-alue joka nousee aina vain tärkeämmäksi jatkossa, koska IoT laitteiden tietoturvahaavoittuvuuksissa voi olla seurauksena loukkaantumisia tai jopa hengen menetyksiä – toisin kuin ennen vanhaan jos joku virus päätti pistää koneen levyasemat tasaiseksi.

Ihmisiä valuu luentosaliin

Eurotech demonstroi myös IoT ajattelua toteuttamalla JavaOne kävijämäärien laskureita luentosaleihin ja auloihin. Uutta oli se että ne ovat langattomia laskureita, kytkettynä Oraclen pilveen ja antavat reaaliaikatietoa siitä miten paljon missäkin on ihmisiä. Näitä on toteutettu mm. wc-tilojen puhdistusaikataulutukseen, bussien kapasiteetinohjaukseen, taksijonojen optimointiin, jne.

Entä akronyymit? Mikä on kuumaa ja mikä kylmää?

Tässä vielä teknisempää trendilistaa. Mielestäni nousussa ovat:

Java EE 7, etenkin EJB 3.2 ja Websocket sekä CDI ihan kaikkialla.

– Netbeans – jopa Gosling kyykytti Eclipseä ja kehui netbeansiä. Se on mainettaan paljon parempi kapistus ja 7.4 versiosta alkaen myös HTML5 + JavaScript ovat saaneet ainutlaatuisen hyvän tuen. Tukee tottakai kaikkea mitä Java EE 7 voi antaa.

Glassfish. No, nopea, kevyt, maksuton serveri. On se kova. Ei niin ettei myös JBOSS olisi. Ei pidä unohtaa myöskään TomEE palvelinta tai Jettyä. Yhä enemmän tehdään joka tapauksessa open sourcella.

HTML5, JavaScript – mahdollistavat sen että varsinaista serveripään web sovelluskehystä ei aina tarvita. Tässä saa olla hieman tarkkana tietoturvan kanssa mutta valmiita kirjastoratkaisuja löytyy kuten Vaadin, Project Avatar, ja mikä hyvänsä javascript kirjasto.

– GPU kiihdytys, eli grafiikkapiirien käyttäminen laskemiseen. Se on jo ennestään kova juttu tietoturvamaailmasta, mutta nyt myös tietokanta ja sovelluspalvelinmaailmassa hyödynnetään – case IBM ja Oracle.

– Tietoturva. No joo, sen pitäisi aina olla nousussa. Lisätään monimuotoisemmat ympäristöt ja EU:sta päin tulevat lainsäädännölliset paineet niin ehkä tähänkin aletaan budjetoimaan enemmän.

Laskussa ovat:

– JavaServer Faces JSF – murheellista sanoa, mutta vaikka JSF on standardi se ei ole ainoa vaihtoehto käyttöliittymiin. Se on edelleen aivan mainio kohtuukokoisille yrityssovelluksille missä projektin kustannustehokkuus on kaiken a ja o ja pitää saada nopeasti hyvää jälkeä aikaan. Mutta IoT maailmassa vaihtoehdot ovat tärkeitä. Niitä voi olla vaikkapa juuri open sourcattu Project Avatar, joka sisältää mm. Node.js tekniikasta päivitetyn JVM version.

Todettakoon kuitenkin että JSF 2.2 on myös aika hieno, sieltä löytyy mm. HTML5 leiskapohjamalli – ei ole siis pakko käyttää jsf tagejä. Sieltä löytyy JSF Flow malli jolla voi määritellä miten sivuilla liikutaan. Sieltä löytyy entistä enemmän mahdollisuuksia tilattomuuteen jos niin haluaa.

Kaupalliset serverit ja kehitysvälineet. Tästä voi olla montaa mieltä – mutta jos katsoo meidänkin asiakaskuntaamme niin yhä harvemmalla on satojentuhansien lisenssillä varustettua serverisoftaa tai tuhansien eurojen lisenssillä varustettua kehitysympäristöä Javan tekemiseen. Toki rahalla saa – sekä Oracle että IBM julkistivat mahtavia parannuksia serverituotteisiinsa joissa teemana on että kytkintä kääntämällä saa lisää vääntöä, tai operaatio voidaan tehostaa 48 kertaa nopeammaksi.

Seuraavien asioiden status ei mielestäni ole nousussa tai laskussa, niitä käytetään kun ne sopivat: JavaFX, RESTful web services, Spring Framework (jos seminaarin luennoitsijoilta kysytään, se on kuitenkin kirjastoraskasta legacymoskaa josta pitäisi pääästä eroon ja siirtyä uuteen kauniiseen Java EE 7 aikaan 😉

Miten päivitetään taidot vuoden 2014 tasoon?

Eli meidän asiakkaillemme koulutusterveisiä: Kannattaa tarkistaa että koodaajilla on modernit Java versiot hallussa – tällä hetkellä Javan uudet piirteet versiosta 5.0 versioon 7.0 – ja pian myös 8.0. Kannattaa myös tarkistaa että Java EE 7 taso ja paletti on hallussa – EJB, CDI ja JPA niistä tärkeimpinä. Ehdottoman tärkeää on tarkistaa että suunnittelijat tietävät missä mennään – Java EE 7 ja Spring Frameworkin uusimpiin versioihin tutustuminen ei ole huono idea.

Jos kaipaa parempia tuotteita sovelluksen seurantaan, niitä olisi tarjolla maailmalla, eikä edes maksa paljoa. Javan ei tarvitse olla musta laatikko. Samoin jos pilvi kiinnostaa, niin ei ole mitään syytä miksi sinne ei voisi mennä vaikka heti. Vaihtoehdot kuten Jelastic, Google App Engine, CloudFoundry, Oracle Public Cloud – ovat valmiina Java EE sovelluksille samantien. Voi myös miettiä onko sovelluskehitysympäristö tai testausympäristö pilvessä jotain mikä voisi kiinnostaa – itseäni kiinnostaa, koska skaalautuvuus ja käyttöönoton vaivattomuus on tällaisessa omaa luokkaansa. Ja voi koodata vaikka Nexus 7 tabletilla seminaariluentoja katsellessaan.. :p

Niin, vuosi 2014 tulee nopeammin kuin voi arvatakaan, osaamisen päivittämistä on jo korkea aika suunnitella. Edelleenkin koulutuksissa käy ilmi että kaikki koodaajaresurssit eivät ole täysin tuttuja Java 5 uusien piirteiden kanssa – ja nyt puhutaan kuitenkin Java versioista 7 ja 8, ja uudet piirteet ovat kaikkialla rajapinnoissa käytössä. Edelleen kuulee myyttejä jotka perustuvat vanhaan J2EE maailmaan: monimutkaisuus ja suorituskyky sekä ORM tekniikoiden uskottavuus. Ei kannata tehdä olettamuksia ellei ole toteuttanut projektia Java EE 7:llä  -se on hauskaa, helppoa ja varsin uskottavaa.

Vanhoilla teknologioilla projektien tekeminen on kuin lähtisi ajelemaan maanteille T-mallin fordilla: Voihan sitä huvikseen tehdä ellei ole erityistä kiirettä.

Täältä niitä koulutuksia löytyy jos tarvetta ilmenee:

http://www.tieturi.fi/java

Ja tuossa Wired artikkeli samasta seminaarista:

http://www.wired.com/wiredenterprise/2013/09/the-second-coming-of-java/all/

Java EE 7 kypsymässä

Odotellessa Java SE 8 versiota mullistuksineen, seuraava mielenkiintoinen päivitys – jo tänä vuonna – on tuleva Java EE 7 ”cloud” standardi – eli JSR-342.

Kiintoisia osia tulee olemaan:

– JPA 2.1 ja multitenancy (JSR-338)

– JAX-RS 2.0 ja viimeinkin client API (JSR-339)

– Servlet 3.1 ja websockets, multitenancy, ja PaaS malli (JSR-340)

– EL 3.0 (JSR-341)

– JMS 2.0 ja viimein yksinkertaistettu API (JSR-343)

– JSF 2.2 ja pikkuparannusten ohella HTML 5 tukea lisää (JSR-344)

– EJB 3.2 pääjuttuina PaaS, Multitenancy tuet (JSR-345)

– CDI 1.1 (JSR-346)

– Bean Validation 1.1 (JSR-349)

– JCACHE – viimein standardi cacheille, YAY!! 😉 Tämä on kova juttu. (JSR-107)

– Java State Management – tilanhallinnan standardointia (JSR-350)

– Batch applications for Java -eräajostandardi osaksi EE:tä (JSR-352)

– Concurrency Utilities for Java – concurrency rajapinnat EE ympäristöön (JSR-236)

– Java API for JSON Processing – No REST:n mukana tulee tietystikin JSON (JSR-353)

Että on sitä jotain mitä odottaa. Pääalustoina tietysti JBOSS, Websphere, Weblogic, Glassfish, Tomee, mutta kiintoisaa tulee olemaan myös Oracle PaaS pilvipalvelu, ja se tuleeko esim. Google App Enginen tai Amazonin puolelta tukea uudelle standardille.