Application Frameworks

Werbung
Application Frameworks
Birgit Hecker
Seminar Software Engineering
1
Birgit Hecker
Agenda
Grundlagen
Spring Framework
Dependency Injection
Aspektorientierte Programmierung
Datenbankanbindung
Modell View Controller
Sicherheit
Spring vs. Java EE
Zusammenfassung
Application Frameworks
2
Birgit Hecker
Agenda
Grundlagen
Spring Framework
Dependency Injection
Aspektorientierte Programmierung
Datenbankanbindung
Modell View Controller
Sicherheit
Spring vs. Java EE
Zusammenfassung
Application Frameworks
3
Birgit Hecker
Grundlagen
Framework
Framework
„Ein Framework ist eine Menge von kooperierenden Klassen, die einen
wiederverwendbaren Entwurf für einen bestimmten Anwendungskontext
vorgeben. Das Framework bestimmt dabei die Architektur der Applikation.“
Umkehrung des Kontrollflusses (Inversion of Control)
Hollywood-Prinzip („Don’t call us, we call you“)
Application Frameworks
4
Birgit Hecker
Agenda
Grundlagen
Spring Framework
Dependency Injection
Aspektorientierte Programmierung
Datenbankanbindung
Modell View Controller
Sicherheit
Spring vs. Java EE
Zusammenfassung
Application Frameworks
5
Birgit Hecker
Spring
OpenSource-Framework
Grundlage: Buch "Expert One-On-One J2EE Design and
Development“ von Rod Johnson
Merkmale: Dependency Injection und AOP
Module
Quelle: http://static.springframework.org
Application Frameworks
6
Birgit Hecker
Beispielanwendung
Bibliothek
Application Frameworks
7
Birgit Hecker
Beispielanwendung
Application Frameworks
8
Birgit Hecker
Spring Bean
Java-Klasse, welche über eine spezielle Konfiguration zur Spring
Bean wird
Beispiel:
<!-- DataSource -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.
SingleConnectionDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost/bib" />
<property name="username" value=“sa" />
<property name="password" value=“123" />
</bean>
Application Frameworks
9
Birgit Hecker
Spring Container
erstellt, verbindet, konfiguriert und verwaltet alle Spring-Beans
über deren kompletten Lebenszyklus
Zwei Typen
BeanFactory
ApplicationContext
BeanFactory factory = new XmlBeanFactory
(new FileSystemResource("applicationContext.xml"));
SampleBean sampleBean =
(SampleBean)factory.getBean("sampleBean");
Application Frameworks
10
Birgit Hecker
Agenda
Grundlagen
Spring Framework
Dependency Injection
Aspektorientierte Programmierung
Datenbankanbindung
Modell View Controller
Sicherheit
Spring vs. Java EE
Zusammenfassung
Application Frameworks
11
Birgit Hecker
Dependency Injection
Programmiertechnik um die Abhängigkeiten zwischen Objekten zu
minimieren
Übergabe der Verantwortung für die abhängige Objekten an das
Framework
Injizieren der Abhängigkeiten zur Laufzeit z. B. über XML-Datei
Application Frameworks
12
Birgit Hecker
Dependency Injection
Setter-Injection
<bean id=“Ex4711" class="bib.Exemplar">
<property name="id"
value="4711" />
<property name="book" ref="B4711" />
</bean>
Constructor-Injection
<bean id="Ex4711" class="bib.Exemplar">
<constructor-arg value="4711" />
<constructor-arg ref="B4711" />
</bean>
Application Frameworks
13
Birgit Hecker
Agenda
Grundlagen
Spring Framework
Dependency Injection
Aspektorientierte Programmierung
Datenbankanbindung
Modell View Controller
Sicherheit
Spring vs. Java EE
Zusammenfassung
Application Frameworks
14
Birgit Hecker
Aspektorientierte Programmierung
Zur Vermeidung von Codewiederholungen
Prinzip „Separation of Concerns“
Auslagerung von sich wiederholenden Teilen: Aspekt
Aspekte = Querschnittsbelange (Cross Cutting Concerns)
In Spring: Nutzung via Proxy
Joinpoint
Stelle, an der in der Anwendung ein Aspekt eingebunden werden kann
Pointcut
Programmkonstrukt zur Auswahl von einem oder mehreren Joinpoints
Wo wird der Aspekt ausgeführt?
Advice
Was wird wann ausgeführt?
Application Frameworks
15
Birgit Hecker
Aspektorientierte Programmierung
Advice
package aop;
public class LoggingAdvice implements MethodInterceptor {
public Object invoke(MethodInvocation methodInvocation){
Log log;
log = LogFactory.getLog(getClassName(methodInvocation));
log.info("Class : " + getClassName(methodInvocation));
log.info("Method : " + getMethodName(methodInvocation));
log.info("Arguments : " + getArguments(methodInvocation));
...
//ausführen der eigentlichen Methode
result = methodInvocation.proceed();
...
}
...
}
Application Frameworks
16
Birgit Hecker
Aspektorientierte Programmierung
AOP Konfiguration
<!-Advice-->
<bean id="loggingInterceptor" class="aop.LoggingAdvice" />
<!—Pointcut-->
<bean id="loggingPointcut"
class="org.springframework.aop.support.JdkRegexpMethodPointcut">
<property name="pattern" value="services.*" />
</bean>
<!—Advisor-->
<bean id="loggingAdvisor"
class="org.springframework.aop.support.DefaultPointcutAdvisor">
<property name="advice" ref="loggingInterceptor" />
<property name="pointcut" ref="loggingPointcut" />
</bean>
Application Frameworks
17
Birgit Hecker
Agenda
Grundlagen
Spring Framework
Dependency Injection
Aspektorientierte Programmierung
Datenbankanbindung
Modell View Controller
Sicherheit
Spring vs. Java EE
Zusammenfassung
Application Frameworks
18
Birgit Hecker
Datenbankanbindung
Spring DAO
Kapselung des Datenbankzugriffs durch Data Access Objects
Verwendung des Template-Entwurfsmuster
Quelle: [Wa08]
Application Frameworks
19
Birgit Hecker
Datenbankanbindung
DAO
package jdbc;
public class BookDAO extends JdbcDaoSupport implements IBookDao{
public List getAll() {
return (List) getJdbcTemplate().query(
"SELECT DESCRIPTION, ISBN, AUTOR, ID FROM Book ",
new BookRowMapper());
}
…
}
<!– DAO -->
<bean id="bookDAO" class="jdbc.BookDAO">
<property name="jdbcTemplate" ref="template" />
</bean>
Application Frameworks
20
Birgit Hecker
Datenbankanbindung
Datenquelle und Template
JDBC-Anbindung
<!-- Datenquelle -->
<bean id="datasource" class=
"org.springframework.jdbc.datasource.SingleConnectionDataSource">
<property name=”driverClassName” value=”com.mysql.jdbc.Driver” />
<property name=”url” value=”jdbc:mysql://localhost/bib” />
<property name=”username” value=”sa” />
<property name=”password” value=”123” />
</bean>
<!-- JDBC Template -->
<bean id="template" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource" />
<property name="nativeJdbcExtractor">
<bean class="org.springframework.jdbc.support.nativejdbc.
CommonsDbcpNativeJdbcExtractor" />
</property>
</bean>
Application Frameworks
21
Birgit Hecker
Agenda
Grundlagen
Spring Framework
Dependency Injection
Aspektorientierte Programmierung
Datenbankanbindung
Modell View Controller
Sicherheit
Spring vs. Java EE
Zusammenfassung
Application Frameworks
22
Birgit Hecker
Modell View Controller
Spring MVC
2
3
1
4
Quelle: [Wa08]
<bean name=”/book.htm“ class=“mvc.BookController“>
<property name=”bookService” ref=”bookService”/>
</bean>
Application Frameworks
23
Birgit Hecker
Modell View Controller
Controller
package mvc;
public class BookController extends AbstractController{
private BookService bookService;
private String view = "booklist";
public BookService getBookService() {
return bookService;
}
public void setBookService(BookService bookService) {
this.bookService = bookService;
}
protected ModelAndView handleRequestInternal(HttpServletRequest
request, HttpServletResponse response) throws Exception {
Map model = new HashMap();
model.put("books", bookService.getBooks());
return new ModelAndView(view, model);
}
Application Frameworks
24
Birgit Hecker
Modell View Controller
Spring MVC
6
5
Quelle: [Wa08]
<bean id="viewResolver" class="…InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
Ergebnis: /WEB-INF/jsp/booklist.jsp
Application Frameworks
25
Birgit Hecker
Modell View Controller
6
View
<%@ page language="Java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html> <head>…</head>
<body>
<h1>Willkommen in der Bibliothek</h1><br>
<h2>Hier sehen Sie alle verfügbaren Bücher</h2><br>
<table>
<tr><th>Buch</th><th>Autor</th></tr>
<c:forEach items="${books}" var="book">
<tr>
<td><c:out value="${book.description}"/></td>
<td><c:out value="${book.autor}"/></td>
<td><c:out value="${book.ISBN}"/></td>
</tr>
</c:forEach>
</table>
</body>
</html>
Application Frameworks
26
Birgit Hecker
Agenda
Grundlagen
Spring Framework
Dependency Injection
Aspektorientierte Programmierung
Datenbankanbindung
Modell View Controller
Sicherheit
Spring vs. Java EE
Zusammenfassung
Application Frameworks
27
Birgit Hecker
Sicherheit
Spring Security
Authentifizierung und Autorisierung auf Webanfrage- und
Methodenaufrufebene
Spring Security nutzt dafür DI und AOP
Authentification-Managers überprüft den Benutzernamen und das
Passwort
Access-Decision-Manager prüft die Benutzerrechte
Application Frameworks
28
Birgit Hecker
Sicherheit
Authentifizierung
Quelle: [Wa08]
Application Frameworks
30
Birgit Hecker
Sicherheit
Autorisierung
Aufruf einer geschützten Methode
Application Frameworks
34
Birgit Hecker
Sicherheit
Autorisierung
<bean id="securityInterceptor" class="org.springframework.security.
method.aopalliance.MethodSecurityInterceptor">
<property name="authenticationManager">
<ref bean="authenticationManager"/>
</property>
<property name="accessDecisionManager">
<ref bean="accessDecisionManager"/>
</property>
<property name="objectDefinitionSource">
<value>
services.BookService.getBooks*=ROLE_USER
services.LendingService.getLendings*=ROLE_USER
services.UserService.getUsers*=ROLE_ADMIN
services.LendingService.deleteById*=ROLE_ADMIN
services.LendingService.save*=ROLE_ADMIN
</value>
</property>
</bean>
Application Frameworks
35
Birgit Hecker
Sicherheit
Autorisierung
<!--AutoProxy-->
<bean id="autoProxyCreator" class="org.springframework.aop.
framework.autoproxy.BeanNameAutoProxyCreator">
<property name="interceptorNames">
<list>
<value>securityInterceptor</value>
</list>
</property>
<property name="beanNames">
<list>
<value>bookService</value>
<value>lendingService</value>
<value>userService</value>
<value>exemplarService</value>
</list>
</property>
</bean>
Application Frameworks
36
Birgit Hecker
Agenda
Grundlagen
Spring Framework
Dependency Injection
Aspektorientierte Programmierung
Datenbankanbindung
Modell View Controller
Sicherheit
Spring vs. Java EE
Zusammenfassung
Application Frameworks
37
Birgit Hecker
Vergleich Spring und Java EE
Spring als Lightweight-Modell zu Java EE
Dependency Injection
Wird von beiden unterstützt
In Java EE nur für Java EE Elemente wie EJB, Servlets
Konfiguration
Spring: Deskriptoren
Java EE: Annotationen
AOP
Spring: Grundfunktionalität
Java EE: Interceptor-Konzept für EJB 3.0
Java EE ist ein Standard
Application Frameworks
38
Birgit Hecker
Agenda
Grundlagen
Spring Framework
Dependency Injection
Aspektorientierte Programmierung
Datenbankanbindung
Modell View Controller
Sicherheit
Spring vs. Java EE
Zusammenfassung
Application Frameworks
39
Birgit Hecker
Zusammenfassung und Ausblick
Spring
DI und AOP
Datenbankanbindung
MVC
Sicherheit
Ausblick
Gute Dokumentation von Spring verfügbar
Bücher und Webseiten
Weiterentwicklung und Unterstützung
Application Frameworks
40
Birgit Hecker
Vielen Dank für die
Aufmerksamkeit!
Application Frameworks
41
Birgit Hecker
Herunterladen