|
Udskrift af : Apaches Jakarta Projekt
|
Planche 1 : Apaches Jakarta Projekt
Fra et webløsnings synspunkt...
- Webløsninger
- J2EE
- EJB?
- Tomcat
- Jetspeed
- Turbine
- Gump!
- Jakarta-projektet iøvrigt
Planche 2 : CV
Leif Andersen - leander@blanet.dk
- Født 1954, Munkebo, Fyn
- Civilingeniør, 1980
- EBA fra IKT, 1997
- Chr. Rovsing 80-86
- Alm. Brand 86-88
- DDE 88-93
- CSC Danmark 93-99
- BLA*net 99-
Speciale: netværk, programmering, portering, PC, minidatamater, Unix,
Java og Linux!
- Linux siden 1992
- Java siden 1996
Planche 3 : Webløsninger
Buzzwords galore!
- Web Portal
- Business Portal
- eBusiness Portal
- Content Management
Big business!
Planche 4 : Klient/serverløsninger
Tag en typisk 3-lags Client/server løsning

Traditionelt har man kodet klienten i Java, HTTP-serveren i PERL (eller
Visual Basic) og hosten i Cobol.
Planche 5 : Webportal
En typisk "webløsning"

Buzzword: webportal
Planche 6 : Masser af alternativer
- Lav den selv
- Køb den
- Brug et OSS-projekt
- Kræver indsigt, lidt tid og meget lidt penge
Planche 7 : Java er ikke eneste mulighed!
Freshmeat.net lister 76 projekter med ordet Portal
PHP mest populære..
Perl
Java/J2EE også repræsenteret
Microsoft ASP?
Planche 8 : Avancerede Portaler
De fleste færdige webportaler løser udviklerteamets akutte problemer.
- Artikler,
- debat,
- henvisninger
- og downloads
Man kan komme MEGET langt med lidt tilpasninger
Men...
Planche 9 : Webløsninger
Sammensæt
- Standard web-elementer
- Forretningslogik
- Forretningsdata
Og så har man pludselig en e-handelsfordel!
Planche 10 : J2EE Arkitektur
JavaBeans, EJB, Servlets og JSP er en del af Enterprise Edition.

Planche 11 : J2EE Container og Services
Containere er grænsefladen mellem en komponent og de underliggende, platforms specifikke rutiner.
Før en J2EE-komponent kan udføres, skal den bygges op og placeret i sin rette container.
- J2EE kan hjælpe med:
- Opsætning af sikkerhed (adgangskontrol)
- Opsætning af transaktioner (dataintegritet)
- Opslagsservices (JNDI)
- Transparant kommunikation mellem komponenter i forskellige containere
- Containerer i J2EE
- EJB-containere
- Webkomponent container
- Klient applikations container
- Klient applet container (plugin)
Planche 12 : J2EE pakker
For hver containertype findes en indpakningsstandard:
- EJB er en jar-fil (.ear)
- beskrivelse (XML), .class-filer og andre filer
- Appl./Aplets er .jar-filer
- Web-komponenter WAR (.war)
Planche 13 : J2EE udvikling:
- Udviklere laver
- klasser og resourcefiler, oversætter, tester og pakker
- J2EE Assembler
- samler JAR og WAR til EAR, angiver politiker for distribution
- J2EE Deployer
- Konfiguration og installation
- J2EE Administrator
- do. men løbende ændringer
Planche 14 : J2EE teknologier
- Webserver
- Databaseadgang (JDBC - i J2SDK)
- J2EE API
- EJB 2.0
- JDBC 2.0
- Java Servlet 2.3
- JSP v.1.2
- Java Message Service (JMS) 1.0
- Java Transaction API (JTA) 1.0
- JavaMail 1.2
- JavaBeans Activation Framework 1.0
- Java API for XML (JAXP) 1.1
- J2EE Connector API 1.0
- Java Athentication Authorizasion Service (JAAS) 1.0
- Tools
- Application Deployment tool
Planche 15 : Servlets
Med Servlets kan man:
- Håndtere HTTP-requests
- Sende HTML-sider tilbage
Servlets kan erstatte CGI-scripts helt!
- men er platformsuafhængige
Planche 16 : Anvendelser
Som traditionel webserver:
- Transaktionssystem
- e-Handel, reservationssystemer
Som avanceret webteknologi
- Konferencesystemer
- Beskeder
- Synkronisering
- "Loadsharing"
Planche 17 : Servletkomponenter
Er klasser i et klassehieraki.

