GF server bei jedem update restart

funkywon

Mitglied
hi,
ich hab da folgendes problem.
Ich hab eine Dao klasse, wie folgt:
Java:
public class UserDaoImpl extends GenericDaoImpl<Person1> implements IUserDao {

    public Person1 findByLogin(String login) {
        Query query = null;
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("web-jpaPU");
        EntityManager em = emf.createEntityManager();
        query = em.createQuery("select e from Person1 e where e.loginId=:" + Parameter.LOGINID, Person1.class);
        query.setParameter(Parameter.LOGINID, login);
        return (Person1) query.getSingleResult();
    }
}

und wann immer ich diese update (egal wie; kann auch nur ein leerzeichen und save sein),
muss ich Glassfish (v3) neustarten, damit es geht.
ohne neustart bekomme ich nämlich jedes mal den fehler

Java:
[#|2010-11-27T03:47:11.484+0100|WARNING|glassfish3.0.1|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=30;_ThreadName=Thread-1;|StandardWrapperValve[FrontController]: PWC1406: Servlet.service() for servlet FrontController threw exception
java.lang.ClassCastException: at.swa.domain.Person1 cannot be cast to at.swa.domain.Person1
	at at.swa.persistence.impl.UserDaoImpl.findByLogin(UserDaoImpl.java:34)
	at at.swa.command.impl.LoginCommand.process(LoginCommand.java:31)
	at at.swa.frontcontroller.FrontController.processRequest(FrontController.java:48)
	at at.swa.frontcontroller.FrontController.doPost(FrontController.java:82)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
	at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
	at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
	at java.lang.Thread.run(Thread.java:619)
|#]

laut ein wenig recherche könnte es ein classloader problem sein, aber ich hab noch keine lösung gefunden...wüßte da jemand darüber bescheid oder hat schon mal ähnliches problem gehabt? danke
 

megaflop

Mitglied
Reine Vermutung, da ich mit application-managed EntityManagern nicht so gut vertraut bin: Die EntityManagerFactory oder der EntityManager sucht beim instanziieren nach deinen Entities und lädt sie mithilfe eines neuen Classloaders.

Versuche also einmal, deine EntityManagerFactory Instanz über mehrere Aufrufe hinweg zu behalten. Deswegen gibts auch die Factories: Sie sind im Verhältnis zu den von ihnen erzeugten Objekten (hier EntityManager) relativ aufwändig in der Erstellung.

Beachte auch, das du deinen EntityManager und die EntityManagerFactory mit .close(); schließen solltest, wenn du sie nicht mehr verwendest.
 

Deadalus

Bekanntes Mitglied
Hmm ich hab exakt das selbe Problem, verwende aber keine EntityManagerFactory sondern lasse den EntityManager vom Container injecten.

Ich hab ewig versucht das Problem zu lösen aber nichts gefunden. Hat da zufällig jemand eine Idee?

Ich verwende eine JTA Persitence Unit und Glassfish 3.01.
 

megaflop

Mitglied
Was heißt exakt das selbe Problem? Wo genau tritt das Problem bei dir auf? Hast du irgendwelche besonderen Einstellungen für dein Projekt geändert?

Ad-hoc fällt mir fetzen nichts ein. Poste ein bischen Source und deine Konfigurationsdateien. Nächstes mal kannst du auch gleich einen neuen Thread erstellen, weil es wird bestimmt nicht das gleiche Problem sein.
 
Zuletzt bearbeitet:

Ähnliche Java Themen


Oben