Eberhard Wolff – Java Champion, Autor d. Buchs im dpunkt-Verlag (Eberhard Wolff – Spring) (dpunkt).
Mike Wiesner: Fokus auf Security.
Interface 21. Rod Johnson. Jürgen Höller (Linz) Hauptentwickler
Ausgangspunkt: Kritik an EJB. Deshalb mit POJOs (also known as "Simple Objects") arbeiten.
Java EE Design-Pattern-Ansatz zu komplex.
DI – AOP – Portable Service Abstractions.
Pluggable Architecture. Spring MVC. JNDI JPA, JTI etc.
Leightweight remoting, JMX.
Inversion of Control
Inversion of Control
^-Dependency Lookup ^-DI
^-Setter Injection ^-Constructor Injection
Setter Injection
Spring setzt setter-Werte. Parameterloser Konstruktor nötig.
Nachteil: Inkonsistenter Zustand möglich, wenn wesentliche Properties fehlen. BeanInterface (aber schlecht: abhängig vom Framework) – besser init method => Ruft init-Methode auf. Oder setter mit @required erstellen, dann prüft Spring von selbst. noch besser:
Constructor Injection
Kann mit setter-I. kombiniert werden. Indizierung der Parameter.
<constructor-arg index="0" ref="accountDao" /> (Index kann bei unterschiedlichen Typen auch weggelassen werden).
Dagegen spricht: super()-Aufruf bei Vererbung, Parameter so nicht mehr verwendbar. Kein Mechanismus, den Objekt-Status zu refreshen.
Unit Test
Nicht an Container denken, Objekte mit new() erzeugen.
Spring Containers
IoC und lookup Features. mit new einfach zu erzeugen:
ApplicationContext theContext = new ClassPathXmlApplicationContext("spring-config.xml");
Bsp. deklarativ in web.xml – aber nicht empfohlen. Test-Case-Bsp.: protected String[] getConfigLocations()
Spring-Beans brauchen nicht ausgelesen zu werden. ###Files mit Aufgaben und Präsentation hochladen###
AbstractTransactionalDataSourceSpringContextTests:
Rollt DS nach Testaufruf auf Anfangszustand zurück.
Autowiring
Um Referenzen automatisch zuzuweisen. Nachteil: Weniger verständlich. Empfehlung: Eher nicht benutzen.
AOP
Spring AOP kann ohne DI benutzt werden. Bsp. Eclipse RCP. "Decoration through configuration".
Crosscutting concerns. Advices – Pointcuts. Einige Aspects out-of-the-box.
jamon – Monitoring einfach einzurichten.
AOP-Proxy – bezieht sich nur auf Spring-Beans (!), also z.B. nicht bei Selbstreferenzierung. Aspekte für AspectJ transformierbar von Spring AOP. Unterschiede: Keine Feldzugriffe mit Spring AOP. Dadurch, dass Bytecode erzeugt wird, kann AspectJ auch selbstinstantiierende Klassen finden.
Advice-Typen: around (via ProceedingJoinPoint), before, after, throws.
Kurzer Verweis auf http://www.easymock.org/
Beispiel für Einbindung.
<aop:config>
<aop:aspect id="traceAspect" ref="traceInterceptor">
<aop:around pointcut="execution(* dao.*+.*(..))" method="trace" />
</aop:aspect>
</aop:config>
Aufruf Unit-Test auch mit -DSPRING_XML_FILE=aop-pojo.xml in Eclipse als VM arg. Annotation-Aspects gut für Transaktionen, ansonsten immer schlecht, wo es schlecht ist, wenn der Code geändert wird.
@Pointcut("execution(* dao.*+.*(..))")
public void traceMethods() {
}
Hack, damit über
@Around("traceMethods()")
darauf referenziert werden kann.
Annotations-Aspekt kann auch in AspectJ wiederverwendet werden, XML-POJO nicht. Bestimmte Views der SpringIDE: Bean Explorer; Bean Cross Reference; Spring AOP Event Trace.
Effective Middle Tier
Service Objects /Business Facade _transactional boundaries. Logik auch in Domain-Objekt, zu Lasten der Interoperabilität.
Stateless, POJO.
DAO Interfaces
DAO Implementations
Data Access Layer
Persistence hidden; Impl Class; Throws unchecked exception; Stateless, POJO. Gut mit Singleton Spring Beans. Domänenobjekte. POJOs.
Distributed Spring
Referenzen auf Server injizieren. RMI, HttpInvoker – http + Serialisierung.
Server erstellen. Client erstellen. Seeeehr einfach. Funktioniert auch mit JMX. BeanFactoryPostProcessor. (Erläuterung, wie man über PropertyPlaceholderConfigurer Werte in *.properties-Datei [oder DB oder Input etc. etc.] auslagert und Werte in XML mit ${valuename} auslagert.
spring-modules hat auch eine Impl für Commons Configuration.
Template Pattern
Extreme Vereinfachung von Zugriff auf Persistenzlösungen + JMS. Von Spring verwaltet, ohne Mächtigkeit zu verlieren. Beispiel:
getSimpleJdbcTemplate().update("DELETE FROM T_ITEM WHERE ID=?", "name");
Exception Hierarchies.
DataAccessException – all exceptions extend one single class. Erweiterbar. Vorbereitete Klassen, z.B. für SPs, die Fehlercode zurückgeben.
Datasource auch über JNDI-Lookup im J EE Appserver.
###Notiz: Wenn man Convention over Configuration folgte, sollte man IMHO für Spring stets drei Defaultverbindungen verwenden.###
Transactions
DAOs nehmen automatisch an Transaktionen teil. Gilt auch für Verbindungen von Persistenzlösungen. DataSource über Connection. Two-Phase-Commit: JOTEM/Atomicus f. Java SE. Ansonsten Integration mit Appserver und JTA.
iBATIS
"Sweet spot" zwischen JDBC und ORM. Wohlbekannt… 🙂
Integration mit JavaSpaces: AUf Java Modules (?). Spring ist technologieneutrales API.
MSB – Support injizierbar.
Spring + JSF
Auf Spring Beans via JSF zugreifen, als wären es Managed Beans.
jsf-spring-Projekt: Umgekehrt.
Quartz
Wie JMS. POJO-Bean mit Aufrufmethoden. Sah sehr einfach aus.
Security
Acegi. Unabhängiges Framework. ServletFilter.
KGs Fazit:
Der Stoff eines ganzen Buches von zwei höchstprofessionellen, aber augenscheinlich gelangweilt-genervervten-erschöpften "Trainern". Hätte ich den Enthusiasmus, das Feuer bei der Präsentation als Richtschnur genommen, wäre ich unweigerlich zur Vermutung gelangt, die beiden wären vom Java EE Marketing aufgekauft. Spring ist ein excellentes Framework, das die Entwicklung verteilter Anwendungen ungemein erleichtern kann. Dies wurde zwar vermittelt, aber in einer Weise, als ob es sich um etwas Langweiliges handele. Für einen "Rundumschlag" an einem Tag, der IMHO damit enden sollte, dass alle Entwickler begeistert noch auf der Heimfahrt an den Beispielen weiterarbeiten, fehlte der Elan, vielleicht auch die didaktischen Fähigkeiten von Eberhard Wolff, dessen Naturell aber vielleicht eher auf Coolness/Phlegma hingerichtet ist.
Schreibe einen Kommentar