INFITT01 - Internettechnologie WEEK 8
Programma • Databases (JDBC, JNDI, ORM, JPA) • MVC & Spring/Struts • EJB
Databases • Veel web applicaties moeten informatie over langere tijd op kunnen slaan. Een voor de hand liggende manier is om deze informatie in een database op te slaan. Een aantal: • • • • • • • •
Oracle SQLServer MySql Postgres HSQL McKOI Daffodil Firebird
JDBC....wat is dat(1)? Om een database vanuit een webapp te kunnen benaderen heb je een jdbc driver nodig. Dit is een jar welke in het CLASSPATH moeten komen te staan van de webserver, bijv de WEB-INF/lib of, in geval van Tomcat, in de CATALINA_HOME/lib map. Dan is de driver voot alle webapps beschikbaar
JDBC....wat is dat(2)? public class TestDBOracle { public static void main(String[] args) throws ClassNotFoundException, SQLException { Class.forName("oracle.jdbc.driver.OracleDriver"); String url = "jdbc:oracle:thin:@myhost:1521:xe"; Connection conn = DriverManager.getConnection(url,"scott","tiger"); conn.setAutoCommit(false); Statement stmt = conn.createStatement(); ResultSet rset = stmt.executeQuery("select BANNER from SYS.V_$VERSION"); while (rset.next()) { System.out.println (rset.getString(1)); } stmt.close(); System.out.println ("Ok."); } }
JDBC....wat is dat(3)? Er zijn een aantal nadelen aan het gebruik van een directe JDBC connectie: • Gebruikersnaam/wachtwoord opgeslagen in iedere web app (bijv. als servlet init parameter) die een database gebruikt. • Programmatisch beheren van database connecties.
Wat je wilt is een 'pool' waarin database connecties aanwezig zijn. Als je er een nodig heb dan vraag je er een. De connectie wordt automatisch teruggezet in de pool als je 'm niet meer nodig hebt.
JNDI....wat is dat(1)? JNDI = Java Naming & Directory Interface Het is een collectie interfaces/classes welke een soort telefoonboek vormen binnen een webserver.
JNDI....wat is dat(2)? De essentie van JNDI i.c.m. databases is: 1. Koppel een datasource binnen bijv. Tomcat aan een logische 'JNDI' naam, meestal iets als 'jdbc/klanten' 2. Vanuit een servlet kun je een connectie verkrijgen middels een 'JNDI' aanroep. 3. Een pool manager binnen Tomcat regelt het openen en sluiten van database connecties. 4. Het handige van JNDI is dat je niet hoeft te weten als programmeur waar bijv. de database staat...dat is transparant voor je.
ORM/JPA....wat is dat(1)? De manier waar op relationele databases en Java met data om gaan verschilt sterk. Relationele database: data wordt in tabellen/rijen opgeslagen. Java: Data wordt als object met attributen opgeslagen/weergeven.
Probleem: hoe kun je rijen 'mappen' naar objecten? Dit heet Object Relationale Mapping
ORM/JPA....wat is dat(2)? Zonder een mapping is het in Java lastig werken met bijv. een java.sql.ResultSet. Dit is in feite een tweedimensionale array waar je vervolgens door heen moet 'loopen' om de juiste data te vinden. Wat je wilt is dat je na een database query een 'Customer' object terug krijgt ipv een ResultSet met klant data, bijv: Customer cust = dbService.getCustomer(1);
ORM/JPA....wat is dat(3)? JPA is een Java Specificatie die beschrijft hoe je objecten kunt 'mappen' op rijen in tabellen. Een centrale class binnen JPA is de 'javax.persistence.EntityManager'. Hibernate is een implementatie van JPA. Meer info: http://download.oracle.com/javaee/5/tutorial/doc/bnbpz.html
MVC....wat is dat(1)? MVC staat voor Model-View-Controller en is een Design Pattern. In principe zou je een hele webapp in een servlet/JSP kunnen bouwen.......ja...dat kan......is het handig? Nou nee...... MVC wil zeggen dat je een applicatie (web, fat client) onderverdeeld in een data deel (Model) en layout deel (View) en een verbindend deel tussen deze twee (Controller).
MVC....wat is dat(2)? Hoe kun je dit gebruiken binnen een webapp? Een paar vuistregels: • Gebruik JSP voor de View. Een JSP er alleen om de data te tonen en haalt nooit zelf data op uit bijv. een database. Logica (EL, geen java)in een JSP is er alleen tbv layout. • Servlets worden gebruikt als Controller. Zij delegeren het ophalen van data voor de view naar een andere class welke de data op haalt. De opgehaalde data wordt bijv. in het request gezet tbv de View. • POJO classes (Java Beans) fungeren als Model. Data wordt opgehaald, bewerkt en opgeslagen in Java Beans door bijv. Service classes.
MVC....wat is dat(3)?
MVC....wat is dat(4)? De gele Controller is een Service class welke een bepaalde interface implementeert, bijvoorbeeld een interface 'KlantService' met een methode om alle klanten op te halen. Maak vervolgens een class die deze interface implementeert. Zo bevorder je 'loose coupling' (en dat is goed). Je kunt nu je implementatie veranderen zonder de aanroepende classes te hoeven veranderen In aanroepende servlet: KlantService ks = new KlantServiceImpl(); Customer cust = ks.getCustomer(1);
KlantServiceImpl kan nu makkelijk vervangen worden door een andere class die KlantService implementeert
MVC....wat is dat(5)? Er zijn frameworks die helpen het MVC paradigma te implementeren. • • • •
Struts (gedateerd) Spring (complex, wordt veel gebruikt) Wicket JSF
EJB....wat is dat(1)? Tot nu toe zijn alleen servlet containers aan bod gekomen. Servlet containers zijn handig maar kunnen beperkingen hebben in zware Enterprise applicaties. Dan kan het gebruik van een applicatie server handig zijn. In een applicatie server kun je (E)nterprise (J)ava (B)eans gebruiken om business logica uit te voeren.
EJB....wat is dat(2)?
EJB....wat is dat(3)? Applicatie Servers moeten volgens de specificaties standaard een aantal diensten leveren die niet standaard door een servlet container geleverd worden zoals bijv: • • • • • •
JNDI JMS JDBC RMI Security Transactie management
EJB....wat is dat(4)? Een voorbeeld EJB3 bean. Deze bean wordt gedeployed in een applicatie server en zou vanuit een servlet container op een andere machine aangeroepen kunnen worden via JNDI. @Stateless public class CalculatorImpl implements CalculatorRemote, CalculatorLocal { public int sum(int add1, int add2) { return add1+add2; } public int multiply(int mul1, int mul2) { return mul1*mul2; } }
EJB....wat is dat(5)? Een aantal applicatie servers: • • • • • •
Jonas Glassfish Oracle Weblogic JBoss Geronimo OpenEJB