J'ai une application qui fonctionne sur Glassfish 3.0.1. Je l'ai déjà installé avec succès sur quelques instances, mais maintenant j'essaye de mettre en place un nouveau serveur. En regardant le journal, le déploiement va très bien au début, mais j'obtenir ceci:La table/vue 'EJB__TIMER__TBL' n'existe pas
[#|2010-12-06T17:53:38.020+0000|WARNING|glassfish3.0.1|org.eclipse.persistence.session.file:/opt/sun/glassfish/glassfish/domains/domain1/applications/ejb-timer-service-app/WEB-INF/classes/___EJB__Timer__App|_ThreadID=31;_ThreadName=Thread-1;|
Local Exception Stack:
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.0.1.v20100213-r6600): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: Table/View 'EJB__TIMER__TBL' does not exist.
Error Code: 30000
Call: SELECT TIMERID, BLOB, INITIALEXPIRATIONRAW, SCHEDULE, INTERVALDURATION, OWNERID, STATE, LASTEXPIRATIONRAW, PKHASHCODE, CREATIONTIMERAW, CONTAINERID FROM EJB__TIMER__TBL WHERE (((CONTAINERID = ?) AND (OWNERID = ?)) AND (STATE = ?))
bind => [84650008375328779, server, 0]
Query: ReadAllQuery(name="findTimersByContainerAndOwnerAndState" referenceClass=TimerState sql="SELECT TIMERID, BLOB, INITIALEXPIRATIONRAW, SCHEDULE, INTERVALDURATION, OWNERID, STATE, LASTEXPIRATIONRAW, PKHASHCODE, CREATIONTIMERAW, CONTAINERID FROM EJB__TIMER__TBL WHERE (((CONTAINERID = ?) AND (OWNERID = ?)) AND (STATE = ?))")
at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:333)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:687)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:530)
at org.eclipse.persistence.sessions.server.ServerSession.executeCall(ServerSession.java:529)
at org.eclipse.persistence.internal.sessions.IsolatedClientSession.executeCall(IsolatedClientSession.java:133)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:205)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:191)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeSelectCall(DatasourceCallQueryMechanism.java:
[snip]
Toutes les propriétés du pool de connexion __TimerPool
ont les valeurs par défaut (il utilise le pilote Derby embarqué). Pour autant que je sache, les paramètres sont les mêmes que ceux de mes autres serveurs - alors pourquoi est-ce que ça ne marche pas sur celui-ci?
EDIT
j'ai pu le faire fonctionner en copiant le minuteur DB d'une instance de travail de Glassfish (situé à $GLASSFISH_HOME/glassfish/domains/domain1/lib/databases/ejbtimer
). J'aimerais toujours savoir ce qui a causé ce problème. Ce qui est bizarre, c'est que mon application utilise des minuteurs, mais aucun d'entre eux n'est persistant (ou du moins, ils ne devraient pas l'être). Il n'y a donc aucune raison pour que Glassfish regarde même cette DB, n'est-ce pas?