Jürgen Höller - Spring 3.1
- Spring 3.1-GA kommt im Dezember; abgestimmt auf den Technology-Snapshot 2011
- JavaEE-6-Server (Glassfish 3, JBoss 7, Webshere 8)
- Tomcat 7
- Cloud-Provider wie Goggle, Amazon, VMware
- Environment abstraction, environment profiles
- Dieselbe Bean wird mehrfach (für unterschiedliche Umgebungen definiert), sodass die Applikation z.B. sowohl auf einem EE-Server als auch unter Tomcat deployt werden kann
- “beans” Tag kann geschachtelt werden
- Java-based application configuration: @Configuration um XML-Namespace-Funktion erweitert (z.B. @EnableTransactionManagement)
- Cache abstraction – deklaratives Caching (@Cacheable, @CacheEvict; Ausführung durch Interceptor)
- Servlet 3.0: WebApplicationInitializer – kann das web.xml ersetzen
- JPA: Package scanning ohne persistence.xml (wenn es nur eine Persistence-Unit gibt) - LocalContainerEntityManagerFactoryBean
Sidenote: Hauptmotivation für Upgrade auf Java 7 ist die VM-Performance
Spring 3.2: Hauptthema Java EE 7 (JCache, JMS 2.0, JPA 2.1…)
Jürgen Höller - Komponentendesign mit Spring
- Bootstrapping ohne XML: AnnotationConfigApplicationContext
- Annotations sollen beschreibenden Charakter haben. Eigene Stereotypes schreiben, um Wiederholung von Annotations (@Service, @Transactional) bzw. Annotation-Parametern zu vermeiden.
- @Autowired bei Constructors!
- Factory-Methoden (@Bean) dürfen in beliebigen Komponenten vorkommen (d.h. nicht nur bei @Configuration, sondern z.B. auch bei @Service)
- @Primary (z.B. statt immer denselben Qualifier) verwenden
- Configuration classes (@Configuration): Sammlung von @Bean-Methoden. Querverweise sind erlaubt!
- javax-Annotations können statt Spring-Annotations verwendet werden (z.B. @Inject statt @Autowired)
- Expression language: Expressions (“#{…}”) werden dynamisch ausgewertet (im Unterschied zu Placeholdern “${…}”)
- @Scheduled
Keynote: Stephen Burton - The New Generation of Enterprise Java
- Design for Failure
- Enge Zusammenarbeit zwischen Dev und Ops (Bsp. Monitoring)
Sandro Guglielmin - Managing Java Applications in Production
Steps for dealing with a (performance) problem in production:
- Visualize the (distributed) Application and Business Transaction
- Identify what is abnormal – focus there when optimizing (no premature optimization)
- Track the business transaction flow – isolate where to optimize
- Look at diagnostics for the slow transaction (e.g. method execution times – Ops must deliver this!), optimize
- Verify optimization
(schwache Session: mostly common sense, könnte man auch in 5-10 Minuten vermitteln)
Michael Plöd JPA/Hibernate Performance Tuning
- Immer aktuelle JDBC-Treiber verwenden
- Fetching-Strategien:
- Batch fetching (auf Entität-Ebene): @BatchSize (entschärft N+1-Problem)
- Subselect fetching (auf Collection-Ebene):
@Fetch(FetchMode.SUBSELECT) - Eager fetching: nie bei mehr als einer Collection pro Entity! Am besten in Mappings für Collections gar nicht verwenden! (nur bei Queries)
- Caching
- Bei Massenverarbeitung (Batches) regelmäßig flushen und clearen! (weil: First-Level-Cache ist in der Verantwortung des Entwicklers)
- @Cache, @Cacheable
- Collection-Cache cacht nur die Primary Keys
- verteilte 2nd-Level-Caches nur von (Caching-/Netzwerk-)Spezialisten aufsetzen lassen!
- immer equals() und hashCode() implementieren!
- Cache konservativ konfigurieren (nur unkritische Entities mit vielen Reads, wenig Writes)
- Abfragen
- früh einschränken, Projektionen verwenden
- immer Bind-Variablen verwenden!
- Query-Cache wird sehr selten benötigt
Keynote: Kevlin Henney - Cool Code
Funny.