Java 表/视图';EJB定时器TBL';不存在

Java 表/视图';EJB定时器TBL';不存在,java,jakarta-ee,ejb,glassfish-3,Java,Jakarta Ee,Ejb,Glassfish 3,我有一个在Glassfish 3.0.1上运行的应用程序。我已经在一些实例上成功地安装了它,但现在我正在尝试设置一个新的服务器。查看日志,一开始部署进展顺利,但后来我发现: [#|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-se

我有一个在Glassfish 3.0.1上运行的应用程序。我已经在一些实例上成功地安装了它,但现在我正在尝试设置一个新的服务器。查看日志,一开始部署进展顺利,但后来我发现:

 [#|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]
\uuu TimerPool
连接池的所有属性都具有默认值(因此它使用嵌入式Derby驱动程序)。据我所知,这些设置与我的其他服务器相同——那么为什么它在这台服务器上失败呢


编辑

通过从Glassfish的一个工作实例(位于
$Glassfish_HOME/Glassfish/domains/domain1/lib/databases/ejbtimer
)复制计时器数据库,我可以使它工作。我仍然想知道是什么导致了这个问题


奇怪的是,我的应用程序正在使用计时器,但没有一个是持久的(或者至少不应该是持久的)。所以Glassfish没有理由看这个数据库,对吧?

当GF还在运行时,我覆盖了这些文件,比如说,作为升级失败的一部分时,我就遇到了这种情况。我找到的解决方案与您相同:关闭一个正在工作的GF,然后复制
/domains/domain1/lib/database
下的文件