AceTheFace
Mitglied
Hallo,
in meiner Servletbasierten Anwendung benutze ich einen Servletfilter, der nach dem Rendern der Seite die Hibernate-Transaktionen commited (falls noch nicht geschehen) und die Hibernate-Session schliesst. (So gelesen im Buch "Hibernate in Action")
Der Filter sieht so aus:
Es werden also statische Methoden meines PersistenceManagers aufgerufen. Soweit so gut. Nun habe ich allerdings, das Problem, dass bei der Instanziierung des PersistenceManagers (mitten im static {}-Block!) der Filter zuschlägt und dann natürlich nen "NoClassDefFound"-Fehler schmeisst, weil der Persistenzmanager ja noch nicht fertig ist.
Gibt es eine Möglichkeit bestimmt Blöcke vom Filter auszuschliessen? Oder kann ich innerhalb des Filters prüfen ob das Objekt fertig instanziiert ist? Mit try-catch habe ich es nicht geschafft das Schmeissen der ServletException zu verhindern...
Hier noch der static-Block des PersistenzManagers (der Filter schlägt innerhalb der For-Schleife zu):
in meiner Servletbasierten Anwendung benutze ich einen Servletfilter, der nach dem Rendern der Seite die Hibernate-Transaktionen commited (falls noch nicht geschehen) und die Hibernate-Session schliesst. (So gelesen im Buch "Hibernate in Action")
Der Filter sieht so aus:
Java:
public class PersistenceFilter implements Filter {
public void init(FilterConfig conf) throws ServletException {}
public void doFilter(ServletRequest request,
ServletResponse response, FilterChain chain)
throws IOException, ServletException {
chain.doFilter(request, response);
try {
PersistenceManager.commitTransaction();
} catch (Throwable t) {
} finally {
try {
PersistenceManager.closeSession();
} catch (Exception e) {
}
}
}
public void destroy() {}
}
Es werden also statische Methoden meines PersistenceManagers aufgerufen. Soweit so gut. Nun habe ich allerdings, das Problem, dass bei der Instanziierung des PersistenceManagers (mitten im static {}-Block!) der Filter zuschlägt und dann natürlich nen "NoClassDefFound"-Fehler schmeisst, weil der Persistenzmanager ja noch nicht fertig ist.
Gibt es eine Möglichkeit bestimmt Blöcke vom Filter auszuschliessen? Oder kann ich innerhalb des Filters prüfen ob das Objekt fertig instanziiert ist? Mit try-catch habe ich es nicht geschafft das Schmeissen der ServletException zu verhindern...
Hier noch der static-Block des PersistenzManagers (der Filter schlägt innerhalb der For-Schleife zu):
Java:
static {
PluginRegistry registry = PluginRegistry.getInstance();
Configuration configuration = new Configuration();
PersistentObject[] objarray = (PersistentObject[]) registry.getPlugins(PersistentObject.class);
for(int i=0;i<objarray.length;i++) {
configuration.addClass(objarray[i].getClass());
}
configuration.addClass(Rights.class);
try {
// Create the SessionFactory from hibernate.cfg.xml
sessionFactory = configuration.configure().buildSessionFactory();
} catch (Throwable e) {
throw new ExceptionInInitializerError(e);
}
}
Zuletzt bearbeitet: