Affärskritiska processer kräver strikta regler och standardiserade metoder för hur utvecklingen ska gå till väga. Därför har flera ramverk utvecklats som sätter en motor i händerna på utvecklaren som i sin tur bygger programmen enligt givna regler. De kallas applikationsservrar. Från början fanns flera olika konkurrerande språk under benämningen, bland annat Microsofts ramverk Dotnet. Men på grund av Javas dominans har begreppet blivit allt mer synonymt med en motor som stöder standarden Java EE (enterprise edition), tidigare kallad J2EE.

Java EE rymmer en mängd komponenter och kraven för certifiering är hårda. Senaste versionen av standarden blev klar i december förra året och heter Java EE 6. Hittills har bara två applikationsservrar klarat certiferingskraven för den – Sun Glassfish Enterprise Server v3 och Jeus 7 från Tmaxsoft.

"Java EE rymmer en mängd
komponenter och kraven för
certifiering är hårda."


Applikationsservern syftar till att göra livet lättare för utvecklare som kan fokusera på programmeringen. Eftersom utvecklaren är tvungen att hålla sig inom ramarna för Java EE kan applikationen sedan enkelt flyttas från utvecklingsmiljön till en testmiljö och slutligen till en server i produktion.

Lås inte in dig


Java EE är plattformsoberoende, vilket gör att utvecklaren kan arbeta på till exempel Mac för att sedan ta applikationen i drift på en Windows-, Linux- eller Unixserver. Applikationsservern tar hand om funktioner som data­basintegritet, säkerhet, auten­tisering av användare, klustring och säkerhetskopiering.

Under Java EE hittar du en stor mängd delkomponenter där en av de viktigaste är Enterprise Java beans (EJB). Det är Javaklasser som lagras i applikationsservern som sedan görs åtkomliga över nätverket via ett gränssnitt. Det finns två typer av ”bönor”, dels sessions-bönor som är ett gränssnitt mot affärslogiken, dels entity-bönor som är till för beständig lagring. De senare sparas oftast i en relationsdatabas, medan sessions-bönorna bara existerar så länge användare eller applikationer arbetar mot gränssnittet, därav namnet.

Om du tänker utveckla med EJB bör du se till att använda en applikationsserver som stöder EJB 3.0. Det var först i version 3.0 som klassfilerna standardiserades och blev flyttbara mellan olika typer av applikationsservrar. Om du utvecklar med EJB 3.0 kan du relativt enkelt byta applikationsserver och slippa inlåsningsproblemet.

Genom att använda Java transaction api (JTA) ser utvecklaren till att inte bryta integriteten i sin applikation. JTA är en transaktionshanterare som bland annat används för meddelandehantering och databaskopplingar.

Java messaging service (JMS) är en annan komponent i Java EE för asynkron meddelandehantering.



En Java EE-applikation delas i tre skikt. Klientskiktet kan till exempel vara en webb­läsare, en Javaapplikation eller ett program för tjänsteorienterade arkitekturer (soa). Applikationsserver­skiktet har ett lager mot klienterna och ett ”affärslager” som hanterar lagring, säkerhet och transaktioner. Det tredje skiktet är databasen där informationen lagras.

Snabba JSP-sidor


Java EE rymmer också specifikationer för webbteknikerna ­Java server pages (JSP) och servlets. JSP är sidor där utvecklaren kan blanda Javakod med vanlig html. Sidorna görs åtkomliga över nätet, vanligtvis över port 8080. Första gången en JSP-sida exekveras av applikationsservern görs den om till Javakod som sedan kompileras. Så länge JSP-sidan inte ändras är det därefter den kompilerade Javakoden som körs varje gång en användare laddar sidan. Därför är JSP-sidor extremt snabba och likvärdig andra cgi-tekniker.

Javautvecklaren måste skriva sin applikation efter givna regler och följa den filstruktur som Java EE föreskriver. När programmet är klart för att skickas till applikationsservern ska det först paketeras. Om det är ett vanligt webbprogram som bara innehåller JSP, servlets och statisk html görs det i filformatet war (web archive). Om programmet innehåller enterprise-bönor, objekt för meddelandehantering eller andra mer avancerade Java EE-komponenter heter formatet ear (enterprise archive).

