2013-11-25 10 views
5

Ich erstelle ein JSF + JPA-Projekt für und GlassFish 4. Ein paar Mal bekomme ich eine Ausnahme an dieser Stelle :java.lang.ClassCastException: com.example.Entity kann nicht in com.example.Entity umgewandelt werden

List<User> users = connection.getUserList(); 

for (User u : users) { //exception 

...

public List<User> getUserList() { 

    EntityManager em = Persistence.createEntityManagerFactory("project").createEntityManager(); 
    List<User> users = em.createQuery("SELECT c FROM User c", User.class).getResultList(); 
    em.close(); 
    return users; 
} 

Stacktrace:

javax.faces.el.EvaluationException: java.lang.ClassCastException: de.sep.ateam.sap.norris.model.User cannot be cast to de.sep.ateam.sap.norris.model.User 
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101) 
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) 
    at javax.faces.component.UICommand.broadcast(UICommand.java:315) 
    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:646) 
    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:357) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:260) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:188) 
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:191) 
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:168) 
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:189) 
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114) 
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) 
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:838) 
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135) 
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:564) 
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:544) 
    at java.lang.Thread.run(Thread.java:744) 
Caused by: java.lang.ClassCastException: de.sep.ateam.sap.norris.model.User cannot be cast to de.sep.ateam.sap.norris.model.User 
    at de.sep.ateam.sap.norris.controller.beans.LoginBean.doLogin(LoginBean.java:50) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at javax.el.ELUtil.invokeMethod(ELUtil.java:326) 
    at javax.el.BeanELResolver.invoke(BeanELResolver.java:536) 
    at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:256) 
    at com.sun.el.parser.AstValue.invoke(AstValue.java:269) 
    at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304) 
    at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40) 
    at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50) 
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) 
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87) 
    ... 35 more 
+2

Bitte zeigen Sie Ihre Exceptions Stack Trace. – Masudul

+0

@Rakesh: Bibliothek/Framework/Produktnamen wie "JSF" und "GlassFish" sind ** nicht ** Code. Bitte beende die Formatierung in den vorgeschlagenen Änderungen als Code. – BalusC

+0

Versuch für (Objekt u: Benutzer) {Benutzer user = (Benutzer) u; ..... –

Antwort

0

ich hatte ein ähnliches Problem, weil ich die Serialisierung Klassen und t Die serialisierten Versionen konnten nach der Aktualisierung der Klassen nicht deserialisiert werden und die App wurde neu gestartet, ohne den Container neu zu starten.

+0

Wie hast du es behoben? Ich bin auch Serialisierung der Klassen – Yakaryo

+0

Wir verwendeten Dinge wie 'private statische final long serialVersionUID = 1L;' und aktualisiert die UID, wenn wir wussten, dass es Deserialisierung brechen würde und manchmal auch nur den Cache absichtlich zerstört. Außerdem haben wir mehrere Caching-Strategien, aber eine davon wurde vom Container (Tomcat) ausgeführt, den wir für dev-Instanzen deaktiviert haben (wo wir die Apps aktualisieren, ohne den Container neu zu starten) und eine Container-Neustart-Richtlinie für die Bereitstellung für die Produktion haben. Oh, auch manchmal hat der Container beim Neustart einer App eine schwer zu ersetzende Klasse, weil er einige Klassen beim erneuten Einsatz nicht entladen kann. – austin

0

In der Regel tritt dies auf, wenn mehr als eine Instanz des gleichen Datenträgers in einem anderen Klassenlader vorhanden ist. Die meisten App-Server haben einen globalen Klassenlader und einen Web-App-spezifischen Klassenlader (einige haben auch andere wie contrib usw.). Wenn der Klassenlader, der höher in der Nahrungskette liegt, diese Klasse bereits definiert hat und von einem Klassenlader der unteren Ebene neu definiert wird, kann diese Situation auftreten (dieselbe Klasse in einem anderen Klassenlader wird als unterschiedlich angesehen, obwohl sie definiert ist) das Gleiche). Die Reihenfolge, wie/wann Gläser geladen werden, ist nicht garantiert, was erklären könnte, warum Sie manchmal den Fehler sehen und manchmal nicht. Lange Rede, kurzer Sinn: Stellen Sie sicher, dass Sie das Jar, das diese Klasse enthält, noch nicht irgendwo auf dem Server bereitgestellt haben, der für Ihre Webanwendung sichtbar ist.

+0

ich bekomme immer noch den Fehler ... – Yakaryo

3

Wenn Sie sicher sind, dass auf dem Anwendungsserver nicht mehrere Versionen der gleichen Klasse geladen sind, versuchen Sie möglicherweise, den Server-Cache zurückzusetzen.

Gehen Sie wie folgt vor:

  1. Heben Sie die Bereitstellung der Anwendung;
  2. Stoppen Sie den Anwendungsserver;
  3. Löschen Sie den osgi-Cache-Ordner Ihres Anwendungsservers. I.e. Wenn Sie mit Glassfish verwenden, ist es der Ordner: E: \ glassfish-3.1.2.2 \ glassfish \ domains \ domain1 \ osgi-cache
  4. Starten Sie den Server neu;
  5. Stellen Sie die Anwendung bereit.
1

hatte ich das gleiche Problem, und ich fand schließlich eine Abhilfe auf java.net:

Kopieren Sie alle org.eclipse.persistence jar filesglassfish4/glassfish/modules-WEB-INF/lib. Dann gehen Sie in Ihre Glassfish-web.xml und setzen Sie class-delegate auf false.

Arbeitete für mich!

+0

In meinem Fall war es ausreichend, nur org.eclipse.persistence.core.jar und org.eclipse.persistence.jpa.jar zu WEB-INF/lib hinzuzufügen –

Verwandte Themen