Author: rmannibucau Date: Tue Sep 3 15:44:11 2013 New Revision: 1519724 URL: http://svn.apache.org/r1519724 Log: adding a quartz test with persistence
Added: tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/timer/QuartzPersistenceForEJBTimersTest.java tomee/tomee/trunk/container/openejb-core/src/test/resources/import-QuartzPersistenceForEJBTimersDB.sql tomee/tomee/trunk/container/openejb-core/src/test/resources/import-QuartzPersistenceForEJBTimersDBNoTx.sql Added: tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/timer/QuartzPersistenceForEJBTimersTest.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/timer/QuartzPersistenceForEJBTimersTest.java?rev=1519724&view=auto ============================================================================== --- tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/timer/QuartzPersistenceForEJBTimersTest.java (added) +++ tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/timer/QuartzPersistenceForEJBTimersTest.java Tue Sep 3 15:44:11 2013 @@ -0,0 +1,143 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.openejb.timer; + +import org.apache.openejb.config.AppModule; +import org.apache.openejb.config.EjbModule; +import org.apache.openejb.jee.EjbJar; +import org.apache.openejb.jee.SingletonBean; +import org.apache.openejb.junit.ApplicationComposer; +import org.apache.openejb.testing.Configuration; +import org.apache.openejb.testing.Module; +import org.apache.openejb.testng.PropertiesBuilder; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.quartz.impl.jdbcjobstore.HSQLDBDelegate; +import org.quartz.impl.jdbcjobstore.JobStoreCMT; +import org.quartz.simpl.SimpleThreadPool; + +import javax.annotation.PreDestroy; +import javax.annotation.Resource; +import javax.ejb.EJB; +import javax.ejb.Schedule; +import javax.ejb.Singleton; +import javax.ejb.Timeout; +import javax.ejb.Timer; +import javax.ejb.TimerConfig; +import javax.ejb.TimerService; +import java.util.Collection; +import java.util.Properties; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +@RunWith(ApplicationComposer.class) +public class QuartzPersistenceForEJBTimersTest { + @EJB + private MyTimedEjb bean; + + @Test + public void doTest() { + assertNotNull(bean); + assertEquals(0, bean.timers().size()); + bean.newTimer(); + assertEquals(1, bean.timers().size()); + } + + @Module + public AppModule application() { + final EjbModule ejbModule = new EjbModule(new EjbJar()); + ejbModule.getEjbJar().addEnterpriseBean(new SingletonBean(MyTimedEjb.class).localBean()); + + final Properties quartzConfig = new PropertiesBuilder() + .p("org.quartz.scheduler.instanceName", "TestScheduler") + .p("org.quartz.scheduler.instanceId", "AUTO") + .p("org.quartz.threadPool.class", SimpleThreadPool.class.getName()) + .p("org.quartz.threadPool.threadCount", "4") + .p("org.quartz.threadPool.threadPriority", "5") + .p("org.quartz.jobStore.class", JobStoreCMT.class.getName()) + .p("org.quartz.jobStore.driverDelegateClass", HSQLDBDelegate.class.getName()) + .p("org.quartz.jobStore.dataSource", "QUARTZ") + .p("org.quartz.jobStore.nonManagedTXDataSource", "QUARTZ_NOTX") + .p("org.quartz.jobStore.tablePrefix", "qrtz_") + .p("org.quartz.jobStore.isClustered", "true") + .p("org.quartz.jobStore.clusterCheckinInterval", "60000") + .p("org.quartz.jobStore.txIsolationLevelSerializable", "true") + .p("org.quartz.jobStore.maxMisfiresToHandleAtATime", "100") + .p("org.quartz.dataSource.QUARTZ.jndiURL", "openejb:Resource/QuartzPersistenceForEJBTimersDB") + .p("org.quartz.dataSource.QUARTZ_NOTX.jndiURL", "openejb:Resource/QuartzPersistenceForEJBTimersDBNoTx") + .build(); + + + final AppModule appModule = new AppModule(Thread.currentThread().getContextClassLoader(), null); + appModule.getEjbModules().add(ejbModule); + appModule.getProperties().putAll(quartzConfig); + return appModule; + } + + @Configuration + public Properties configuration() { + return new PropertiesBuilder() + // see src/main/resources/import-QuartzPersistenceForEJBTimersDB.sql for the init script + .p("QuartzPersistenceForEJBTimersDB", "new://Resource?type=DataSource") + .p("QuartzPersistenceForEJBTimersDB.JtaManaged", "true") + .p("QuartzPersistenceForEJBTimersDB.JdbcUrl", "jdbc:hsqldb:mem:QuartzPersistenceForEJBTimersDB") + .p("QuartzPersistenceForEJBTimersDB.UserName", "SA") + .p("QuartzPersistenceForEJBTimersDB.Password", "") + + // see src/main/resources/import-QuartzPersistenceForEJBTimersDBNoTx.sql for the init script + .p("QuartzPersistenceForEJBTimersDBNoTx", "new://Resource?type=DataSource") + .p("QuartzPersistenceForEJBTimersDBNoTx.JtaManaged", "false") + .p("QuartzPersistenceForEJBTimersDBNoTx.JdbcUrl", "jdbc:hsqldb:mem:QuartzPersistenceForEJBTimersDBNoTx") + .p("QuartzPersistenceForEJBTimersDBNoTx.UserName", "SA") + .p("QuartzPersistenceForEJBTimersDBNoTx.Password", "") + .build(); + } + + @Singleton + public static class MyTimedEjb { + @Resource + private TimerService ts; + + private Timer timer = null; + + @Timeout + public void timeout(final Timer timer) { + // no-op: not important for that test + } + + public Collection<Timer> timers() { + return ts.getTimers(); + } + + @PreDestroy + public void stop() { + if (timer != null) { + timer.cancel(); + } + } + + @Schedule + public void justToCheckZeroTimersInListAtStartup() { + // no-op + } + + public void newTimer() { + timer = ts.createIntervalTimer(3000, 1000, new TimerConfig(System.currentTimeMillis(), false)); + } + } +} Added: tomee/tomee/trunk/container/openejb-core/src/test/resources/import-QuartzPersistenceForEJBTimersDB.sql URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/test/resources/import-QuartzPersistenceForEJBTimersDB.sql?rev=1519724&view=auto ============================================================================== --- tomee/tomee/trunk/container/openejb-core/src/test/resources/import-QuartzPersistenceForEJBTimersDB.sql (added) +++ tomee/tomee/trunk/container/openejb-core/src/test/resources/import-QuartzPersistenceForEJBTimersDB.sql Tue Sep 3 15:44:11 2013 @@ -0,0 +1,29 @@ +-- +-- +-- Licensed to the Apache Software Foundation (ASF) under one or more +-- contributor license agreements. See the NOTICE file distributed with +-- this work for additional information regarding copyright ownership. +-- The ASF licenses this file to You under the Apache License, Version 2.0 +-- (the "License"); you may not use this file except in compliance with +-- the License. You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- +CREATE TABLE qrtz_job_details(SCHED_NAME VARCHAR(120) NOT NULL,JOB_NAME VARCHAR(200) NOT NULL,JOB_GROUP VARCHAR(200) NOT NULL,DESCRIPTION VARCHAR(250) NULL,JOB_CLASS_NAME VARCHAR(250) NOT NULL,IS_DURABLE BOOLEAN NOT NULL,IS_NONCONCURRENT BOOLEAN NOT NULL,IS_UPDATE_DATA BOOLEAN NOT NULL,REQUESTS_RECOVERY BOOLEAN NOT NULL,JOB_DATA LONGVARBINARY NULL,PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)); +CREATE TABLE qrtz_triggers(SCHED_NAME VARCHAR(120) NOT NULL,TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,JOB_NAME VARCHAR(200) NOT NULL,JOB_GROUP VARCHAR(200) NOT NULL,DESCRIPTION VARCHAR(250) NULL,NEXT_FIRE_TIME NUMERIC(13) NULL,PREV_FIRE_TIME NUMERIC(13) NULL,PRIORITY INTEGER NULL,TRIGGER_STATE VARCHAR(16) NOT NULL,TRIGGER_TYPE VARCHAR(8) NOT NULL,START_TIME NUMERIC(13) NOT NULL,END_TIME NUMERIC(13) NULL,CALENDAR_NAME VARCHAR(200) NULL,MISFIRE_INSTR NUMERIC(2) NULL,JOB_DATA LONGVARBINARY NULL,PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP) REFERENCES QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP)); +CREATE TABLE qrtz_simple_triggers(SCHED_NAME VARCHAR(120) NOT NULL,TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,REPEAT_COUNT NUMERIC(7) NOT NULL,REPEAT_INTERVAL NUMERIC(12) NOT NULL,TIMES_TRIGGERED NUMERIC(10) NOT NULL,PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)); +CREATE TABLE qrtz_cron_triggers(SCHED_NAME VARCHAR(120) NOT NULL,TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,CRON_EXPRESSION VARCHAR(120) NOT NULL,TIME_ZONE_ID VARCHAR(80),PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)); +CREATE TABLE qrtz_simprop_triggers(SCHED_NAME VARCHAR(120) NOT NULL,TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,STR_PROP_1 VARCHAR(512) NULL,STR_PROP_2 VARCHAR(512) NULL,STR_PROP_3 VARCHAR(512) NULL,INT_PROP_1 NUMERIC(9) NULL,INT_PROP_2 NUMERIC(9) NULL,LONG_PROP_1 NUMERIC(13) NULL,LONG_PROP_2 NUMERIC(13) NULL,DEC_PROP_1 NUMERIC(13,4) NULL,DEC_PROP_2 NUMERIC(13,4) NULL,BOOL_PROP_1 BOOLEAN NULL,BOOL_PROP_2 BOOLEAN NULL,PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)); +CREATE TABLE qrtz_blob_triggers(SCHED_NAME VARCHAR(120) NOT NULL,TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,BLOB_DATA LONGVARBINARY NULL,PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)); +CREATE TABLE qrtz_calendars(SCHED_NAME VARCHAR(120) NOT NULL,CALENDAR_NAME VARCHAR(200) NOT NULL,CALENDAR LONGVARBINARY NOT NULL,PRIMARY KEY (SCHED_NAME,CALENDAR_NAME)); +CREATE TABLE qrtz_paused_trigger_grps(SCHED_NAME VARCHAR(120) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP)); +CREATE TABLE qrtz_fired_triggers(SCHED_NAME VARCHAR(120) NOT NULL,ENTRY_ID VARCHAR(95) NOT NULL,TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,INSTANCE_NAME VARCHAR(200) NOT NULL,FIRED_TIME NUMERIC(13) NOT NULL,SCHED_TIME NUMERIC(13) NOT NULL,PRIORITY INTEGER NOT NULL,STATE VARCHAR(16) NOT NULL,JOB_NAME VARCHAR(200) NULL,JOB_GROUP VARCHAR(200) NULL,IS_NONCONCURRENT BOOLEAN NULL,REQUESTS_RECOVERY BOOLEAN NULL,PRIMARY KEY (SCHED_NAME,ENTRY_ID)); +CREATE TABLE qrtz_scheduler_state(SCHED_NAME VARCHAR(120) NOT NULL,INSTANCE_NAME VARCHAR(200) NOT NULL,LAST_CHECKIN_TIME NUMERIC(13) NOT NULL,CHECKIN_INTERVAL NUMERIC(13) NOT NULL,PRIMARY KEY (SCHED_NAME,INSTANCE_NAME)); +CREATE TABLE qrtz_locks( SCHED_NAME VARCHAR(120) NOT NULL, LOCK_NAME VARCHAR(40) NOT NULL, PRIMARY KEY (SCHED_NAME,LOCK_NAME)); + Added: tomee/tomee/trunk/container/openejb-core/src/test/resources/import-QuartzPersistenceForEJBTimersDBNoTx.sql URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/test/resources/import-QuartzPersistenceForEJBTimersDBNoTx.sql?rev=1519724&view=auto ============================================================================== --- tomee/tomee/trunk/container/openejb-core/src/test/resources/import-QuartzPersistenceForEJBTimersDBNoTx.sql (added) +++ tomee/tomee/trunk/container/openejb-core/src/test/resources/import-QuartzPersistenceForEJBTimersDBNoTx.sql Tue Sep 3 15:44:11 2013 @@ -0,0 +1,29 @@ +-- +-- +-- Licensed to the Apache Software Foundation (ASF) under one or more +-- contributor license agreements. See the NOTICE file distributed with +-- this work for additional information regarding copyright ownership. +-- The ASF licenses this file to You under the Apache License, Version 2.0 +-- (the "License"); you may not use this file except in compliance with +-- the License. You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- +CREATE TABLE qrtz_job_details(SCHED_NAME VARCHAR(120) NOT NULL,JOB_NAME VARCHAR(200) NOT NULL,JOB_GROUP VARCHAR(200) NOT NULL,DESCRIPTION VARCHAR(250) NULL,JOB_CLASS_NAME VARCHAR(250) NOT NULL,IS_DURABLE BOOLEAN NOT NULL,IS_NONCONCURRENT BOOLEAN NOT NULL,IS_UPDATE_DATA BOOLEAN NOT NULL,REQUESTS_RECOVERY BOOLEAN NOT NULL,JOB_DATA LONGVARBINARY NULL,PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)); +CREATE TABLE qrtz_triggers(SCHED_NAME VARCHAR(120) NOT NULL,TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,JOB_NAME VARCHAR(200) NOT NULL,JOB_GROUP VARCHAR(200) NOT NULL,DESCRIPTION VARCHAR(250) NULL,NEXT_FIRE_TIME NUMERIC(13) NULL,PREV_FIRE_TIME NUMERIC(13) NULL,PRIORITY INTEGER NULL,TRIGGER_STATE VARCHAR(16) NOT NULL,TRIGGER_TYPE VARCHAR(8) NOT NULL,START_TIME NUMERIC(13) NOT NULL,END_TIME NUMERIC(13) NULL,CALENDAR_NAME VARCHAR(200) NULL,MISFIRE_INSTR NUMERIC(2) NULL,JOB_DATA LONGVARBINARY NULL,PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP) REFERENCES QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP)); +CREATE TABLE qrtz_simple_triggers(SCHED_NAME VARCHAR(120) NOT NULL,TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,REPEAT_COUNT NUMERIC(7) NOT NULL,REPEAT_INTERVAL NUMERIC(12) NOT NULL,TIMES_TRIGGERED NUMERIC(10) NOT NULL,PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)); +CREATE TABLE qrtz_cron_triggers(SCHED_NAME VARCHAR(120) NOT NULL,TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,CRON_EXPRESSION VARCHAR(120) NOT NULL,TIME_ZONE_ID VARCHAR(80),PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)); +CREATE TABLE qrtz_simprop_triggers(SCHED_NAME VARCHAR(120) NOT NULL,TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,STR_PROP_1 VARCHAR(512) NULL,STR_PROP_2 VARCHAR(512) NULL,STR_PROP_3 VARCHAR(512) NULL,INT_PROP_1 NUMERIC(9) NULL,INT_PROP_2 NUMERIC(9) NULL,LONG_PROP_1 NUMERIC(13) NULL,LONG_PROP_2 NUMERIC(13) NULL,DEC_PROP_1 NUMERIC(13,4) NULL,DEC_PROP_2 NUMERIC(13,4) NULL,BOOL_PROP_1 BOOLEAN NULL,BOOL_PROP_2 BOOLEAN NULL,PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)); +CREATE TABLE qrtz_blob_triggers(SCHED_NAME VARCHAR(120) NOT NULL,TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,BLOB_DATA LONGVARBINARY NULL,PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)); +CREATE TABLE qrtz_calendars(SCHED_NAME VARCHAR(120) NOT NULL,CALENDAR_NAME VARCHAR(200) NOT NULL,CALENDAR LONGVARBINARY NOT NULL,PRIMARY KEY (SCHED_NAME,CALENDAR_NAME)); +CREATE TABLE qrtz_paused_trigger_grps(SCHED_NAME VARCHAR(120) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP)); +CREATE TABLE qrtz_fired_triggers(SCHED_NAME VARCHAR(120) NOT NULL,ENTRY_ID VARCHAR(95) NOT NULL,TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,INSTANCE_NAME VARCHAR(200) NOT NULL,FIRED_TIME NUMERIC(13) NOT NULL,SCHED_TIME NUMERIC(13) NOT NULL,PRIORITY INTEGER NOT NULL,STATE VARCHAR(16) NOT NULL,JOB_NAME VARCHAR(200) NULL,JOB_GROUP VARCHAR(200) NULL,IS_NONCONCURRENT BOOLEAN NULL,REQUESTS_RECOVERY BOOLEAN NULL,PRIMARY KEY (SCHED_NAME,ENTRY_ID)); +CREATE TABLE qrtz_scheduler_state(SCHED_NAME VARCHAR(120) NOT NULL,INSTANCE_NAME VARCHAR(200) NOT NULL,LAST_CHECKIN_TIME NUMERIC(13) NOT NULL,CHECKIN_INTERVAL NUMERIC(13) NOT NULL,PRIMARY KEY (SCHED_NAME,INSTANCE_NAME)); +CREATE TABLE qrtz_locks( SCHED_NAME VARCHAR(120) NOT NULL, LOCK_NAME VARCHAR(40) NOT NULL, PRIMARY KEY (SCHED_NAME,LOCK_NAME)); +