Säkerheten i din applikation specificeras med JAAS (Java authentication and authorization service). Applikationsservern konfigureras för att hämta användarinformation från en viss datakälla som kan vara en relationsdatabas, fil- eller katalogtjänst. Inloggning kan ske på flera sätt. Det vanligaste är via http-auth eller ett egendefinierat inloggningsfält, där användarnamn och lösenord fylls i.

Ofta innehåller applikationsservern även klasser som ligger utanför Java EE men som är ”bra att ha”. En sådan klass är log4j som låter programmeraren skicka meddelanden till en systemlog för senare bearbetning. Händelserna som loggas kan klassificeras, allt från kritiska fatal- och error-meddelanden till mer harmlösa info- och debug-budskap. Olika applikationsservrar har olika hjälpklasser av den här typen.

Russinen i bossens kaka


På marknaden för applikationsservrar finns både öppna och stängda lösningar. En av de mest populära av de öppna är Jboss från Red Hat. Den senaste stabila versionen är 5.1 som har stöd för Java EE 5, men Jboss version 6.0.0 är redan på väg ut och har stöd för Java EE 6.

Jboss kommer i två skepnader. Den ena är en kommersiell, stabil variant där Red Hat har plockat russinen ur kakan och som man anser att man kan erbjuda support på. Den andra är en fri variant där all nyutveckling sker, men som du får installera och använda på egen risk.

Applikationsservern startas med kommandot /bin/run.sh och administreras sedan via ett webbaserat gränssnitt som finns på http://127.0.0.1:8080/. Administratören heter ”admin” med lösenord ”admin” och definieras i filen server/standard/conf/props/jmx-console-users.properties.

För att underlätta för utvecklaren säljer Red Hat mjukvaran Jboss Developer Studio för drygt 700 kronor. Licensen ger rätt till uppdateringar under ett år. Jboss Developer Studio är ett tillägg till den öppna utvecklingsmiljön Eclipse och det 672 megabyte stora paketet levereras komplett med Eclipse, applikationsserver och alla insticksmoduler förkonfigurerade. Paketet i Linux kommer som en jar-fil (Java archive). Installationen startas med kommandot ”Java -jar [namnet-på-filen]”.

Du kan råka ut för problem om du kör paketet från en 64-­
bitarsmiljö, eftersom den visuella redigereraren i Eclipse har några olösta mjukvaruberoenden. Om du vill försäkra dig om en friktionsfri miljö bör du därför köra Jboss Developer Studio på ett 32-bitars operativsystem.

Jboss Developer Studio 2.1 har några år på nacken och Red Hat är på väg ut med version 3 som kommer att vara tillgänglig för befintliga kunder. Den är värd att använda, eftersom Jboss Developer Studio 2.1 kommer med Jboss 4.2 som inte stöder EJB 3.

Om budgeten är begränsad och du är beredd att lägga ner lite extra konfigureringsarbete själv kan du lägga till den mesta av mjukvaran i din befintliga Eclipse-installation utan att det kostar något. Insticksmodulerna går under namnet Jboss Tools och finns på Jboss Community Editions webbplats.

Applikationsservern Glassfish är utvecklad av Sun Microsystems och kom i Oracles ägo i och med företagets köp av Sun Microsystems. Den senaste större uppdateringen kom i november 2009, då version 3 släpptes. Då förenklades bland annat flytt av program från Javamotorn Tomcat till Glassfish. Sun Glassfish Enterprise Server v3 är också den första applikationsservern med stöd för Java EE 6.



Utveckling i Java EE kräver en kapabel utvecklingsmiljö. Red Hat säljer Jboss Developer Studio som har alla moduler du behöver förinstallerade, som Spring, EJB, Webservices, Webprofiler med mera.

Fisken är trevlig


Glassfish har ett betydligt trevligare och mer användarvänligt gränssnitt än Jboss. Guiderna känns mer genomtänkta och det är enklare att lägga till nya data­baskopplingar eller anslutningar till katalogtjänster.

Servern startas med kommandot ”startsrv” som finns i katalogen glassfishv3/glassfish/bin. Det administrativa gränssnittet finns på http://127.0.0.1: 8080/ där ingen inloggning krävs.

Programmerare som jobbar med Glassfish har främst två utvecklingsmiljöer att välja på, antingen Netbeans från Sun eller Eclipse. Sun erbjuder insticksmodulen Glassfish Tools Bundle for Eclipse helt gratis.

Teoretiskt sett krävs det inte någon speciell utvecklingsmiljö för att koda Java EE, men eftersom ramverket är så komplext behöver du det stöd som Eclipse eller Netbeans ger.

