14

アプリで EJB 3.1 のタイマー サービスを使用しようとしています。

@Stateless
@LocalBean
public class StatelessTimerSessionBean {

    @Schedule(minute = "*", second = "0", dayOfMonth = "*", month = "*", year = "*", hour = "9-17", dayOfWeek = "Mon-Fri")
    public void myTimer() {
        System.out.println("Timer event: " + new Date());
    }
}

".. EJB Timer Service の Timer DataSource 設定を有効な JDBC リソースに設定してください.."

EJB タイマー サービスから

タイマー データソースを正しく構成する方法がわかりません。

デプロイ時に発生するエラーは次のとおりです。

SEVERE: Exception while invoking class org.glassfish.ejb.startup.EjbApplication start method
java.lang.RuntimeException: EJB Timer Service is not available

実行中: glassfish-3.1.2.2

4

3 に答える 3

29

1. データベースのセットアップ例

  1. データベースには MySQL を使用しています。

  2. EJB__TIMER__TBLからテーブルを作成します。{GF_HOME}/glassfish/lib/install/databases/ejbtimer_{DB_ENGINE}.sql

DB_EN​​GINE = 例: MySQL:

CREATE TABLE EJB__TIMER__TBL (
    `CREATIONTIMERAW`      BIGINT        NOT NULL,
    `BLOB`                 BLOB,
    `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`)
);

2. サーバー構成

GlassFish 管理コンソール

  1. GlassFish サーバーの管理コンソールを起動します: 通常はhttp://localhost:4848
  2. 左側で[Configurations] > [server-config] > [EJB Container]に移動します。
  3. 次に、上部のタブ[EJB タイマー サービス]をクリックします。
  4. 次に、Timer Datasource : に JDBC リソースを入力します。[mysql-pu]。( 注:デフォルトはjdbc/__TimerPool)
  5. サーバーを再起動する

3. 結果

...
INFO: [TimerBeanContainer] Created  TimerBeanContainer: TimerBean
INFO: EJB5181:Portable JNDI names for EJB TimerBean: [java:global/ejb-timer-service-app/TimerBean, java:global/ejb-timer-service-app/TimerBean!com.sun.ejb.containers.TimerLocal]
INFO: WEB0671: Loading application [ejb-timer-service-app] at [/ejb-timer-service-app]
INFO: EJB5109:EJB Timer Service started successfully for data source [mysql-pu]
INFO: Setting DBReadBeforeTimeout to false
INFO: ==> Restoring Timers ... 
INFO: There are no EJB Timers owned by this server
INFO: <== ... Timers Restored.
...

4. まだ壊れていますか? TimerService が機能しなくなった (以前は機能していた) ?

だから、これは「保存時に展開」でいっぱいの一日の後に私に起こりました。TimerService が突然利用できなくなりました。

Severe:   Exception while loading the app
Severe:   Undeployment failed for context /ejb-timer-service-app
Warning:   Cannot deploy or load EJBTimerService: org.glassfish.deployment.common.DeploymentException: Error in linking security policy for ejb-timer-service-app -- Inconsistent Module State

ここにある解決策

5. 便利なリンク

于 2012-11-08T17:56:05.420 に答える
-3

これは、glassfish-3.1.2.2 が EJB3 をサポートしていないようです。jboss 7 を使用してみてください。

http://docs.oracle.com/cd/E26576_01/doc.312/e24939/release-notes.htm

于 2012-11-08T16:43:59.070 に答える