Servlet er et interface. Ens klasse implementerer en eller flere af metoderne i interfacet.
HttpServlet er en klasse, hvor man overskriver de metoder, man ønsker at implementere.
Planche 18 : HTTP-Kommunikation
Et servlet-objekt modtager fra systemet to objekter for hver HTTP-request:
- ServletRequest
- ServletResponse
Defineret som interfaces i en særlig pakke javax.servlet
Planche 19 : ServletRequest
Giver adgang til
- Oplysninger om klienten
- En inddatastrøm at typen ServletInputStrem
Planche 20 : ServletResponse
Giver adgang til
- Sæt (HTTP)datatyper
- En uddatastrøm af typen ServletOutputStream
Planche 21 : En HTTP-server
Eksempel:
public class SimpleServlet extends HttpServlet
{
/**
* Handle the HTTP GET method by building a simple web page.
*/
public void doGet (HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
PrintWriter out;
String title = "Simple Servlet Output";
// set content type and other response header fields first
response.setContentType("text/html");
// then write the data of the response
out = response.getWriter();
out.println("<HTML><HEAD><TITLE>");
out.println(title);
out.println("</TITLE></HEAD><BODY>");
out.println("<H1>" + title + "</H1>");
out.println("<P>This is output from SimpleServlet.");
out.println("</BODY></HTML>");
out.close();
}
}
Planche 22 : Forklaring til eksempel
- SimpleServlet udvider HTTPServlet-klassen
- Overskriver doGet-metoden
- doGet-metoden kaldes, når klienten har sendte en GET-request
- Svaret sættes i et objekt af typen HTTPServletResponse
- HTML-siden skrives til PrintWriter-objektet out, som fås fra HTTPServletResponse
Planche 23 : Servletmiljø
En Servlet udføres af
- En webserver med servlet support
- Servletrunner
- JavaServer Web Development Kit (jswdk)
- Tomcat
Planche 24 : Servletters "levetid"
Som applets har servlets en livscyklus:

Metoder
Planche 25 : Nyttige muligheder
Som udgangspunkt kan servlet'er eksekveres multitrådet.
dvs. flere kan vær i gang med den samme servletklasse og objekt på samme
tid.
Det er muligt at styre sessioner og cookies:
- Sessioner
- en session er et objekt af typen HttpSession
- Infokager (Cookie)
- sætter en Infokage(navn, værdi)
- parameter-metoder (set/get-metoder)
- ServletContext
Planche 26 : Java Server Pages
- Introduktion til JSP
- Arkitektur
- Livstidscyklus
- Syntaks og semantik
Planche 27 : JSP fordele
- Adskiller statisk fra dynamisk indhold
- Write Once Run Anywhere (tm)
- Dynamisk indhold præsenteres i forskeliige formater
- Anbefales af SUN og IBM (!)
- Udvider servlet koncepterne...
Planche 28 : JSP versus ASP
- Webserver supporte
- JSP: Alle, inkl. Apache, Netscape og IIS
- ASP: IIS.
- Platform understøttet
- JSP: All java-platforme
- ASP: Win32-baserede
- Komponentmodel
- JSP: JavaBeans, EJB og tag-biblioteker
- ASP: COM
- Skriptsprog
- JSP: Java eller Javascript
- ASP: VBScript eller JScript
- Sikkerhed
- JSP: Java sikkerheds model
- ASP: Active Data Objects
- Custum-tags
- JSP: Kan udvides med tag-biblioteker
- ASP: Kan ikke udvides
Planche 29 : JSP Arktektur
Formål:
- deklarativ, -
- præsetations-orienteret metode
til at udvikle...
Typisk:
En JSP-side oversættes til en java-klasse, der kaldes fra en request.
Oversættes kun en gang - nemlig efter hver ændring af indhold.
Planche 30 : Servlet Container

