Prüfen ob Klasse fertig instanziiert wurde

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:

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:

AceTheFace

Mitglied
Hm,

der Filter scheint nicht das Problem zu sein. Wenn ich den raus nehme, schmeisst halt eine andere Klasse die Exception. Irgendwie wir die Klasse nicht richtig instanziiert...jemand ne Idee?
Habe eben ein bisschen debuggt und es sieht so aus, als ob er nach dem Abarbeiten der For-Schleife nicht mehr im static-Block weitermacht sondern "returnt". Warum weiss ich nicht....

Die Zeile "configuration.addClass(Rights.class);" wird also nie erreicht...

Gruß,
Ace
 
Zuletzt bearbeitet:

AceTheFace

Mitglied
OK, Mein Fehler!!

Der hat immer ne Exception innerhalb der for-schleife geschmissen weil er ein Mapping nicht gefunden hat...und ich hab die exception abgefangen ohne sie anzeigen zu lassen...na ja, jetzt weiss ichs. 'Tschuldigung für die Störung.

Gruß,
Ace