2010-12-06 68 views
3

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?

Répondre

0

Il m'est arrivé lorsque j'ai écrasé ces fichiers alors que GF est toujours en cours d'exécution, par exemple, dans le cadre d'une mise à niveau qui a mal tourné. La solution que j'ai trouvée était la même que vous: fermez un fichier GF fonctionnel et copiez les fichiers sous <gfhome>/domains/domain1/lib/database.