Sun GlassFish Enterprise Server v3 リリースノート

MySQL での EJB Timer Service の設定に関する問題 (課題 11428)

説明

MySQL でユーザーとして EJB タイマーを作成して保存できますが、MySQL で EJB Timer Service を設定しようとすると、次の例外が発生します (文の実行中の 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 DataSource を表すようにします。

次の 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 Timer Service を使用している場合にのみ必要です。)次の 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`))