Java 2 enterprise edition (J2EE)
er løst sagt en udgave af java-platformen der er rettet mod udvikling af større serverbaserede distribuerede forretningssystemer med mange samtidige brugere.
I forhold til standardudgaven, J2SE, er der tilføjet klasser, der kan håndtere vigtige opgaver i et servermiljø.
Til afvikling af J2EE-applikationer kræves en applikationsserver, der blandt andet stiller følgende til rådighed for programmerne:
- Servlets og JSP giver mulighed for at lave dynamiske hjemmesider.
- JNDI, der er en navneservice, der gør at forskellige ressourcer kan findes ud fra et navn.
- JDBC, der giver mulighed for adgang til databaser. Denne grænseflade er databaseafhængig, og bør kun bruges som en nødløsning.
- Enterprise beans, der er javaklasser, som kan installeres på en applikationssserver.
Enterprise beans findes i flere varianter:
- Entity beans giver mulighed for adgang til databaser uafhængigt af det konkrete databasesystem.
- Session beans er javaklasser, hvis metoder kan kaldes over et netværk.
- Message driven beans giver mulighed for asynkron aktivering.
Hvad er J2EE helt præcist?
Termen "J2EE" dækker over flere ting:
- En Sun-specifikation – et teknisk dokument, der detaljeret beskriver J2EE-platformen og dens API'er
- En Sun-reference-implementation, der fungerer dels som proof-of-concept i forhold til specifikationen, og dels som et supplement til specifikationen (er der tvivl om platformens opførsel i et givent tilfælde, gælder referenceimplementeringens opførsel som specifikation)
- Et værktøj, der tester kompatibilitet af en forelagt serverplatform med J2EE-specifikationen (via en række test cases)
- En række "J2EE blueprints" – principper for og tips til fornuftig applikationsudvikling på J2EE-platformen
Der findes allerede en del implementeringer af specifikationen, både kommercielle og gratis. IBMs WebSphere-server og BEAs WebLogic-server er eksempler på kommercielle implementerringer, mens JBosss JBoss Application Server er et eksempel på en gratis.
Services
Generelt stiller applikationsserveren en række services til rådighed:
- Mulighed for transaktioner på metodeniveau. Det betyder at, hvis et metodekald resulterer i en databasetransaktion, og metodekaldet fejler, så annulleres databaseopdateringen også. Distribuerede transaktioner er også programmørtransparent understøttet.
- En generel sikkerhedsmodel, der giver mulighed for adgangskontrol helt ned på metodeniveau
- Automatisk (men konfigurerbar på servlet-niveau) håndtering af samtidighed
- Fail-over- og logging-funktionalitet
- En 6-rollemodel for udviklingen af J2EE-applikationer, der uddelegerer ansvaret til hhv "bean provider" (leverer enterprise beans), "application assembler" (samler enterprise beans og andre komponenter til en samlet applikation), "deployer" (installerer og konfigurere en applikation på en given server), "server provider" (leverer en implementering af J2EE-server-specifikationen), "container provider" (leverer en implementering af J2EE-container-specifikationen) og "system administrator" (vedligeholder J2EE-server med kørende J2EE-applikation og integrerer den til andre systemer i virksomheden).
Arkitektur
J2EE-arkitekturen er en 3-tier-arkitektur, hvilket betyder, at systemet har en 3 niveauer af klient-nærhed:
- En web-tier. Her afvikles præsentationsrelateret logik i den såkaldte "Web Container", en webserver med ekstra J2EE-funktionalitet
- En logik-tier. Her afvikles forretningslogik (implementeret i session beans og message-driven beans) i den såkaldte "EJB Container".
- En data-tier. Her tilgås data i persistente objekter (nemlig entity beans); entity beans afvikles ligeledes i EJB Containeren.
Endvidere er arkitekturen komponentbaseret, således at mange dele af serverplatformen kan udskiftes, og nyudviklede komponenter let kan vedligeholdes eller installeres på nye systemer. Arkitekturen definerer bl.a. følgende server-side komponenter: servlets, JSP-sider, enterprise beans.
Arkitekturen søger også at løse tværgående problemer (CCC: "cross-cutting concerns") som sikkerhed, transaktionsunderstøttelse og samtidighed ved at realisere det såkaldte "component/container"-princip: Komponenters offentligt udstillede services tilgås kun indirekte gennem en container (en applikation, der indkapsler komponenten), som så kan håndtere CCC-problemerne.