Planche 31 : Genereret kode (eksempel)
package jsp;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
import java.io.PrintWriter;
import java.io.IOException;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.util.Vector;
import org.apache.jasper.runtime.*;
import java.beans.*;
import org.apache.jasper.JasperException;
import java.text.*;
import java.util.*;
public class _0005cjsp_0005cjsptest_0002ejspjsptest_jsp_0
extends HttpJspBase {
static {
}
public _0005cjsp_0005cjsptest_0002ejspjsptest_jsp_0( ) {
}
private static boolean _jspx_inited = false;
public final void _jspx_init() throws JasperException {
}
public void _jspService(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
JspFactory _jspxFactory = null;
PageContext pageContext = null;
HttpSession session = null;
ServletContext application = null;
ServletConfig config = null;
JspWriter out = null;
Object page = this;
String _value = null;
try {
if (_jspx_inited == false) {
_jspx_init();
_jspx_inited = true;
}
_jspxFactory = JspFactory.getDefaultFactory();
response.setContentType("text/html");
pageContext = _jspxFactory.getPageContext(this,
request,response, "", true, 8192, true);
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
// begin
out.write("\r\n<html>\r\n<body>\r\n");
// end
// begin [file="E:\\jsp\\jsptest.jsp";from=(3,2);to=(5,0)]
Date d = new Date();
String today = DateFormat.getDateInstance().format(d);
// end
// begin
out.write("\r\nToday is: \r\n<em> ");
// end
// begin [file="E:\\jsp\\jsptest.jsp";from=(7,8);to=(7,13)]
out.print(today);</b>
// end
// begin
out.write(" </em>\r\n</body>\r\n</html>\r\n");
// end
} catch (Exception ex) {
if (out.getBufferSize() != 0)
out.clear();
pageContext.handlePageException(ex);
} finally {
out.flush();
_jspxFactory.releasePageContext(pageContext);
}
}
}
Planche 32 : JSP adgangsmetoder

Planche 33 : Designfilosofier
- Model 1

Planche 34 : Designfilosofier
- Model 2 Model/View/Control

Planche 35 : Enterprise JavaBeans (EJB)
En Enterprise Java Bean (EJB) er et server-komponent, som indkapsler forretningslogik i en løsning.
- Placeret på en server
- Ikke data, ikke præsentation, men logik.
Planche 36 : Fordele ved EJB
EJB forenkler udviklingen af store, distribuerede løsninger
- 1. EJB-containere sørger for systemspecifikke ting, såsom transaktioner og adgangskontrol
- 2. Klienter koncentrere sig om præsentation, servere om forretninglogik - tynde klienter mulige.
- 3. EJB kan afvikles i alle EJB-containere!
Planche 37 : Hvornår anvendes EJB
- 1. Når løsningen skal skaleres
- 2. Løsningen forudsætter dataintegritet
- 3. Løsningen bruger forskellige klienttyper.
- forskellige præsentationer.
Planche 38 : EJB typer
- 1. Session
- 2. Entitet
- forretningsobjekt, der er persistent
- 3. Besked-drevet (Message-driven)
- En lytter for Java Messsage Service (asynkron)
Planche 39 : EJB og Open Source
En EJB kører i en EJB-container. Den kunne være en webløsning i sig selv
(WAR-distribution)
- Jakarta indeholder p.t. ikke EJB-containere
- OSS projekter
- JBoss (www.jboss.org)
- OpenEJB (www.openejb.org)
- Jonas (del af BullSoft Enhydra)
- Gratis - men usikkerhed om licensbetingelser.
Planche 40 : Web Archive (WAR)
Der er 2 typer Webkomponenter
- Servlets
- Javaprogrammerede anvendelsesprogrammer
- Java Server Pages
- Tekstprogrammerede anvendelsesprogrammer
- (HTML, WML, XML...)
- Begge styres af HTTP
Planche 41 : Webkomponentens livscyklus
- Udvikle komponentens logik og resourcefiler
- Pakke komponenten med statiske resourcer
- Distribuere (placere) komponenten
- Aktivere den via en URL
Planche 42 : WAR-formatet
Web ARchive er en katalogstruktur, pakket i jar-fil:
- Toppen af strukturen kaldes "Document Root"
- Den indeholder et katalog, WEB-INF
- web.xml "deployment descriptor"
- tag-library descriptor (JSP)
- classes - klassefiler
- lib - jarfiler med klassefiler og tag-filer
Alle "synlige" filer (html mv.) placeres i under Document Root
Alle "usynlige" filer (config, data mv.) placeres under WEB-INF
...eller udenfor WAR (databaser)
Planche 43 : Jakarta Tomcat