En applikationsserver har vanligtvis inte någon förinstallerad databas. Jboss kommer med den enklare Javabaserade relationsdatabasen Hypersonic, men den duger inte när lasten ökar på maskinen.

Man kan i princip välja vilken relationsdatabas som helst som har en lämplig jdbc-drivrutin. Till exempel har Mysql, Postgresql, Microsoft SQL, Oracle, DB2 och Sybase det.

I undantagsfall kan man använda en odbc-jdbc-brygga för att låta applikationsservern ansluta sig till den databas som används som odbc-källa. Jdbc-drivrutiner tillhandahålls vanligtvis av databasleverantören.

Jar-filen som laddas hem ska läggas i rätt bibliotek på applikationservern. Därefter kan man definiera en datakälla mot relationsdatabasen.

Katalogtjänster eller ldap-­data­baser har vanligtvis inte någon egen drivrutin. I de fallen använder man i stället standardgränssnittet jndi för att ansluta sig.

Marknaden för applikationsservrar rymmer också proprietära lösningar, till exempel IBM:s Websphere.



Via administrationsgränssnittet i Suns applikationsserver Glassfish kan du relativt enkelt lägga till nya datakällor, katalogtjänster och hela ejb-applikationer.

Oracle valde svenskt


Oracle har ett långt förflutet inom applikationsservrar eftersom Java och jsee spelar en central roll i deras koncept Fusion Middleware. Egenutvecklade Oracle Application Server (Oas) byttes ut mot då öppna och svenskutvecklade Orion Server. Därefter har Oracle förvärvat Weblogic som ­under lång tid var synonym med begreppet applikationsservrar.

I och med att Oracle köpte Sun är framtiden för Glassfish långt ifrån så glasklar som namnet antyder.

Mindre webbprojekt och ofta även flera större har sällan behov av någon applikationsserver och den komplexitet en sådan tillför. Om du bara vill utveckla i Java, JSP, html och servlets räcker det med att installera Javamotorn Tomcat. Den stöder formatet web archive (war) precis som sina storebröder. Med Tomcat kan man också konfigurera kopplingar till relationsdatabaser eller katalogtjänster. Nackdelen med Tomcat är att bakåtkompatibiliteten mellan versioner ofta har brutits.

Skulle projektet sedan växa och du ser ett behov av det tunga artilleri som Java EE erbjuder är det inga problem att uppgradera från Tomcat till en Java EE-certifierad plattform.

Om du vill lägga din applikation på nätet är Amazons ”elastiska moln” EC2 ett alternativ. Red Hat erbjuder driftning av både Linux- och applikationsserver i molnet. Suns högt­flygande molnplaner sågades tyvärr av Oracle efter uppköpet, så om du vill drifta Glassfish får du vända dig till en annan leverantör.

Fakta

  •  EAR (Enterprise archive). Filändelse på paketet som innehåller en komplett Java EE-applikation.
  • EJB (enterprise Java beans) Standardiserat ramverk definierat av JCP. Applikationsserverobereonde från och med ejb 3.0.
  • JAAS (Java authentication and authorization service) Gränssnitt för autensiering och inloggning.
  • JAR (Java archive) Ett filarkiv i zip-format. Är ibland körbart med kommandot Java -jar [namn]
  • JAX-WS (Java API for XML Web Services) Klasser som gör dina klasser åtkomliga via nätet (web services).
  • JCA (Java cryptography architecture) Paket som innehåller kryptering, md5- och sha-summor med mera.
  • JCK (Java compatibility kit) Test som visar om en implementation av Java EE fyller kraven.
  • JCP (Java Community Process) Standardiseringsorgan som exempelvis bestämmer vad Java EE 7 ska innehålla.
  • JMS (Java messaging service) Ett system för meddelandehantering.
  • JMX (Java management extensions) Ett gränssnitt som används för att installera nya ­Javamoduler.
  • JPA (Java persistence api) Gränssnitt för lagring av objekt.
  • JSP (Java Server Pages) Filer som låter dig blanda Javakod med vanlig html.
  • Pojo (plain old Java object) En finare benämning för en helt vanlig Javaklass.
  • RAR (resource archive) Filändelse för objekt som definieRAR en resurs i applikationsservern.
  • WAR (web archive) Filändelse på ett paket som innehåller JSP, servlets och statiska html-sidor.