PostgreSQL和Glassfish EJB__定时器__TBL表
我正在尝试使用Glassfish提供的计时器服务。因此,我必须创建一个名为PostgreSQL和Glassfish EJB__定时器__TBL表,postgresql,timer,glassfish,Postgresql,Timer,Glassfish,我正在尝试使用Glassfish提供的计时器服务。因此,我必须创建一个名为EJB\uu TIMER\uu TBL的表,并在Glassfish中配置jdbc资源 我想将此表存储在postgreSQL上名为glassfish的模式中。因此,我的ddl就是这个(我将BLOB类型替换为BYTEA): 我为Glassfish配置了jdbc池和资源: asadmin create-jdbc-connection-pool --datasourceclassname org.postgresql.ds.PG
EJB\uu TIMER\uu TBL
的表,并在Glassfish中配置jdbc资源
我想将此表存储在postgreSQL上名为glassfish
的模式中。因此,我的ddl就是这个(我将BLOB
类型替换为BYTEA
):
我为Glassfish配置了jdbc池和资源:
asadmin create-jdbc-connection-pool
--datasourceclassname org.postgresql.ds.PGConnectionPoolDataSource
--restype javax.sql.ConnectionPoolDataSource
--property User=glassfish:Password=...:PortNumber=5432:DatabaseName=...:ServerName=localhost jdbc/simPool/glassfish
asadmin create-jdbc-resource --connectionpoolid jdbc/simPool/glassfish jdbc/sim/glassfish
我在jdbc资源中正确地输入jdbc/sim/glassfish
,以用于glassishgui中的计时器服务
每次部署应用程序时,我都会收到异常:
[#|2013-02-18T11:42:42.562+0100|WARNING|glassfish3.1.2|org.eclipse.persistence.session.file
:/E:/softs/serveurs/glassfish3_1122/glassfish/domains/domain1/applications/ejb-timer-service-app/WEB-INF/classes/___EJB__Timer__App|_ThreadID=58;_ThreadName=Thread-2;|Local Exception Stack:
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: org.postgresql.util.PSQLException: ERREUR: la relation « EJB__TIMER__TBL » n'existe pas
Position : 193
Error Code: 0
Call: SELECT "TIMERID", "APPLICATIONID", "BLOB", "CONTAINERID", "CREATIONTIMERAW", "INITIALEXPIRATIONRAW", "INTERVALDURATION", "LASTEXPIRATIONRAW", "OWNERID", "PKHASHCODE", "SCHEDULE", "STATE" FROM "EJB__TIMER__TBL" WHERE (("OWNERID" = ?) AND ("STATE" = ?))
bind => [2 parameters bound]
Query: ReadAllQuery(name="findTimersByOwnerAndState" referenceClass=TimerState sql="SELECT "TIMERID", "APPLICATIONID", "BLOB", "CONTAINERID", "CREATIONTIMERAW", "INITIALEXPIRATIONRAW", "INTERVALDURATION", "LASTEXPIRATIONRAW", "OWNERID", "PKHASHCODE", "SCHEDULE", "STATE" FROM "EJB__TIMER__TBL" WHERE (("OWNERID" = ?) AND ("STATE" = ?))")
at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:333)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:644)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:535)
at org.eclipse.persistence.internal.sessions.AbstractSession.basicExecuteCall(AbstractSession.java:1717)
所以我的表EJB\uuuu TIMER\uuu TBL
似乎无法被Glassfish访问
当我创建另一个项目时,使用与上面池连接相同的凭据配置一个persistence.xml
文件,并从EJB\uuuu TIMER\uu TBL创建一个简单的查询SELECT COUNT(*),我收到0
,这样我的连接就建立得很好,访问的默认模式是glassfish
在${glassfish\u root}\glassfish\lib\install\databases
中有一些DDL,但对postgresql都没有…那么我哪里做错了
注意:当我测试用MySQL jdbc资源配置服务计时器时,它的工作
谢谢你的帮助好的,我找到了问题的解决办法
我不知道SQL可以区分大小写。Glassfish调用选择。。。从带有双引号的“EJB\uuu TIMER\uu TBL”
中,我必须创建一个名为“EJB\uu TIMER\uu TBL”的表,而不是“EJB\uu TIMER\uu TBL”或其他任何内容
解决方法是使用双引号重新创建我的表:
CREATE TABLE glassfish."EJB__TIMER__TBL" (
"CREATIONTIMERAW" BIGINT NOT NULL,
"BLOB" BYTEA,
"TIMERID" VARCHAR(255) NOT NULL,
"CONTAINERID" BIGINT NOT NULL,
"OWNERID" VARCHAR(255) NULL,
"STATE" INTEGER NOT NULL,
"PKHASHCODE" INTEGER NOT NULL,
"INTERVALDURATION" BIGINT NOT NULL,
"INITIALEXPIRATIONRAW" BIGINT NOT NULL,
"LASTEXPIRATIONRAW" BIGINT NOT NULL,
"SCHEDULE" VARCHAR(255) NULL,
"APPLICATIONID" BIGINT NOT NULL,
CONSTRAINT "PK_EJB__TIMER__TBL" PRIMARY KEY ("TIMERID")
);
生成的请求是:从“EJB\u TIMER\u TBL”中选择“TIMERID”、“APPLICATIONID”、“BLOB”、“CONTAINERID”、“CREATIONTIMERAW”、“INITIALEXPIRATIONRAW”、“INTERVALDURATION”、“LASTEXPIRATIONRAW”、“OWNERID”、“PKHASHCODE”、“SCHEDULE”、“STATE”,其中((“OWNERID”=?)和(“STATE”=?)
。当我在PgAdmin下测试这个请求时,我看到:«EJB\uuu TIMER\uu TBL»不存在
,但没有
“,它就工作了……那么为什么Glassfish用”
包围请求,以及如何抑制这些”
?这就是所谓的“分隔标识符”“,有关详细信息,请参阅手册:我们遇到了相同的问题,非常感谢您发布解决方案。
CREATE TABLE glassfish."EJB__TIMER__TBL" (
"CREATIONTIMERAW" BIGINT NOT NULL,
"BLOB" BYTEA,
"TIMERID" VARCHAR(255) NOT NULL,
"CONTAINERID" BIGINT NOT NULL,
"OWNERID" VARCHAR(255) NULL,
"STATE" INTEGER NOT NULL,
"PKHASHCODE" INTEGER NOT NULL,
"INTERVALDURATION" BIGINT NOT NULL,
"INITIALEXPIRATIONRAW" BIGINT NOT NULL,
"LASTEXPIRATIONRAW" BIGINT NOT NULL,
"SCHEDULE" VARCHAR(255) NULL,
"APPLICATIONID" BIGINT NOT NULL,
CONSTRAINT "PK_EJB__TIMER__TBL" PRIMARY KEY ("TIMERID")
);