- Bedre, billigere og OPEN Source.
- Referenceimplementering af servlets og JSP
- Tomcat er e komplet Webcontainer servermiljø
Planche 44 : Installation
Det binære zip-format er platformsuafhængig:
- 1) unzip til lokal folder ("Tomcat" ?)
- 2) start server med
- ./start.sh (UNIX)
- startup (Win32)
- 3) stop med
- ./shutdown.sh (UNIX)
- shutdown (Win32)
Der er også en selvinstallerende version til Win32
Planche 45 : Versioner
- V.3.2.3
- V.3.3
- Næste Produktionsversion (beta)
- V.4.0
Version 3.x er produktionsmoden - men måske ikke så "smart".
Planche 46 : Startupbillede

Planche 47 : Tomcat-struktur (V.4.0.1)
Filstruktur (Ny i forhold til 3.x)
- bin
- Tomcats kode, opstart og nedlukning
- classes (ny)
- common (ny)
- conf
- Konfiguration (xml-filer)
- lib
- logs
- server (ny)
- work
og så er der webapps
Planche 48 : webapps-kataloget
Heri placerer man webapplikationerne
- WAR-distributioner
- udpakkes automatisk under opstart
- en WAR-lignende struktur
- Mindst et WEB-INF katalog
- og en web.xml fil herunder
- ROOT
- Har (havde) særlig betydning
Planche 49 : Jetspeed

En "færdig" webløsning (Webapplicatio)
Planche 50 : Jetspeeds fordele
- Binær distribution i form af WAR-fil
- En "Enterprise Portal Solution"
- Programmeret i XML
- Design i JSP eller Velocity
- Let at konfigurere (?)
Planche 51 : Installation
Meget nemt at installere
- Download jetspeed.war
- Placer den i Tomcats webapps-katalog
- Det er ikke nødvendigt at udpakke den.
- Start eller restart Tomcat
- Ret browser mod server
- http://localhost:8080/jetspeed
Sådan skal det gøres
Planche 52 : Startbillede

Planche 53 : Efter login

Planche 54 : En Jetspeed-site (DiverseBooks.com)

Planche 55 : Men...
- Opstart er meget langsom
- Kan køre med 384Mb
- 32Mb RAM standser opstart
Jetspeed-projektet har MEGET lav aktivitet
Planche 56 : Turbine

Byggeklodserne til DIN webløsning?
=hTurbine projektet
=hInstallation
Hent Turbine TDK - et komplet udviklingsmiljø
- Forudsætter dog J2SDK og Ant installeret
- Medbringer egen Tomcat-server
- Udpak til en lokal folder
Planche 57 : Konfiguration og start
1. README_FIRST.txt I roden af den nye folder.
- Giv kommandoen 'ant'
- Danner en standard applikation
- Angiv navn i 'build.properties'
2. GETTING_STARTED.txt i webapps/'navn'/WEB-INF/build
- Rediger 'build.properties' (database opsætning)
- MySQL er et sikkert valg
- Postgresql - se særlig FAQ
- Giv kommando 'ant init'
- Ret browser mod
- http://localhost:8080/'navn'/servlet/'navn'
Planche 58 : Efter et lille stykke tid!

Planche 59 : Login (turbine/turbine)

