Sun GlassFish Enterprise Server v3 릴리스 노트

MySQL에서의 EJB 타이머 서비스 구성 문제(문제 11428)

설명

MySQL에서 사용자로서 EJB 타이머를 만들고 저장할 수 있지만, MySQL용으로 EJB 타이머 서비스를 구성하려고 하면 다음과 같은 예외가 나타납니다(SQLException 실행 명령문):


"CREATE TABLE EJB__TIMER__TBL (TIMERID
VARCHAR(255) NOT NULL, BLOB BLOB(64000), INITIALEXPIRATIONRAW BIGINT, SCHEDULE
VARCHAR(255), INTERVALDURATION BIGINT, OWNERID VARCHAR(255), STATE INTEGER,
LASTEXPIRATIONRAW BIGINT, PKHASHCODE INTEGER, CREATIONTIMERAW BIGINT,
CONTAINERID BIGINT, PRIMARY KEY (TIMERID))":
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in
your SQL syntax; check the manual that corresponds to your MySQL server version
for the right syntax to use near 'BLOB BLOB(64000), INITIALEXPIRATIONRAW BIGINT,
SCHEDULE VARCHAR(255), INTERVALDU' at line 1|#] 

자세한 내용은 문제 보고서를 참조하십시오.

해결 방법

타이머 풀에 지정된 datasource-classname이 XA 데이터 소스를 나타내도록 해야 합니다.

MySQL별 단계:

  1. glassfishv3/glassfish/lib/install/applications/ejb-timer-service-app.war 패키지를 풉니다.

  2. 다음 항목을 WEB-INF/classes/__ejb_timer_mappings.xml <persistence-unit-metadata> 뒤에 추가합니다.

    <persistence-unit-defaults>
    <delimited-identifiers/>
    </persistence-unit-defaults>
  3. WEB-INF/classes/__ejb_timer_mappings.xml 파일을 다시 묶습니다.

  4. (이 단계는 현재 설치 프로그램에서 이미 EJB 타이머 서비스를 사용한 경우에만 필요합니다.) 다음 create 구문을 통해 데이터베이스에 EJB__TIMER__TBL을 직접 생성합니다.

    CREATE TABLE `EJB__TIMER__TBL` (`TIMERID` VARCHAR(255) NOT NULL,
    `BLOB` BLOB(64000), `INITIALEXPIRATIONRAW` BIGINT, `SCHEDULE` VARCHAR(255),
    `INTERVALDURATION` BIGINT, `OWNERID` VARCHAR(255), `STATE` INTEGER,
    `LASTEXPIRATIONRAW` BIGINT, `PKHASHCODE` INTEGER, `CREATIONTIMERAW` BIGINT,
    `CONTAINERID` BIGINT, PRIMARY KEY (`TIMERID`))