Der Application Support ist eine Bibliothek mit integrativen Code für JSF2, JSF Ext, Spring Framework und JPA / Hibernate. Ziel ist, häufig verwendete Komponenten für den einfachen Aufbau einer Applikation erfolgreich zu kombinieren. Application Support liefert eine Reihe nützlicher Bausteine.
Methode | Beschreibung |
---|---|
getContext | Liefert den (Spring-)ApplicationContext |
createEntityManager | Liefert den EntityManager zum Durchführen von Datenbank-Operationen außerhalb der Spring-Injection, wie zum Beispiel beim Bau von Validators und Converters. Der so erhaltene EntityManager muss in jedem Fall in einem try-finally-Block mit der Methode close geschlossen werden. Andernfalls entsteht ein Speicher- und Ressourcen-Leck. |
Daher eine ScopeInjectionFactory:
@Component public class ScopeInjectionFactory implements InjectionFactory<ScopeValue> { @Override public Class<ScopeValue> getAnnotationType() { return ScopeValue.class; } @Override public Object create(Class<?> type, String beanName, ScopeValue annotation) { Scopes scopes = Scopes.instance(); if (scopes == null) return null; Scope scope = scopes.getScope(); if (scope == null) return null; return scope.get(beanName); } }
Die dazugehörige Annotation:
@Retention(RetentionPolicy.RUNTIME) @Target({ElementType.FIELD, ElementType.METHOD}) public @interface ScopeValue { }
Die Klasse EventRequestAttributes stellt diese zur Verfügung:
WebApplicationContext applicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(event.getSession().getServletContext()); EventRequestAttributes request = new EventRequestAttributes(event); try { RequestContextHolder.setRequestAttributes(request); } finally { request.requestCompleted(); RequestContextHolder.resetRequestAttributes(); }
Die Klasse ContextSessionListener implementiert dies bereits für den HttpSessionListener, sodass sie bequem abgeleitet werden kann:
public class UserListener extends ContextSessionListener { @Override public void sessionCreated(HttpSessionEvent event, WebApplicationContext applicationContext) { Authenticator authenticator = applicationContext.getBean(Authenticator.class); authenticator.createSession(event.getSession()); } @Override public void sessionDestroyed(HttpSessionEvent event, WebApplicationContext applicationContext) { Authenticator authenticator = applicationContext.getBean(Authenticator.class); if (authenticator.getCurrentUser() != null) authenticator.logout(event.getSession()); } }