Planche 60 : Turbine TDK
Bruger som udgangspunkt Velocity (se oversigt)
Skift til JSP - se FAQ
Ret browser mod http://localhost:8080/ for lokal dokumentation
Planche 61 : Turbine TDK-komponenter
(Se i WAR-folder lib)
- Jakarta
- ECS
- Regexp
- JUnit
- Log4j
- ORO
- velocity
- Andre Apache:
- Databasedrivere
- Torque
- Databasegenerator (ikke runtime)
Planche 62 : Turbine - præsentation
Det første man vil gøre er at ændre præsentationen (HTML)
Velocity:
- templates/app
- layoyts - overordnet layout
- navigation - menulayout
- screens - indholdet
Eksempel på Index.vm
For JSP se JSP-Howto
Planche 63 : Turbine - Model
- Der er automatisk inkluderet rollebaseret brugeradministration
- Alle andre datastrukturer kan genereres af Torque
Planche 64 : Torque
Torque er standalone og kan anvendes af alle applikationsprogrammører i
Java
- bundled med Turbine
- 'ant init' danner SQL-scripts og Java-klasser
- Konfigureret af build.properties
- Kontrolfil build.xml
Planche 65 : Torque eksempel
Turbine-testapp har en simpel databasestruktur
definition (xml-fil)
Java-fil (en af dem)
SQL-fil
Planche 66 : Log4J
Log4J er et separat sub-projekt under Apache.
- Lavt overhead på "logged" program
- Mange muligheder for log-devices
- Herunder eksisterende SYSLOG
- Filtrering af logning
- level-styret INFO, WARN, ERROR, FATAL
- Konfigurerbar på runtime
Planche 67 : Gumpa

Et socialt(?) eksperiment...
Skalerer
- Ekstrem Programming
- Løbende integration
- ... til nye højder!
En Metamake-service!
Planche 68 : Gump - beskrivelse
Hver 6. time køres Gump
- XML-konfiguration (prioriteret projektliste)
- Udfører projektets build.xml fl m. Ant
- Output - resultater og dokumentation i HTML
- Bruger også seneste udgave af XML, Ant og JUnit!
- Fejl adviseres via e-post
Planche 69 : Gump-output oversigt

Planche 70 : Gump-output tomcat (udsnit)

Planche 71 : Gump - anbefaling
Ved større projekter
- Mere end 2 deltagere
- Spredt i tid og sted
Bør et projekt "checkpointes" a.l.a. gump
Planche 72 : Jakarta-projektet
Består af en række subprojekter
Hver af disse kan have delprojekter - også delt med andre
Klip fra officielle hjemmesider
Planche 73 : Alle sub-projekter (alfabetisk)
- Alexandria
- CVS/Javadoc/source management
- Ant
- Avalon
- rammestruktur for programudvikling
- Cactus
- JUnit-udvidelse for test i container
Planche 74 : Alle subprojekter (alfabetisk)
- Commons
- ECS
- Generere opmarkerede output (XML, HMTL, ...)
- James
- Postagent-server (SMTP, POP3, IMAP...)
- Jetspeed
- JMeter
Planche 75 : Alle subprojekter (alfabetisk)
- Testloader for Webservere
- Log4J
- Lucene
- ORO
- Regexp
- Regulære udtrykfortolker (alternativ)
- Slide
- WebDAV-værktøj (opdatering via HTTP)
Planche 76 : Alle subprojekter (alfabetisk)
- Struts
- Rammeværktøj for webløsninger
- Taglibs
- Tomcat
- Turbine
- Rammeværktøj til sikrede webløsninger med servlets
Planche 77 : Alle subprojekter (alfabetisk)
- Velocity
- Skema-kerne - alternativ til JSP og PHP!
- Watchdog
- Tests for Servlet og JSP specifikationer.
En del har også under-underprojekter.
Planche 78 : XML-projektet
Er tæt knyttet til Jakarta
- Xerces
- XML parsers in Java, C-- (with Perl and COM bindings)
- Xalan
- XSLT stylesheet processors, in Java and C--
- Cocoon
- XML-based web publishing, in Java
- FOP
- XSL formatting objects, in Java
- Xang
- Rapid development of dynamic server pages, in JavaScript
- SOAP
- Simple Object Access Protocol
- Batik
- A Java based toolkit for Scalable Vector Graphics (SVG)
- Crimson
- A Java XML parser derived from the Sun Project X Parser.
Planche 79 : Andre Apache-projekter
En del forudsætter også andre Open Source projekter, herunder XML og
JUnit.
Det gamle Apache Javaprojekt - java.apache.org - indeholder stadig
JServ, Jyve og JSSI - resten er flyttet til Jakarta.
© 2001 BLA*net - Leif E. Andersen,
leander@blanet.dk (Open Content License)