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());
}
}