表/视图'EJB__TIMER__TBL'不存在 [英] Table/View 'EJB__TIMER__TBL' does not exist
问题描述
[#| 2010-12-06T17 :53:38.020 + 0000 |警告| glassfish3.0.1 | org.eclipse.persistence.session.file中:/ opt /阳光/ GlassFish中/ GlassFish中/域/域1 /应用/ EJB定时器服务,应用程序/ WEB-INF /类/ ___ EJB__Timer__App | _ThreadID = 31; _ThreadName =线程1; |
本地异常堆栈:
异常[EclipseLink-4002](Eclipse Persistence Services - 2.0.1.v20100213-r6600):org.eclipse.persistence.exceptions.DatabaseException
内部异常:java。 sql.SQLSyntaxErrorException:表/视图'EJB__TIMER__TBL'不存在。
错误代码:30000
调用: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]
查询:ReadAllQuery(name =findTimersByContainerAndOwnerAndStatereferenceClass = TimerState sql =SELECT TIMERID,BLOB,INITIALEXPIRATIONRAW,SCHEDULE,INTERVALDURATION,OWNERID,STATE,LASTEXPIRATIONRAW,PKHASHCODE,CREATIONTIMERAW,CONTAINERID FROM EJB__TIMER__TBL WHERE((CONTAINERID =?)AND(OWNERID =?))AND(STATE =?)))
在org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:333)
在org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:687)
在org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:530)
在org.eclipse.persistence.sessions.server.ServerSession.executeCall(ServerSession.java:529)
在org.eclipse.persistence.internal.sessions.IsolatedClientSession.executeCall(IsolatedClientSession.java:133)
在org.eclipse.persistence.internal.queries.DatasourceCallQue ryMechanism.executeCall(DatasourceCallQueryMechanism.java:205)
在org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:191)
在org.eclipse.persistence.internal.queries。 DatasourceCallQueryMechanism.executeSelectCall(DatasourceCallQueryMechanism.java:
[snip]
code> __ TimerPool 连接池具有默认值(因此它使用嵌入式Derby驱动程序)。据我所知,设置与我的其他服务器相同 - 为什么会这样呢?
编辑
我能够通过从Glassfish的工作实例复制计时器DB(位于 $ GLASSFISH_HOME / glassfish /域/域1 / LIB /数据库/ ejbtimer
)。我还想知道是什么导致了这个问题。
奇怪的是,我的应用程序正在使用计时器,但没有一个是持久的(或至少不应该是)。所以没有什么理由Glassfish甚至看这个数据库,对吧?
当我覆盖了GF仍在运行时说,作为升级的一部分,文件不好。我找到的解决方案与你相同:关闭一个工作的GF,然后复制< gfhome> / domains / domain1 / lib / database
下的文件。 >
I have an application that runs on Glassfish 3.0.1. I've already successfully installed it on a few instances, but now I'm trying to set up a new server. Looking at the log, the deployment goes fine at first, but then I get this:
[#|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]
All the properties for the __TimerPool
connection pool have the default values (so it uses the embedded Derby driver). As far as I can tell, the settings are the same as my other servers - so why is it failing on this one?
EDIT
I was able to make it work by copying the timer DB from a working instance of Glassfish (located at $GLASSFISH_HOME/glassfish/domains/domain1/lib/databases/ejbtimer
). I'd still like to know what caused this problem.
The weird thing is, my application is using timers, but none of them are persistent (or at least, they shouldn't be). So there's no reason why Glassfish is even looking at this DB, right?
It's happened to me when I've overwritten those files while GF is still running, say, as part of an upgrade gone bad. The solution I found was the same as you: shut down a working GF, and copy over files under <gfhome>/domains/domain1/lib/database
.
这篇关于表/视图'EJB__TIMER__TBL'不存在的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!