JavaEE5 Web-Anwendung mit Creator und NetBeans Dr. Matthias Unverzagt 20. April 2006
JavaEE5 Web-Anwendungmit Creator und NetBeansDr. Matthias Unverzagt20. April 2006
Agenda
Was für eine Anwendung?
Architekturübersicht
Business-Schicht
Präsentationsschicht
Build-Deploy Prozess
Zweck der Anwendung
Finanzen für eine kleine Dienstleistungs GmbHverwalten
Gesetzliche Anforderungen erfüllen Steuerinformationen monatlich und jährlich ans Finanzamt
senden
Aufbewahrungspflicht für Unterlagen
Information zur Steuerung des Unternehmens Nutzen und Risiken in Geld bewerten
Alle Informationen jederzeit auf Granularität des einzelnen Mitarbeiters, um Mitarbeiter leistungsgerecht bezahlen und ihnen höchst mögliche Freiheit einräumen zu können.
Akteure im Hinblick auf Finanzen
ENPASOSEnterprise Patterns & Solutions GmbH
KundeLieferant
Finanzamt
Steuer-berater
BuchhalterBank
Geschäfts-führung
Mitarbeiter
Konto-abfragen
Berichteabfragen
bezahlenRechnung
stellen
Info eingeben(Belege,
Reisekosten, etc.)
Steuern
Qualitäts-sicherungexternes
Rechnungs-wesen
Absolution
aktiv passiv
Herangehensweise Firmeneigene Anwendung
Zentrale Datenhaltung
Daten im XML Format exportierbar (Aufbewahrungspflicht)
Web-GUI damit auch Buchhaltung und Steuerberater problemlos zugreifen können
Automatische Schnittstellen zum Finanzamt über Java-Schnittstelle der Elektronischen Steuererklärung (ELSTER) und zur Bank
Zukunftssicher und unabhängig Java EE Standard IDE unterstützt, aber ohne Vendor Locking
Prototyp 2006Q2
Kernanwendung produktiv 2006Q3
Architektur PrototypLogische Schichten und Technische Ebenen
persistieren
Objekt-modell
Ser
vice
s
Seiten
CRUD
XML
Busi
nes
sD
eleg
ate
SessionCache
DataProviders
GUI Komponenten
Naviations- regeln
Java Standard Edition 5 (Java SE 5): Annotations …
GlassFish – Open Source Referenzimplementierung von SunJavaDB
Java Enterprise Edition 5 (Java EE 5): EJB3, JAXB2, JSF1.2 …
Database Business Präsentation Client
Architektur PrototypToolunterstützung
persistieren
Objekt-modell
Ser
vice
s
Seiten
CRUD
XML
Busi
nes
sD
eleg
ate
SessionCache
DataProviders
GUI Komponenten
Navigations- regeln
ANT basierter Buildprozess mit Maven2 Repository Mechanismus
NetBeans 5.5 Previewmit Enterprise PackJavaEE5UML
Creator 2Drag 'n Drop JSF Toolinklusive Komponenten-Library(die allerdings auf J2EE1.4 aufsetzt)
Objektmodellein Objekt
import javax.persistence;import javax.xml.bind.annotation.XmlType;@XmlType@Entitypublic class Account implements Serializable { private int id; @XmlAttribute @Id @GeneratedValue(strategy=GenerationType.IDENTITY) public int getId() { return id; } public void setId(int id) { this.id = id; }...}
ObjektmodellObjekte mit Beziehung ClientAccount
... Account ... { private Client client; @XmlTransient @ManyToOne(optional=false) @JoinColumn public Client getClient() { return this.client; } public void setClient(Client client) {this.client = client;}...}
... Client ... { private List<Account> accountList; @XmlElement(name="account") @OneToMany(targetEntity = Account.class, cascade = {CascadeType.ALL}, mappedBy="client") public List<Account> getAccountList() {return accountList;} public void setAccountList(List<Account> accountList) {this.accountList = accountList;}...}
1n
Objektmodell - Netzenoch ohne Vererbung und many-to-many Beziehungen
n
1A
n
1 n
Default Fetching (many-to-one: EAGER, one-to-many: LAZY)
B C
1A
nB
1
Default fetch B
ADefault fetch A
n
A
1 nB C
1Default fetch C
1
n
Nach einem Objekt greifen:
FIND(Primärschlüssel)
Objektmodell - Netzenoch ohne Vererbung und many-to-many Beziehungen
n
1A
n
1 n
Cascade (Default: nix cascade) PERSIST
REFRESH
MERGE
REMOVE
B C
1
Objektmodell - Netzenoch ohne Vererbung und many-to-many Beziehungen
Aus dem Netz den XML Baum schneiden Root Element festlegen:@XmlRootElement
Schleifen zerschneidenund Endpunkte setzen:@XmlTransient
n1 A
n
1 nB C1
n DE1 1
1nn Objektnetz zum
XML Baum schneiden
n1 A
n
1 nB C1
n DE1 1
1nn
Persistenz – voll automatisiertDatenbank Schema
generieren (GlassFish feature)
Objektmodell
Wie’s geht … Descriptor persistence.xml Beim Deployen auf GlassFishextra="--createtables=false"
vollständig durchEJB3 Entities definiert
Default Mapping
EntityManager
CRUD
Create Table...
compile-time
run-time(container managed)
<?xml version="1.0" encoding="UTF-8"?><persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0"> <persistence-unit name ="finance"> <jta-data-source>jdbc/finance</jta-data-source> <properties> <property name="toplink.ddl-generation" value="create-tables"/> <property name="toplink.create-ddl-jdbc-file-name" value="create_ora.jdbc"/> <property name="toplink.drop-ddl-jdbc-file-name" value="drop_ora.jdbc"/> </properties> </persistence-unit></persistence>
pers
iste
nce
cont
ext
XML Generierung – voll automatisiert
XML Schemagenerieren
Objektmodell
Wie’s geht … Ant task zum Schema generierencom.sun.tools.jxc.SchemaGenTask
Marshal: quasi automatisch
Unmarshal Besonderheit: das Netz muss aus dem Baumwieder zusammengeflickt werden
vollständig durchEJB3 Entities definiert
marshal
<?xml …<xs:schema …
compile-time
run-time
<as-jaxb-schemagen destdir="build/schemas"> <src path="src/java" /> <classpath> <path refid="dependency.compile.classpath"/> </classpath></as-jaxb-schemagen>
<?xml …<client …
unmarshal
XML Generierung – wie’s geht … Marshal
Unmarshal
JAXBContext context = JAXBContext.newInstance(Client.class);Marshaller m = context.createMarshaller();m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); OutputStream out = …; m.marshal(client, out);
marshal <?xml …<client …
unmarshal <?xml …<client …
JAXBContext context = JAXBContext.newInstance(Client.class);Unmarshaller u = context.createUnmarshaller();InputStream in = …;Client client = (Client) u.unmarshal(in);client.repairObjectNetwork();
Services
Objekt-modell
Ser
vice
s
Business
public interface Service { public Object create(Object bo) …; public Object retrieve(… ; public void update(… ; public void delete(… ; public byte[] getXMLFromClient(int clientId) …; public void storeClientFromXML(int id, byte[] data) …;}
public @Interceptors ({LoggingInterceptor.class})@Stateless@Remote(Service.class)public class ServiceBean { @PersistenceContext(unitName="finance") public EntityManager em; @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) public Object create(Object bo) throws ServiceException { try { em.persist(bo); } catch (Exception e) { throw new ServiceException("No save."); } return bo; } …}
Präsentations Schicht
SeitenBusi
nes
sD
eleg
ate
SessionCache
DataProviders
GUI Komponenten
Navigations- regeln
Creator 2Drag ‘n Drop JSF Toolinklusive Komponenten-Library(die allerdings auf J2EE1.4 aufsetzt)
JavaServer Faces – Teil von Java EE 5
Servlets 2.5
JSP 2.1 JSF 1.2 API
JSF 1.2 Tags
JSF Anwendung
Java EE 5
JavaServer Faces – Request/Response
FacesRequest Restore
View
ApplyRequestValues
ProcessEvents
ProcessValidations
ProcessEvents
ResponseComplete
ResponseComplete
Render Response
ResponseComplete
ResponseComplete
FacesResponse Render
ResponseInvoke
Application
UpdateModelValues
ProcessEvents
ProcessEvents
Conversion Errors /Render Response
Validation / ConversionErrors / Render Response
aus JSF 1.2 Spezifikation
JavaServer Faces – Managed Beans
Werden von JSF verwaltet
Scope/Lebensdauer: Request, Session, Application
2 Session Beans in der Anwendung: Business Delegate public @EJB Service service;
Cache für ObjectListDataproviders Zu jeder JSP/JSF Seite gehört eine PageBean
(Request Scope). Creator plaziert hier Aktionen und Komponenteninstanzen.
Zugriff über Unified Expression Language, z.B.:#{TransactionTypes.textFieldName}
Logischer Beanname getter/setter Referenz
Einziger Ort in derPräsentationsschicht,
wo ich Annotations und Dependency Injection
benutzte. Creator2 hat damit Probleme.
Creator2 – eine JSF Seite
Komponenten-bibliothek
Komponenten-baum der Seite
Propertieseiner ausgewählten
Komponente
ProjektBestandteile
Netbeans 5.5 Preview – Java EE 5
GlassFish
JavaDB
server.log
DEBUGGING
Build Prozess = ANT + MAVEN 2 Repo Kleine Projekte, die aus ihren eigenen Quelldateien und
den Produkten (…jar, …ear, …war) anderer Projekte ihr eigenes Produkt erzeugen, z.B.:
Quelldateien
Produkte anderer Projekte
Build Prozess
definiert zugeführt:pom.xml
Produkt des Projekts
Build Prozess = ANT + MAVEN 2 Repo Quelldateien in Subversion auf java.net https://enpasos.dev.java.net/svn/enpasos/financeOpen Source: Apache License, Version 2
Produkte in Maven Repository Externes Produkt Repository: http://www.ibiblio.org/maven2/
Internes Produkt Repository, lokales Verzeichnis
Build Prozess = ANT + MAVEN 2 Repo
MAVEN 2 stellt ANT Tasks zur Verfügung, die den Zugriff auf die Repositories kapseln
Build Prozess mit ANT: macrodef
Vermeidung von Redundanzen: ANT-Makros und deren Auslagerung in zentrale Dateien.
Bootstrap Java SE 5 installierenhttp://java.sun.com/j2se/1.5.0/download.jsp
ANT 1.6.5 installierenhttp://ant.apache.org/bindownload.cgi
Sun Java Studio Creator 2 installierenhttp://developers.sun.com/prodtech/javatools/jscreator/downloads/
Bootstrap Datei in C:/finance ablegenhttp://www.enpasos.com/bootstrap.xml
und startenC:/finance/ant –f bootstrap.xml
Automatisierte Installation
BasisJavaSE,ANT,Creator2,bootstrap.xml
SoftwareDie fehlendenSoftware-Bausteine werden ausdem Internetzusammengesucht
GlassFish(Application Server)wird installiert.
Build,Package,DeployProdukte zu allenTeilprojekten werdengebaut. Als Endprodukt entstehtdie Datei finance.ear,die dann deployedwird.
JavaDB(Datenbank)Repository wirdangelegt unddie als datasourceim Application Serverangelegt.
Browserhttp://localhost:8080/finance
auto auto auto auto
Ease of Development … für mich
Lokale Kontext bezogene Arbeit im Code.
Toolunterstützung, insbesondere wo globale Sicht nötig ist, z.B. WebGUI oder Domainenübersicht (UML).
Verlässliche Standards, wo ich, wenn nötig, nachschlagen kann.
Sun's mission ...
http://www.sun.com/smi/Press/sunflash/2006-04/sunflash.20060411.1.xml
Links
Java EE 5 Tutorial http://java.sun.com/javaee/5/docs/tutorial/doc/
Java EE 5 Specs http://java.sun.com/javaee/5/javatech.html
Creator 2 http://developers.sun.com/prodtech/javatools/jscreator/
NetBeans 5.5 Features http://developers.sun.com/prodtech/javatools/jsenterprise/tpr/learning/tutorials/index.html
diese Folien bei java.net https://enpasos.dev.java.net ...http://enpasos.com/JavaEE5_Creator2_NetBeans55.pdf
Viel Freude mit Java EE 5!
[email protected]. April 2006