Java EE 6, eclipse, maven, jsf, hibernate, mysql

RelaX

Aktives Mitglied
Guten Tag @ all,

ich bin langsam echt am verzweifeln und bin so etwas von sauer!!! Vielleicht kann mir hier jemand helfen.

Ich muss Folgendes benutzen: Eclipse, Hibernate, JSF, Maven, MySQL

Das ganze hab ich jetzt aufgesetzt und schon ein kleines Programm geschrieben. Jetzt funzt alles bis auf das speichern von Daten.

Hier meine Klassen:

Code:
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;


public class HibernateUtil {

    private static final SessionFactory sessionFactory;

    static {
        try {
            // Create the SessionFactory from hibernate.cfg.xml
            sessionFactory = new Configuration().configure().buildSessionFactory();
        } catch (Throwable ex) {
            // Make sure you log the exception, as it might be swallowed
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }
    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    public static void closeSession(Session session) {
        try {
            if ((session != null) && (session.isOpen())) {
                session.close();
            }
        }
        catch (HibernateException he) {
        }
    }
}

Und so speicher ich die Daten:
Code:
Session session = null;

        try {
            session = HibernateUtil.getSessionFactory().getCurrentSession();
            session.beginTransaction();
            session.saveOrUpdate(new Rezept());
            session.flush();
            session.getTransaction().commit();
        }
        catch(Exception e) {
            e.printStackTrace();
        }
        finally {
            HibernateUtil.closeSession(session);
        }

Dann kommt diese Meldung:
Code:
2015-12-13T17:27:51.782+0100|Warnung: java.lang.NoClassDefFoundError: Could not initialize class de.headliners.engine.HibernateUtil
javax.el.ELException: java.lang.NoClassDefFoundError: Could not initialize class de.headliners.engine.HibernateUtil
    at com.sun.el.parser.AstValue.invoke(AstValue.java:293)
    at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304)
    at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:149)
    at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
    at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:814)
    at javax.faces.component.UICommand.broadcast(UICommand.java:300)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:416)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:283)
    at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206)
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180)
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:283)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:132)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:111)
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:536)
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:591)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:571)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NoClassDefFoundError: Could not initialize class de.headliners.engine.HibernateUtil
    at de.headliners.universal.rate_it.RatingService.rateIt(RatingService.java:53)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at com.sun.el.parser.AstValue.invoke(AstValue.java:289)
    ... 39 more

2015-12-13T17:27:51.792+0100|Schwerwiegend: java.lang.NoClassDefFoundError: Could not initialize class de.headliners.engine.HibernateUtil
    at de.headliners.universal.rate_it.RatingService.rateIt(RatingService.java:53)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at com.sun.el.parser.AstValue.invoke(AstValue.java:289)
    at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304)
    at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:149)
    at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
    at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:814)
    at javax.faces.component.UICommand.broadcast(UICommand.java:300)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:416)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:283)
    at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206)
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180)
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:283)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:132)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:111)
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:536)
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:591)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:571)
    at java.lang.Thread.run(Thread.java:745)

Wie gesagt ich bin wirklich mit den Nerven am Ende denn ich kann mir einfach nicht erklären wieso das nicht klappen möchte!

Hoffe hier kann jemand helfen.
 
Ein java.lang.NoClassDefFoundError hat üblicherweise nix direkt mit Java EE zu tun, sondern, wie eigentlich alle Fehlermeldungen aus java.lang.*, eher mit mangelndem Verständnis von Java Grundlagen.
Für Ursachen und mögliche Lösungen zu deinem Fehler schaue z.B. hier: http://stackoverflow.com/questions/17973970/how-to-solve-java-lang-noclassdeffounderror

Ganz unabhängig davon sieht dein ganzer hier geposteter Code aber sehr suspekt aus. Ohne ganz besondere Gründe dafür zu haben solltest du zum Beispiel niemals selbst eine Transaction starten, sondern das ausschließlich dem Server überlassen .. um einfach mal ein Beispiel zu nennen.
 
Erstmal danke für dein Feedback.

Das Problem liegt denke ich sehr wohl bei Java EE bzw. Glassfish. Es scheint so als würde er die Datei nicht richtig deployen denn ein Ausführen des Codes in einer normalen Applikation funktioniert ja schon mal! Daher gehe ich stark davon aus dass da was auf dem Server nicht richtig funktioniert.

Die Frage ist nur: Wie behebe ich das Problem?
 
2015-12-13T17:27:51.792+0100|Schwerwiegend: java.lang.NoClassDefFoundError: Could not initialize class de.headliners.engine.HibernateUtil
at de.headliners.universal.rate_it.RatingService.rateIt(RatingService.java:53)

Wie sieht denn dein RatingService aus?
 
Mein RatingService ist eine ManagedBean:

Code:
@ManagedBean
@ViewScoped
public class RatingService {

public void rateIt() {
        FacesContext context = FacesContext.getCurrentInstance();
        Map<String,String> params = context.getExternalContext().getRequestParameterMap();

        System.out.println("------------------------------------------------");
        System.out.println("classname: " + params.get("data_classname"));
        System.out.println("dimension: " + params.get("data_dimension"));
        System.out.println("id: " + params.get("data_id"));
        System.out.println("star_count: " + params.get("data_star_count"));
        System.out.println("clicked: " + params.get("clicked"));
        System.out.println("------------------------------------------------");
       
        RequestContext.getCurrentInstance().execute("read_rating_result(" + "'angekommen'" + ")");


       
        Session session = null;

        try {
            session = HibernateUtil.getSessionFactory().getCurrentSession();
            session.beginTransaction();
            session.saveOrUpdate(new Rezept());
            session.flush();
            session.getTransaction().commit();
        }
        catch(Exception e) {
            e.printStackTrace();
        }
        finally {
            HibernateUtil.closeSession(session);
        }
    }

