PostgreSQL和Glassfish EJB__定时器__TBL表

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

我正在尝试使用Glassfish提供的计时器服务。因此,我必须创建一个名为
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") 
);