    public Rezept getRezept() {
        return rezept;
    }

    public void setRezept(Rezept rezept) {
        this.rezept = rezept;
    }
}

Also einfach das Sysout ignorieren. Ich kann Methoden von der View aufrufen, das klappt wunderbar. Sogar mit Javascript. Ich hab mittlerweile auch von Java8 zu Java7 gewechselt, auch ohne erfolg.

In den Build-Path sind die Maven-Repos unter Export auch angekreuzt.

Er kommt ja nicht einmal zur Transaktion weil er ja schon hier:
session = HibernateUtil.getSessionFactory().getCurrentSession();
Die Exception wirft. An der HibernateUtil kann es eigentlich auch nicht liegen da diese ja in einer normalen Applikation wie gesagt speichert und Tabellen anlegt usw. Nur wenn ich das ganze in einer JavaEE Anwendung packe und dann auf einen Glassfish deploye kommt der Fehler.

Ich hab hier ja auch Vorlesungsunterlagen und da ist alles genau so beschrieben wie ich es gemacht habe. Meine Kollegen brauch ich nicht zu fragen, die machen alle nichts :-(

Das ganz große Problem ist, das wir bis nächstes Jahr keine Vorlesungen mehr haben und da geht eine menge Zeit verloren wenn ich nicht weiter komme.

Ich würde auch das ganze Projekt zuschicken falls jemand ein Glassfish+Eclipse+MySQL auf seinem Rechner hat.
 
Um das zunächst mal auszuschließen: Wie schaut denn der Inhalt vom WEB-INF/lib folder bei deinem war-file aus? Hast du da alle hibernate Abhängigkeiten drin?
Falls ja, dann setz mal breakpoints in all deine static initializer und geh starte deine App im Debug-Modus und schau, wo genau es knallt.
Wo genau liegt im war fiel dein hibernate-config file?
Hab Hibernate noch nie auf dem GlassFish benutzt, sondern für den JPA-Teil dort immer EclipseLink verwendet...daher ist das gerade ein bisschen Tappen im Dunkeln 🙂

Außerdem interessant:
Welchen GF benutzt du? Und welche Hibernate Version?
 
Also ich benutze den Glassfish 4.1.1 und Hibernate

Ich hab im Folgenden Ordner nachgeschaut: glassfish/domains/domain1/applications/MyProjekt

Dort befindet sich dann der WEB-INF mit classes, libs, recources sowie faces-config.xml, web.xml und glassfish-web.xml

Die Hibernate config befindet sich im classes ordner und laut dem Server start, findet der diese auch. Also vor der Exception, wird richtig verbunden. Daher schließe ich das zumindest aus.

Ich hab bis auf die HibernateUtil, keine static inits. Und diese hab ich gerade mal getestet.

Sobald ich diese Klasse aufrufe bekomme ich Probleme. Ich kann mir nur grad nicht erklären wieso das denn so ist. Ich hab in meiner Testmethode, welche ich durch einen Button auslöse Folgendes aufgerufen:

System.out.println(HibernateUtil.getSessionFactory() + "");

Oky zugegeben: Die Klasse stammt von den Vorlesungen und ich hab Sie einfach so übernommen. Ohne Glassfish funktioniert die auch. Leider verstehe ich auch nicht wie das initialisieren der sesseionFactory funktioniert und wann das geschieht.

Code:
private static final SessionFactory sessionFactory;

    static {
        try {
            // Create the SessionFactory from hibernate.cfg.xml
            sessionFactory = new Configuration().configure().buildSessionFactory();
        } catch (Throwable ex) {
            // Make sure you log the exception, as it might be swallowed
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

Ich programmiere schon 5 Jahre, also sooo unerfahren bin ich nicht aber dieses Konstrukt, kommt mir merkwürdig vor. Liegt es vielleicht daran?

Ansonsten finden sich alle libs im Ordner WEB-INF/lib, da scheint nichts zu fehlen.

Hier ist meine Eintragung der Maven:

Code:
<dependencies>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.0.1.Final</version>
        </dependency>
        <dependency>
            <groupId>javax.persistence</groupId>
            <artifactId>persistence-api</artifactId>
            <version>1.0.2</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.32</version>
        </dependency>
        <dependency>
            <groupId>org.primefaces</groupId>
            <artifactId>primefaces</artifactId>
            <version>5.3</version>
        </dependency>
    </dependencies>
 
Alllsssooo ich hab den Fehler wirklich gefunden. Es hing sicher nicht an der Static-Funktion sondern hat es viel mehr mit dem Hibernate selber zu tun.

Ich bin nun von der Hibernate Version 5.0.1.Final zur Hibernate Version 4 gewechselt. Ansonsten hab ich nichts geändert und es klappt endlich! Das war mal wieder eine richtige Zeitverschwendung und ich hoffe dass das niemand mehr mitmachen muss.

Vielen Dank nochmal für die nette Hilfe!!! So konnte ich wenigstens vieles ausschließen!

Gruß
 
Schön zu hören, dass du es nun zum Laufen gebracht hat. Auch wenn ich ja nun wirklich nicht allzu viel zur Lösung beitragen konnte 🙂

Vielleicht findet sich ja noch jemand, der hier Näheres zu sagen kann....
 

Zurück
Oben