Ver Fonte

增加 sqlserver 支持

zhouhao há 8 anos atrás
pai
commit
9d8a49fd1a
34 ficheiros alterados com 792 adições e 59 exclusões
  1. 1 1
      hsweb-web-bean/pom.xml
  2. 1 1
      hsweb-web-concurrent/hsweb-web-concurrent-cache/pom.xml
  3. 1 1
      hsweb-web-concurrent/hsweb-web-concurrent-lock/pom.xml
  4. 1 1
      hsweb-web-concurrent/pom.xml
  5. 1 1
      hsweb-web-controller/pom.xml
  6. 1 1
      hsweb-web-core/pom.xml
  7. 26 15
      hsweb-web-core/src/main/java/org/hsweb/web/core/datasource/DatabaseType.java
  8. 1 1
      hsweb-web-dao/hsweb-web-dao-api/pom.xml
  9. 1 1
      hsweb-web-dao/hsweb-web-dao-mybatis/README.md
  10. 1 1
      hsweb-web-dao/hsweb-web-dao-mybatis/pom.xml
  11. 1 1
      hsweb-web-dao/pom.xml
  12. 1 1
      hsweb-web-datasource/pom.xml
  13. 1 1
      hsweb-web-oauth2/hsweb-web-oauth2-controller/pom.xml
  14. 1 1
      hsweb-web-oauth2/hsweb-web-oauth2-core/pom.xml
  15. 1 1
      hsweb-web-oauth2/hsweb-web-oauth2-mybatis/pom.xml
  16. 1 1
      hsweb-web-oauth2/hsweb-web-oauth2-service-simple/pom.xml
  17. 1 1
      hsweb-web-oauth2/hsweb-web-oauth2-simple/pom.xml
  18. 1 1
      hsweb-web-oauth2/pom.xml
  19. 1 1
      hsweb-web-service/hsweb-web-service-api/pom.xml
  20. 2 2
      hsweb-web-service/hsweb-web-service-simple/pom.xml
  21. 5 3
      hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/DataBaseAutoConfiguration.java
  22. 6 0
      hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/SchedulerAutoConfiguration.java
  23. 1 1
      hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/SchedulerProperties.java
  24. 7 1
      hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/quartz/QuartzJobServiceImpl.java
  25. 1 1
      hsweb-web-service/pom.xml
  26. 1 1
      hsweb-web-starter/pom.xml
  27. 1 1
      hsweb-web-starter/src/main/java/org/hsweb/web/starter/SystemInitialize.java
  28. 7 1
      hsweb-web-starter/src/main/java/org/hsweb/web/starter/SystemInitializeAutoConfiguration.java
  29. 340 0
      hsweb-web-starter/src/main/resources/org/hsweb/start/scripts/install/sql/jtds_sqlserver/install.sql
  30. 33 11
      hsweb-web-starter/src/main/resources/org/hsweb/start/scripts/install/sql/mysql/install.sql
  31. 340 0
      hsweb-web-starter/src/main/resources/org/hsweb/start/scripts/install/sql/sqlserver/install.sql
  32. 1 1
      hsweb-web-websocket/pom.xml
  33. 1 1
      hsweb-web-workflow/pom.xml
  34. 2 2
      pom.xml

+ 1 - 1
hsweb-web-bean/pom.xml

@@ -5,7 +5,7 @@
     <parent>
         <artifactId>hsweb-framework</artifactId>
         <groupId>org.hsweb</groupId>
-       <version>2.2.1</version>
+       <version>2.2.1-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>hsweb-web-bean</artifactId>

+ 1 - 1
hsweb-web-concurrent/hsweb-web-concurrent-cache/pom.xml

@@ -5,7 +5,7 @@
     <parent>
         <artifactId>hsweb-web-concurrent</artifactId>
         <groupId>org.hsweb</groupId>
-       <version>2.2.1</version>
+       <version>2.2.1-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>hsweb-web-concurrent-cache</artifactId>

+ 1 - 1
hsweb-web-concurrent/hsweb-web-concurrent-lock/pom.xml

@@ -5,7 +5,7 @@
     <parent>
         <artifactId>hsweb-web-concurrent</artifactId>
         <groupId>org.hsweb</groupId>
-       <version>2.2.1</version>
+       <version>2.2.1-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>hsweb-web-concurrent-lock</artifactId>

+ 1 - 1
hsweb-web-concurrent/pom.xml

@@ -5,7 +5,7 @@
     <parent>
         <artifactId>hsweb-framework</artifactId>
         <groupId>org.hsweb</groupId>
-       <version>2.2.1</version>
+       <version>2.2.1-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <packaging>pom</packaging>

+ 1 - 1
hsweb-web-controller/pom.xml

@@ -5,7 +5,7 @@
     <parent>
         <artifactId>hsweb-framework</artifactId>
         <groupId>org.hsweb</groupId>
-       <version>2.2.1</version>
+       <version>2.2.1-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>hsweb-web-controller</artifactId>

+ 1 - 1
hsweb-web-core/pom.xml

@@ -5,7 +5,7 @@
     <parent>
         <artifactId>hsweb-framework</artifactId>
         <groupId>org.hsweb</groupId>
-       <version>2.2.1</version>
+       <version>2.2.1-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>hsweb-web-core</artifactId>

+ 26 - 15
hsweb-web-core/src/main/java/org/hsweb/web/core/datasource/DatabaseType.java

@@ -17,28 +17,46 @@
 package org.hsweb.web.core.datasource;
 
 import org.hsweb.ezorm.rdb.render.dialect.Dialect;
-import org.springframework.util.Assert;
 import org.springframework.util.StringUtils;
 
+import java.util.Arrays;
+import java.util.function.Predicate;
+
 public enum DatabaseType {
-    unknown(null, null, null,null),
-    mysql("com.mysql.jdbc.Driver", "com.mysql.jdbc.jdbc2.optional.MysqlXADataSource", "select 1",Dialect.MYSQL),
-    h2("org.h2.Driver", "org.h2.jdbcx.JdbcDataSource", "select 1",Dialect.H2),
-    oracle("oracle.jdbc.driver.OracleDriver", "oracle.jdbc.xa.client.OracleXADataSource", "select 1 from dual",Dialect.ORACLE);
+    unknown(null, null, null, null, String::isEmpty),
+    mysql("com.mysql.jdbc.Driver", "com.mysql.jdbc.jdbc2.optional.MysqlXADataSource", "select 1", Dialect.MYSQL, createUrlPredicate("mysql")),
+    h2("org.h2.Driver", "org.h2.jdbcx.JdbcDataSource", "select 1", Dialect.H2, createUrlPredicate("h2")),
+    oracle("oracle.jdbc.driver.OracleDriver", "oracle.jdbc.xa.client.OracleXADataSource", "select 1 from dual", Dialect.ORACLE, createUrlPredicate("oracle")),
+    jtds_sqlserver("net.sourceforge.jtds.jdbc.Driver", "net.sourceforge.jtds.jdbcx.JtdsDataSource", "select 1 t", Dialect.MSSQL, createUrlPredicate("jtds:sqlserver")),
+    sqlserver("com.microsoft.sqlserver.jdbc.SQLServerDriver", "com.microsoft.sqlserver.jdbc.SQLServerXADataSource", "select 1 t", Dialect.MSSQL, createUrlPredicate("sqlserver"));
 
-    DatabaseType(String driverClassName, String xaDataSourceClassName, String testQuery,Dialect dialect) {
+    static Predicate<String> createUrlPredicate(String name) {
+        return url -> {
+            String urlWithoutPrefix = url.substring("jdbc".length()).toLowerCase();
+            String prefix = ":" + name.toLowerCase() + ":";
+            return urlWithoutPrefix.startsWith(prefix);
+        };
+    }
+
+    DatabaseType(String driverClassName, String xaDataSourceClassName, String testQuery, Dialect dialect, Predicate<String> urlPredicate) {
         this.driverClassName = driverClassName;
         this.testQuery = testQuery;
         this.xaDataSourceClassName = xaDataSourceClassName;
-        this.dialect=dialect;
+        this.dialect = dialect;
+        this.urlPredicate = urlPredicate;
     }
 
+
     private final String testQuery;
 
     private final String driverClassName;
 
     private final String xaDataSourceClassName;
+
     private final Dialect dialect;
+
+    private final Predicate<String> urlPredicate;
+
     public String getDriverClassName() {
         return driverClassName;
     }
@@ -57,14 +75,7 @@ public enum DatabaseType {
 
     public static DatabaseType fromJdbcUrl(String url) {
         if (StringUtils.hasLength(url)) {
-            Assert.isTrue(url.startsWith("jdbc"), "URL must start with 'jdbc'");
-            String urlWithoutPrefix = url.substring("jdbc".length()).toLowerCase();
-            for (DatabaseType driver : values()) {
-                String prefix = ":" + driver.name().toLowerCase() + ":";
-                if (driver != unknown && urlWithoutPrefix.startsWith(prefix)) {
-                    return driver;
-                }
-            }
+            return Arrays.stream(values()).filter(type -> type.urlPredicate.test(url)).findFirst().orElse(unknown);
         }
         return unknown;
     }

+ 1 - 1
hsweb-web-dao/hsweb-web-dao-api/pom.xml

@@ -5,7 +5,7 @@
     <parent>
         <artifactId>hsweb-web-dao</artifactId>
         <groupId>org.hsweb</groupId>
-       <version>2.2.1</version>
+       <version>2.2.1-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>hsweb-web-dao-api</artifactId>

+ 1 - 1
hsweb-web-dao/hsweb-web-dao-mybatis/README.md

@@ -10,7 +10,7 @@
      <dependency>
         <groupId>org.hsweb</groupId>
         <artifactId>hsweb-web-dao-mybatis</artifactId>
-       <version>2.2.1</version>
+       <version>2.2.1-SNAPSHOT</version>
     </dependency>
 ```
 

+ 1 - 1
hsweb-web-dao/hsweb-web-dao-mybatis/pom.xml

@@ -5,7 +5,7 @@
     <parent>
         <artifactId>hsweb-web-dao</artifactId>
         <groupId>org.hsweb</groupId>
-       <version>2.2.1</version>
+       <version>2.2.1-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>hsweb-web-dao-mybatis</artifactId>

+ 1 - 1
hsweb-web-dao/pom.xml

@@ -21,7 +21,7 @@
     <parent>
         <artifactId>hsweb-framework</artifactId>
         <groupId>org.hsweb</groupId>
-       <version>2.2.1</version>
+       <version>2.2.1-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <packaging>pom</packaging>

+ 1 - 1
hsweb-web-datasource/pom.xml

@@ -21,7 +21,7 @@
     <parent>
         <artifactId>hsweb-framework</artifactId>
         <groupId>org.hsweb</groupId>
-       <version>2.2.1</version>
+       <version>2.2.1-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 

+ 1 - 1
hsweb-web-oauth2/hsweb-web-oauth2-controller/pom.xml

@@ -21,7 +21,7 @@
     <parent>
         <artifactId>hsweb-web-oauth2</artifactId>
         <groupId>org.hsweb</groupId>
-       <version>2.2.1</version>
+       <version>2.2.1-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 

+ 1 - 1
hsweb-web-oauth2/hsweb-web-oauth2-core/pom.xml

@@ -21,7 +21,7 @@
     <parent>
         <artifactId>hsweb-web-oauth2</artifactId>
         <groupId>org.hsweb</groupId>
-       <version>2.2.1</version>
+       <version>2.2.1-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 

+ 1 - 1
hsweb-web-oauth2/hsweb-web-oauth2-mybatis/pom.xml

@@ -21,7 +21,7 @@
     <parent>
         <artifactId>hsweb-web-oauth2</artifactId>
         <groupId>org.hsweb</groupId>
-       <version>2.2.1</version>
+       <version>2.2.1-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 

+ 1 - 1
hsweb-web-oauth2/hsweb-web-oauth2-service-simple/pom.xml

@@ -21,7 +21,7 @@
     <parent>
         <artifactId>hsweb-web-oauth2</artifactId>
         <groupId>org.hsweb</groupId>
-       <version>2.2.1</version>
+       <version>2.2.1-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 

+ 1 - 1
hsweb-web-oauth2/hsweb-web-oauth2-simple/pom.xml

@@ -21,7 +21,7 @@
     <parent>
         <artifactId>hsweb-web-oauth2</artifactId>
         <groupId>org.hsweb</groupId>
-       <version>2.2.1</version>
+       <version>2.2.1-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 

+ 1 - 1
hsweb-web-oauth2/pom.xml

@@ -21,7 +21,7 @@
     <parent>
         <artifactId>hsweb-framework</artifactId>
         <groupId>org.hsweb</groupId>
-       <version>2.2.1</version>
+       <version>2.2.1-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 

+ 1 - 1
hsweb-web-service/hsweb-web-service-api/pom.xml

@@ -5,7 +5,7 @@
     <parent>
         <artifactId>hsweb-web-service</artifactId>
         <groupId>org.hsweb</groupId>
-       <version>2.2.1</version>
+       <version>2.2.1-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>hsweb-web-service-api</artifactId>

+ 2 - 2
hsweb-web-service/hsweb-web-service-simple/pom.xml

@@ -5,7 +5,7 @@
     <parent>
         <artifactId>hsweb-web-service</artifactId>
         <groupId>org.hsweb</groupId>
-       <version>2.2.1</version>
+       <version>2.2.1-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
@@ -45,7 +45,7 @@
         <dependency>
             <groupId>javax.el</groupId>
             <artifactId>el-api</artifactId>
-           <version>2.2.1</version>
+           <version>2.2</version>
             <scope>test</scope>
         </dependency>
 

+ 5 - 3
hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/DataBaseAutoConfiguration.java

@@ -5,11 +5,9 @@ import org.hsweb.ezorm.core.ValidatorFactory;
 import org.hsweb.ezorm.rdb.RDBDatabase;
 import org.hsweb.ezorm.rdb.executor.SqlExecutor;
 import org.hsweb.ezorm.rdb.meta.RDBDatabaseMetaData;
-import org.hsweb.ezorm.rdb.meta.parser.H2TableMetaParser;
-import org.hsweb.ezorm.rdb.meta.parser.MysqlTableMetaParser;
-import org.hsweb.ezorm.rdb.meta.parser.OracleTableMetaParser;
 import org.hsweb.ezorm.rdb.meta.parser.TableMetaParser;
 import org.hsweb.ezorm.rdb.render.dialect.H2RDBDatabaseMetaData;
+import org.hsweb.ezorm.rdb.render.dialect.MSSQLRDBDatabaseMetaData;
 import org.hsweb.ezorm.rdb.render.dialect.MysqlRDBDatabaseMetaData;
 import org.hsweb.ezorm.rdb.render.dialect.OracleRDBDatabaseMetaData;
 import org.hsweb.ezorm.rdb.simple.SimpleDatabase;
@@ -62,6 +60,10 @@ public class DataBaseAutoConfiguration {
             case h2:
                 dataBaseMetaData = new H2RDBDatabaseMetaData();
                 break;
+            case jtds_sqlserver:
+            case sqlserver:
+                dataBaseMetaData = new MSSQLRDBDatabaseMetaData();
+                break;
             default:
                 dataBaseMetaData = new H2RDBDatabaseMetaData();
                 break;

+ 6 - 0
hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/SchedulerAutoConfiguration.java

@@ -16,6 +16,8 @@
 
 package org.hsweb.web.service.impl;
 
+import org.hsweb.web.core.datasource.DataSourceHolder;
+import org.hsweb.web.core.datasource.DatabaseType;
 import org.hsweb.web.service.impl.quartz.SimpleJobFactory;
 import org.quartz.Calendar;
 import org.quartz.SchedulerListener;
@@ -69,6 +71,10 @@ public class SchedulerAutoConfiguration {
 
     @Bean
     public SchedulerFactoryBean schedulerFactory(JobFactory jobFactory) {
+        if (schedulerProperties.getProperties().get("org.quartz.jobStore.selectWithLockSQL") == null
+                && (DataSourceHolder.getDefaultDatabaseType() == DatabaseType.jtds_sqlserver || DataSourceHolder.getDefaultDatabaseType() == DatabaseType.sqlserver)) {
+            schedulerProperties.getProperties().put("org.quartz.jobStore.selectWithLockSQL", "SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ? ");
+        }
         SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
         schedulerFactoryBean.setApplicationContext(applicationContext);
         schedulerFactoryBean.setAutoStartup(schedulerProperties.isAutoStartup());

+ 1 - 1
hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/SchedulerProperties.java

@@ -32,7 +32,7 @@ public class SchedulerProperties {
 
     private int startupDelay = 0;
 
-    private Properties properties;
+    private Properties properties = new Properties();
 
     public boolean isAutoStartup() {
         return autoStartup;

+ 7 - 1
hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/quartz/QuartzJobServiceImpl.java

@@ -162,6 +162,10 @@ public class QuartzJobServiceImpl extends AbstractServiceImpl<QuartzJob, String>
         }
     }
 
+    public interface JobHelper {
+        void cancel();
+    }
+
     @Override
     @Transactional
     public Object execute(String id, Map<String, Object> var) {
@@ -193,11 +197,13 @@ public class QuartzJobServiceImpl extends AbstractServiceImpl<QuartzJob, String>
             }
             if (logger.isDebugEnabled())
                 logger.debug("job running...");
+            //取消任务
+            var.put("job", (JobHelper) () -> disable(id));
             ExecuteResult result = engine.execute(scriptId, var);
             if (logger.isDebugEnabled())
                 logger.debug("job end...{} ", result.isSuccess() ? "success" : "fail");
             if (result.isSuccess()) {
-                Object res = result.getResult();
+                Object res = result.get();
                 if (res instanceof String)
                     strRes = ((String) res);
                 else strRes = JSON.toJSONString(res);

+ 1 - 1
hsweb-web-service/pom.xml

@@ -21,7 +21,7 @@
     <parent>
         <artifactId>hsweb-framework</artifactId>
         <groupId>org.hsweb</groupId>
-       <version>2.2.1</version>
+       <version>2.2.1-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <modules>

+ 1 - 1
hsweb-web-starter/pom.xml

@@ -5,7 +5,7 @@
     <parent>
         <artifactId>hsweb-framework</artifactId>
         <groupId>org.hsweb</groupId>
-       <version>2.2.1</version>
+       <version>2.2.1-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 

+ 1 - 1
hsweb-web-starter/src/main/java/org/hsweb/web/starter/SystemInitialize.java

@@ -247,7 +247,7 @@ public class SystemInitialize implements InitializingBean {
             }
         }
         RDBTable<SystemVersion> rdbTable = database.getTable("s_system");
-        return rdbTable.createQuery().single();
+        return rdbTable.createQuery().noPaging().list().stream().findFirst().orElse(null);
     }
 
     private int compareFileName(Resource resource, Resource target) {

+ 7 - 1
hsweb-web-starter/src/main/java/org/hsweb/web/starter/SystemInitializeAutoConfiguration.java

@@ -1,12 +1,13 @@
 package org.hsweb.web.starter;
 
-import org.hsweb.ezorm.rdb.RDBDatabase;
 import org.hsweb.ezorm.rdb.executor.SqlExecutor;
 import org.hsweb.ezorm.rdb.meta.RDBDatabaseMetaData;
 import org.hsweb.ezorm.rdb.meta.parser.H2TableMetaParser;
 import org.hsweb.ezorm.rdb.meta.parser.MysqlTableMetaParser;
 import org.hsweb.ezorm.rdb.meta.parser.OracleTableMetaParser;
+import org.hsweb.ezorm.rdb.meta.parser.SqlServer2012TableMetaParser;
 import org.hsweb.ezorm.rdb.render.dialect.H2RDBDatabaseMetaData;
+import org.hsweb.ezorm.rdb.render.dialect.MSSQLRDBDatabaseMetaData;
 import org.hsweb.ezorm.rdb.render.dialect.MysqlRDBDatabaseMetaData;
 import org.hsweb.ezorm.rdb.render.dialect.OracleRDBDatabaseMetaData;
 import org.hsweb.ezorm.rdb.simple.SimpleDatabase;
@@ -58,6 +59,11 @@ public class SystemInitializeAutoConfiguration {
                 metaData = new MysqlRDBDatabaseMetaData();
                 metaData.setParser(new MysqlTableMetaParser(sqlExecutor));
                 break;
+            case jtds_sqlserver:
+            case sqlserver:
+                metaData = new MSSQLRDBDatabaseMetaData();
+                metaData.setParser(new SqlServer2012TableMetaParser(sqlExecutor));
+                break;
             default:
                 h2:
                 metaData = new H2RDBDatabaseMetaData();

+ 340 - 0
hsweb-web-starter/src/main/resources/org/hsweb/start/scripts/install/sql/jtds_sqlserver/install.sql

@@ -0,0 +1,340 @@
+IF EXISTS(SELECT *
+          FROM dbo.sysobjects
+          WHERE id = OBJECT_ID(N'[dbo].[FK_QRTZ_TRIGGERS_QRTZ_JOB_DETAILS]') AND OBJECTPROPERTY(id, N'ISFOREIGNKEY') = 1)
+  ALTER TABLE [dbo].[QRTZ_TRIGGERS]
+    DROP CONSTRAINT FK_QRTZ_TRIGGERS_QRTZ_JOB_DETAILS;
+
+IF EXISTS(SELECT *
+          FROM dbo.sysobjects
+          WHERE id = OBJECT_ID(N'[dbo].[FK_QRTZ_CRON_TRIGGERS_QRTZ_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISFOREIGNKEY') = 1)
+  ALTER TABLE [dbo].[QRTZ_CRON_TRIGGERS]
+    DROP CONSTRAINT FK_QRTZ_CRON_TRIGGERS_QRTZ_TRIGGERS;
+
+IF EXISTS(SELECT *
+          FROM dbo.sysobjects
+          WHERE id = OBJECT_ID(N'[dbo].[FK_QRTZ_SIMPLE_TRIGGERS_QRTZ_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISFOREIGNKEY') = 1)
+  ALTER TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS]
+    DROP CONSTRAINT FK_QRTZ_SIMPLE_TRIGGERS_QRTZ_TRIGGERS;
+
+IF EXISTS(SELECT *
+          FROM dbo.sysobjects
+          WHERE id = OBJECT_ID(N'[dbo].[FK_QRTZ_SIMPROP_TRIGGERS_QRTZ_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISFOREIGNKEY') = 1)
+  ALTER TABLE [dbo].[QRTZ_SIMPROP_TRIGGERS]
+    DROP CONSTRAINT FK_QRTZ_SIMPROP_TRIGGERS_QRTZ_TRIGGERS;
+
+IF EXISTS(SELECT *
+          FROM dbo.sysobjects
+          WHERE id = OBJECT_ID(N'[dbo].[QRTZ_CALENDARS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
+  DROP TABLE [dbo].[QRTZ_CALENDARS];
+
+IF EXISTS(SELECT *
+          FROM dbo.sysobjects
+          WHERE id = OBJECT_ID(N'[dbo].[QRTZ_CRON_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
+  DROP TABLE [dbo].[QRTZ_CRON_TRIGGERS];
+
+IF EXISTS(SELECT *
+          FROM dbo.sysobjects
+          WHERE id = OBJECT_ID(N'[dbo].[QRTZ_BLOB_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
+  DROP TABLE [dbo].[QRTZ_BLOB_TRIGGERS];
+
+IF EXISTS(SELECT *
+          FROM dbo.sysobjects
+          WHERE id = OBJECT_ID(N'[dbo].[QRTZ_FIRED_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
+  DROP TABLE [dbo].[QRTZ_FIRED_TRIGGERS];
+
+IF EXISTS(SELECT *
+          FROM dbo.sysobjects
+          WHERE id = OBJECT_ID(N'[dbo].[QRTZ_PAUSED_TRIGGER_GRPS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
+  DROP TABLE [dbo].[QRTZ_PAUSED_TRIGGER_GRPS];
+
+IF EXISTS(SELECT *
+          FROM dbo.sysobjects
+          WHERE id = OBJECT_ID(N'[dbo].[QRTZ_SCHEDULER_STATE]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
+  DROP TABLE [dbo].[QRTZ_SCHEDULER_STATE];
+
+IF EXISTS(SELECT *
+          FROM dbo.sysobjects
+          WHERE id = OBJECT_ID(N'[dbo].[QRTZ_LOCKS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
+  DROP TABLE [dbo].[QRTZ_LOCKS];
+
+IF EXISTS(SELECT *
+          FROM dbo.sysobjects
+          WHERE id = OBJECT_ID(N'[dbo].[QRTZ_JOB_DETAILS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
+  DROP TABLE [dbo].[QRTZ_JOB_DETAILS];
+
+IF EXISTS(SELECT *
+          FROM dbo.sysobjects
+          WHERE id = OBJECT_ID(N'[dbo].[QRTZ_SIMPLE_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
+  DROP TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS];
+
+IF EXISTS(SELECT *
+          FROM dbo.sysobjects
+          WHERE id = OBJECT_ID(N'[dbo].[QRTZ_SIMPROP_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
+  DROP TABLE [dbo].[QRTZ_SIMPROP_TRIGGERS];
+
+IF EXISTS(SELECT *
+          FROM dbo.sysobjects
+          WHERE id = OBJECT_ID(N'[dbo].[QRTZ_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
+  DROP TABLE [dbo].[QRTZ_TRIGGERS];
+
+CREATE TABLE [dbo].[QRTZ_CALENDARS] (
+  [SCHED_NAME]    [VARCHAR](120) NOT NULL,
+  [CALENDAR_NAME] [VARCHAR](200) NOT NULL,
+  [CALENDAR]      [IMAGE]        NOT NULL
+) ON [PRIMARY];
+
+CREATE TABLE [dbo].[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)
+) ON [PRIMARY];
+
+CREATE TABLE [dbo].[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]        [BIGINT]       NOT NULL,
+  [SCHED_TIME]        [BIGINT]       NOT NULL,
+  [PRIORITY]          [INTEGER]      NOT NULL,
+  [STATE]             [VARCHAR](16)  NOT NULL,
+  [JOB_NAME]          [VARCHAR](200) NULL,
+  [JOB_GROUP]         [VARCHAR](200) NULL,
+  [IS_NONCONCURRENT]  [VARCHAR](1)   NULL,
+  [REQUESTS_RECOVERY] [VARCHAR](1)   NULL
+) ON [PRIMARY];
+
+CREATE TABLE [dbo].[QRTZ_PAUSED_TRIGGER_GRPS] (
+  [SCHED_NAME]    [VARCHAR](120) NOT NULL,
+  [TRIGGER_GROUP] [VARCHAR](200) NOT NULL
+) ON [PRIMARY];
+
+CREATE TABLE [dbo].[QRTZ_SCHEDULER_STATE] (
+  [SCHED_NAME]        [VARCHAR](120) NOT NULL,
+  [INSTANCE_NAME]     [VARCHAR](200) NOT NULL,
+  [LAST_CHECKIN_TIME] [BIGINT]       NOT NULL,
+  [CHECKIN_INTERVAL]  [BIGINT]       NOT NULL
+) ON [PRIMARY];
+
+CREATE TABLE [dbo].[QRTZ_LOCKS] (
+  [SCHED_NAME] [VARCHAR](120) NOT NULL,
+  [LOCK_NAME]  [VARCHAR](40)  NOT NULL
+) ON [PRIMARY];
+
+CREATE TABLE [dbo].[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]        [VARCHAR](1)   NOT NULL,
+  [IS_NONCONCURRENT]  [VARCHAR](1)   NOT NULL,
+  [IS_UPDATE_DATA]    [VARCHAR](1)   NOT NULL,
+  [REQUESTS_RECOVERY] [VARCHAR](1)   NOT NULL,
+  [JOB_DATA]          [IMAGE]        NULL
+) ON [PRIMARY];
+
+CREATE TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS] (
+  [SCHED_NAME]      [VARCHAR](120) NOT NULL,
+  [TRIGGER_NAME]    [VARCHAR](200) NOT NULL,
+  [TRIGGER_GROUP]   [VARCHAR](200) NOT NULL,
+  [REPEAT_COUNT]    [BIGINT]       NOT NULL,
+  [REPEAT_INTERVAL] [BIGINT]       NOT NULL,
+  [TIMES_TRIGGERED] [BIGINT]       NOT NULL
+) ON [PRIMARY];
+
+CREATE TABLE [dbo].[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]    [INT]            NULL,
+  [INT_PROP_2]    [INT]            NULL,
+  [LONG_PROP_1]   [BIGINT]         NULL,
+  [LONG_PROP_2]   [BIGINT]         NULL,
+  [DEC_PROP_1]    [NUMERIC](13, 4) NULL,
+  [DEC_PROP_2]    [NUMERIC](13, 4) NULL,
+  [BOOL_PROP_1]   [VARCHAR](1)     NULL,
+  [BOOL_PROP_2]   [VARCHAR](1)     NULL,
+) ON [PRIMARY];
+
+CREATE TABLE [dbo].[QRTZ_BLOB_TRIGGERS] (
+  [SCHED_NAME]    [VARCHAR](120) NOT NULL,
+  [TRIGGER_NAME]  [VARCHAR](200) NOT NULL,
+  [TRIGGER_GROUP] [VARCHAR](200) NOT NULL,
+  [BLOB_DATA]     [IMAGE]        NULL
+) ON [PRIMARY];
+
+CREATE TABLE [dbo].[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] [BIGINT]       NULL,
+  [PREV_FIRE_TIME] [BIGINT]       NULL,
+  [PRIORITY]       [INTEGER]      NULL,
+  [TRIGGER_STATE]  [VARCHAR](16)  NOT NULL,
+  [TRIGGER_TYPE]   [VARCHAR](8)   NOT NULL,
+  [START_TIME]     [BIGINT]       NOT NULL,
+  [END_TIME]       [BIGINT]       NULL,
+  [CALENDAR_NAME]  [VARCHAR](200) NULL,
+  [MISFIRE_INSTR]  [SMALLINT]     NULL,
+  [JOB_DATA]       [IMAGE]        NULL
+) ON [PRIMARY];
+
+ALTER TABLE [dbo].[QRTZ_CALENDARS]
+  WITH NOCHECK ADD
+  CONSTRAINT [PK_QRTZ_CALENDARS] PRIMARY KEY CLUSTERED
+    (
+      [SCHED_NAME],
+      [CALENDAR_NAME]
+    )
+    ON [PRIMARY];
+
+ALTER TABLE [dbo].[QRTZ_CRON_TRIGGERS]
+  WITH NOCHECK ADD
+  CONSTRAINT [PK_QRTZ_CRON_TRIGGERS] PRIMARY KEY CLUSTERED
+    (
+      [SCHED_NAME],
+      [TRIGGER_NAME],
+      [TRIGGER_GROUP]
+    )
+    ON [PRIMARY];
+
+ALTER TABLE [dbo].[QRTZ_FIRED_TRIGGERS]
+  WITH NOCHECK ADD
+  CONSTRAINT [PK_QRTZ_FIRED_TRIGGERS] PRIMARY KEY CLUSTERED
+    (
+      [SCHED_NAME],
+      [ENTRY_ID]
+    )
+    ON [PRIMARY];
+
+ALTER TABLE [dbo].[QRTZ_PAUSED_TRIGGER_GRPS]
+  WITH NOCHECK ADD
+  CONSTRAINT [PK_QRTZ_PAUSED_TRIGGER_GRPS] PRIMARY KEY CLUSTERED
+    (
+      [SCHED_NAME],
+      [TRIGGER_GROUP]
+    )
+    ON [PRIMARY];
+
+ALTER TABLE [dbo].[QRTZ_SCHEDULER_STATE]
+  WITH NOCHECK ADD
+  CONSTRAINT [PK_QRTZ_SCHEDULER_STATE] PRIMARY KEY CLUSTERED
+    (
+      [SCHED_NAME],
+      [INSTANCE_NAME]
+    )
+    ON [PRIMARY];
+
+ALTER TABLE [dbo].[QRTZ_LOCKS]
+  WITH NOCHECK ADD
+  CONSTRAINT [PK_QRTZ_LOCKS] PRIMARY KEY CLUSTERED
+    (
+      [SCHED_NAME],
+      [LOCK_NAME]
+    )
+    ON [PRIMARY];
+
+ALTER TABLE [dbo].[QRTZ_JOB_DETAILS]
+  WITH NOCHECK ADD
+  CONSTRAINT [PK_QRTZ_JOB_DETAILS] PRIMARY KEY CLUSTERED
+    (
+      [SCHED_NAME],
+      [JOB_NAME],
+      [JOB_GROUP]
+    )
+    ON [PRIMARY];
+
+ALTER TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS]
+  WITH NOCHECK ADD
+  CONSTRAINT [PK_QRTZ_SIMPLE_TRIGGERS] PRIMARY KEY CLUSTERED
+    (
+      [SCHED_NAME],
+      [TRIGGER_NAME],
+      [TRIGGER_GROUP]
+    )
+    ON [PRIMARY];
+
+ALTER TABLE [dbo].[QRTZ_SIMPROP_TRIGGERS]
+  WITH NOCHECK ADD
+  CONSTRAINT [PK_QRTZ_SIMPROP_TRIGGERS] PRIMARY KEY CLUSTERED
+    (
+      [SCHED_NAME],
+      [TRIGGER_NAME],
+      [TRIGGER_GROUP]
+    )
+    ON [PRIMARY];
+
+ALTER TABLE [dbo].[QRTZ_TRIGGERS]
+  WITH NOCHECK ADD
+  CONSTRAINT [PK_QRTZ_TRIGGERS] PRIMARY KEY CLUSTERED
+    (
+      [SCHED_NAME],
+      [TRIGGER_NAME],
+      [TRIGGER_GROUP]
+    )
+    ON [PRIMARY];
+
+ALTER TABLE [dbo].[QRTZ_CRON_TRIGGERS]
+  ADD
+  CONSTRAINT [FK_QRTZ_CRON_TRIGGERS_QRTZ_TRIGGERS] FOREIGN KEY
+    (
+      [SCHED_NAME],
+      [TRIGGER_NAME],
+      [TRIGGER_GROUP]
+    ) REFERENCES [dbo].[QRTZ_TRIGGERS] (
+    [SCHED_NAME],
+    [TRIGGER_NAME],
+    [TRIGGER_GROUP]
+  )
+    ON DELETE CASCADE;
+
+ALTER TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS]
+  ADD
+  CONSTRAINT [FK_QRTZ_SIMPLE_TRIGGERS_QRTZ_TRIGGERS] FOREIGN KEY
+    (
+      [SCHED_NAME],
+      [TRIGGER_NAME],
+      [TRIGGER_GROUP]
+    ) REFERENCES [dbo].[QRTZ_TRIGGERS] (
+    [SCHED_NAME],
+    [TRIGGER_NAME],
+    [TRIGGER_GROUP]
+  )
+    ON DELETE CASCADE;
+
+ALTER TABLE [dbo].[QRTZ_SIMPROP_TRIGGERS]
+  ADD
+  CONSTRAINT [FK_QRTZ_SIMPROP_TRIGGERS_QRTZ_TRIGGERS] FOREIGN KEY
+    (
+      [SCHED_NAME],
+      [TRIGGER_NAME],
+      [TRIGGER_GROUP]
+    ) REFERENCES [dbo].[QRTZ_TRIGGERS] (
+    [SCHED_NAME],
+    [TRIGGER_NAME],
+    [TRIGGER_GROUP]
+  )
+    ON DELETE CASCADE;
+
+ALTER TABLE [dbo].[QRTZ_TRIGGERS]
+  ADD
+  CONSTRAINT [FK_QRTZ_TRIGGERS_QRTZ_JOB_DETAILS] FOREIGN KEY
+    (
+      [SCHED_NAME],
+      [JOB_NAME],
+      [JOB_GROUP]
+    ) REFERENCES [dbo].[QRTZ_JOB_DETAILS] (
+    [SCHED_NAME],
+    [JOB_NAME],
+    [JOB_GROUP]
+  );

+ 33 - 11
hsweb-web-starter/src/main/resources/org/hsweb/start/scripts/install/sql/mysql/install.sql

@@ -11,7 +11,9 @@ CREATE TABLE QRTZ_JOB_DETAILS
   REQUESTS_RECOVERY VARCHAR(1)   NOT NULL,
   JOB_DATA          BLOB         NULL,
   PRIMARY KEY (SCHED_NAME, JOB_NAME, JOB_GROUP)
-);
+)
+  ENGINE = InnoDB
+  CHARACTER SET utf8;
 
 CREATE TABLE QRTZ_TRIGGERS
 (
@@ -34,7 +36,9 @@ CREATE TABLE QRTZ_TRIGGERS
   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)
-);
+)
+  ENGINE = InnoDB
+  CHARACTER SET utf8;
 
 CREATE TABLE QRTZ_SIMPLE_TRIGGERS
 (
@@ -47,7 +51,9 @@ CREATE TABLE QRTZ_SIMPLE_TRIGGERS
   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)
-);
+)
+  ENGINE = InnoDB
+  CHARACTER SET utf8;
 
 CREATE TABLE QRTZ_CRON_TRIGGERS
 (
@@ -59,7 +65,9 @@ CREATE TABLE QRTZ_CRON_TRIGGERS
   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)
-);
+)
+  ENGINE = InnoDB
+  CHARACTER SET utf8;
 
 CREATE TABLE QRTZ_SIMPROP_TRIGGERS
 (
@@ -80,7 +88,9 @@ CREATE TABLE QRTZ_SIMPROP_TRIGGERS
   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)
-);
+)
+  ENGINE = InnoDB
+  CHARACTER SET utf8;
 
 CREATE TABLE QRTZ_BLOB_TRIGGERS
 (
@@ -91,7 +101,9 @@ CREATE TABLE QRTZ_BLOB_TRIGGERS
   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)
-);
+)
+  ENGINE = InnoDB
+  CHARACTER SET utf8;
 
 CREATE TABLE QRTZ_CALENDARS
 (
@@ -99,14 +111,18 @@ CREATE TABLE QRTZ_CALENDARS
   CALENDAR_NAME VARCHAR(200) NOT NULL,
   CALENDAR      BLOB         NOT NULL,
   PRIMARY KEY (SCHED_NAME, CALENDAR_NAME)
-);
+)
+  ENGINE = InnoDB
+  CHARACTER SET utf8;
 
 CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS
 (
   SCHED_NAME    VARCHAR(120) NOT NULL,
   TRIGGER_GROUP VARCHAR(200) NOT NULL,
   PRIMARY KEY (SCHED_NAME, TRIGGER_GROUP)
-);
+)
+  ENGINE = InnoDB
+  CHARACTER SET utf8;
 
 CREATE TABLE QRTZ_FIRED_TRIGGERS
 (
@@ -124,7 +140,9 @@ CREATE TABLE QRTZ_FIRED_TRIGGERS
   IS_NONCONCURRENT  VARCHAR(1)   NULL,
   REQUESTS_RECOVERY VARCHAR(1)   NULL,
   PRIMARY KEY (SCHED_NAME, ENTRY_ID)
-);
+)
+  ENGINE = InnoDB
+  CHARACTER SET utf8;
 
 CREATE TABLE QRTZ_SCHEDULER_STATE
 (
@@ -133,12 +151,16 @@ CREATE TABLE QRTZ_SCHEDULER_STATE
   LAST_CHECKIN_TIME BIGINT(13)   NOT NULL,
   CHECKIN_INTERVAL  BIGINT(13)   NOT NULL,
   PRIMARY KEY (SCHED_NAME, INSTANCE_NAME)
-);
+)
+  ENGINE = InnoDB
+  CHARACTER SET utf8;
 
 CREATE TABLE QRTZ_LOCKS
 (
   SCHED_NAME VARCHAR(120) NOT NULL,
   LOCK_NAME  VARCHAR(40)  NOT NULL,
   PRIMARY KEY (SCHED_NAME, LOCK_NAME)
-);
+)
+  ENGINE = InnoDB
+  CHARACTER SET utf8;
 

+ 340 - 0
hsweb-web-starter/src/main/resources/org/hsweb/start/scripts/install/sql/sqlserver/install.sql

@@ -0,0 +1,340 @@
+IF EXISTS(SELECT *
+          FROM dbo.sysobjects
+          WHERE id = OBJECT_ID(N'[dbo].[FK_QRTZ_TRIGGERS_QRTZ_JOB_DETAILS]') AND OBJECTPROPERTY(id, N'ISFOREIGNKEY') = 1)
+  ALTER TABLE [dbo].[QRTZ_TRIGGERS]
+    DROP CONSTRAINT FK_QRTZ_TRIGGERS_QRTZ_JOB_DETAILS;
+
+IF EXISTS(SELECT *
+          FROM dbo.sysobjects
+          WHERE id = OBJECT_ID(N'[dbo].[FK_QRTZ_CRON_TRIGGERS_QRTZ_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISFOREIGNKEY') = 1)
+  ALTER TABLE [dbo].[QRTZ_CRON_TRIGGERS]
+    DROP CONSTRAINT FK_QRTZ_CRON_TRIGGERS_QRTZ_TRIGGERS;
+
+IF EXISTS(SELECT *
+          FROM dbo.sysobjects
+          WHERE id = OBJECT_ID(N'[dbo].[FK_QRTZ_SIMPLE_TRIGGERS_QRTZ_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISFOREIGNKEY') = 1)
+  ALTER TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS]
+    DROP CONSTRAINT FK_QRTZ_SIMPLE_TRIGGERS_QRTZ_TRIGGERS;
+
+IF EXISTS(SELECT *
+          FROM dbo.sysobjects
+          WHERE id = OBJECT_ID(N'[dbo].[FK_QRTZ_SIMPROP_TRIGGERS_QRTZ_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISFOREIGNKEY') = 1)
+  ALTER TABLE [dbo].[QRTZ_SIMPROP_TRIGGERS]
+    DROP CONSTRAINT FK_QRTZ_SIMPROP_TRIGGERS_QRTZ_TRIGGERS;
+
+IF EXISTS(SELECT *
+          FROM dbo.sysobjects
+          WHERE id = OBJECT_ID(N'[dbo].[QRTZ_CALENDARS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
+  DROP TABLE [dbo].[QRTZ_CALENDARS];
+
+IF EXISTS(SELECT *
+          FROM dbo.sysobjects
+          WHERE id = OBJECT_ID(N'[dbo].[QRTZ_CRON_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
+  DROP TABLE [dbo].[QRTZ_CRON_TRIGGERS];
+
+IF EXISTS(SELECT *
+          FROM dbo.sysobjects
+          WHERE id = OBJECT_ID(N'[dbo].[QRTZ_BLOB_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
+  DROP TABLE [dbo].[QRTZ_BLOB_TRIGGERS];
+
+IF EXISTS(SELECT *
+          FROM dbo.sysobjects
+          WHERE id = OBJECT_ID(N'[dbo].[QRTZ_FIRED_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
+  DROP TABLE [dbo].[QRTZ_FIRED_TRIGGERS];
+
+IF EXISTS(SELECT *
+          FROM dbo.sysobjects
+          WHERE id = OBJECT_ID(N'[dbo].[QRTZ_PAUSED_TRIGGER_GRPS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
+  DROP TABLE [dbo].[QRTZ_PAUSED_TRIGGER_GRPS];
+
+IF EXISTS(SELECT *
+          FROM dbo.sysobjects
+          WHERE id = OBJECT_ID(N'[dbo].[QRTZ_SCHEDULER_STATE]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
+  DROP TABLE [dbo].[QRTZ_SCHEDULER_STATE];
+
+IF EXISTS(SELECT *
+          FROM dbo.sysobjects
+          WHERE id = OBJECT_ID(N'[dbo].[QRTZ_LOCKS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
+  DROP TABLE [dbo].[QRTZ_LOCKS];
+
+IF EXISTS(SELECT *
+          FROM dbo.sysobjects
+          WHERE id = OBJECT_ID(N'[dbo].[QRTZ_JOB_DETAILS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
+  DROP TABLE [dbo].[QRTZ_JOB_DETAILS];
+
+IF EXISTS(SELECT *
+          FROM dbo.sysobjects
+          WHERE id = OBJECT_ID(N'[dbo].[QRTZ_SIMPLE_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
+  DROP TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS];
+
+IF EXISTS(SELECT *
+          FROM dbo.sysobjects
+          WHERE id = OBJECT_ID(N'[dbo].[QRTZ_SIMPROP_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
+  DROP TABLE [dbo].[QRTZ_SIMPROP_TRIGGERS];
+
+IF EXISTS(SELECT *
+          FROM dbo.sysobjects
+          WHERE id = OBJECT_ID(N'[dbo].[QRTZ_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
+  DROP TABLE [dbo].[QRTZ_TRIGGERS];
+
+CREATE TABLE [dbo].[QRTZ_CALENDARS] (
+  [SCHED_NAME]    [VARCHAR](120) NOT NULL,
+  [CALENDAR_NAME] [VARCHAR](200) NOT NULL,
+  [CALENDAR]      [IMAGE]        NOT NULL
+) ON [PRIMARY];
+
+CREATE TABLE [dbo].[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)
+) ON [PRIMARY];
+
+CREATE TABLE [dbo].[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]        [BIGINT]       NOT NULL,
+  [SCHED_TIME]        [BIGINT]       NOT NULL,
+  [PRIORITY]          [INTEGER]      NOT NULL,
+  [STATE]             [VARCHAR](16)  NOT NULL,
+  [JOB_NAME]          [VARCHAR](200) NULL,
+  [JOB_GROUP]         [VARCHAR](200) NULL,
+  [IS_NONCONCURRENT]  [VARCHAR](1)   NULL,
+  [REQUESTS_RECOVERY] [VARCHAR](1)   NULL
+) ON [PRIMARY];
+
+CREATE TABLE [dbo].[QRTZ_PAUSED_TRIGGER_GRPS] (
+  [SCHED_NAME]    [VARCHAR](120) NOT NULL,
+  [TRIGGER_GROUP] [VARCHAR](200) NOT NULL
+) ON [PRIMARY];
+
+CREATE TABLE [dbo].[QRTZ_SCHEDULER_STATE] (
+  [SCHED_NAME]        [VARCHAR](120) NOT NULL,
+  [INSTANCE_NAME]     [VARCHAR](200) NOT NULL,
+  [LAST_CHECKIN_TIME] [BIGINT]       NOT NULL,
+  [CHECKIN_INTERVAL]  [BIGINT]       NOT NULL
+) ON [PRIMARY];
+
+CREATE TABLE [dbo].[QRTZ_LOCKS] (
+  [SCHED_NAME] [VARCHAR](120) NOT NULL,
+  [LOCK_NAME]  [VARCHAR](40)  NOT NULL
+) ON [PRIMARY];
+
+CREATE TABLE [dbo].[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]        [VARCHAR](1)   NOT NULL,
+  [IS_NONCONCURRENT]  [VARCHAR](1)   NOT NULL,
+  [IS_UPDATE_DATA]    [VARCHAR](1)   NOT NULL,
+  [REQUESTS_RECOVERY] [VARCHAR](1)   NOT NULL,
+  [JOB_DATA]          [IMAGE]        NULL
+) ON [PRIMARY];
+
+CREATE TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS] (
+  [SCHED_NAME]      [VARCHAR](120) NOT NULL,
+  [TRIGGER_NAME]    [VARCHAR](200) NOT NULL,
+  [TRIGGER_GROUP]   [VARCHAR](200) NOT NULL,
+  [REPEAT_COUNT]    [BIGINT]       NOT NULL,
+  [REPEAT_INTERVAL] [BIGINT]       NOT NULL,
+  [TIMES_TRIGGERED] [BIGINT]       NOT NULL
+) ON [PRIMARY];
+
+CREATE TABLE [dbo].[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]    [INT]            NULL,
+  [INT_PROP_2]    [INT]            NULL,
+  [LONG_PROP_1]   [BIGINT]         NULL,
+  [LONG_PROP_2]   [BIGINT]         NULL,
+  [DEC_PROP_1]    [NUMERIC](13, 4) NULL,
+  [DEC_PROP_2]    [NUMERIC](13, 4) NULL,
+  [BOOL_PROP_1]   [VARCHAR](1)     NULL,
+  [BOOL_PROP_2]   [VARCHAR](1)     NULL,
+) ON [PRIMARY];
+
+CREATE TABLE [dbo].[QRTZ_BLOB_TRIGGERS] (
+  [SCHED_NAME]    [VARCHAR](120) NOT NULL,
+  [TRIGGER_NAME]  [VARCHAR](200) NOT NULL,
+  [TRIGGER_GROUP] [VARCHAR](200) NOT NULL,
+  [BLOB_DATA]     [IMAGE]        NULL
+) ON [PRIMARY];
+
+CREATE TABLE [dbo].[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] [BIGINT]       NULL,
+  [PREV_FIRE_TIME] [BIGINT]       NULL,
+  [PRIORITY]       [INTEGER]      NULL,
+  [TRIGGER_STATE]  [VARCHAR](16)  NOT NULL,
+  [TRIGGER_TYPE]   [VARCHAR](8)   NOT NULL,
+  [START_TIME]     [BIGINT]       NOT NULL,
+  [END_TIME]       [BIGINT]       NULL,
+  [CALENDAR_NAME]  [VARCHAR](200) NULL,
+  [MISFIRE_INSTR]  [SMALLINT]     NULL,
+  [JOB_DATA]       [IMAGE]        NULL
+) ON [PRIMARY];
+
+ALTER TABLE [dbo].[QRTZ_CALENDARS]
+  WITH NOCHECK ADD
+  CONSTRAINT [PK_QRTZ_CALENDARS] PRIMARY KEY CLUSTERED
+    (
+      [SCHED_NAME],
+      [CALENDAR_NAME]
+    )
+    ON [PRIMARY];
+
+ALTER TABLE [dbo].[QRTZ_CRON_TRIGGERS]
+  WITH NOCHECK ADD
+  CONSTRAINT [PK_QRTZ_CRON_TRIGGERS] PRIMARY KEY CLUSTERED
+    (
+      [SCHED_NAME],
+      [TRIGGER_NAME],
+      [TRIGGER_GROUP]
+    )
+    ON [PRIMARY];
+
+ALTER TABLE [dbo].[QRTZ_FIRED_TRIGGERS]
+  WITH NOCHECK ADD
+  CONSTRAINT [PK_QRTZ_FIRED_TRIGGERS] PRIMARY KEY CLUSTERED
+    (
+      [SCHED_NAME],
+      [ENTRY_ID]
+    )
+    ON [PRIMARY];
+
+ALTER TABLE [dbo].[QRTZ_PAUSED_TRIGGER_GRPS]
+  WITH NOCHECK ADD
+  CONSTRAINT [PK_QRTZ_PAUSED_TRIGGER_GRPS] PRIMARY KEY CLUSTERED
+    (
+      [SCHED_NAME],
+      [TRIGGER_GROUP]
+    )
+    ON [PRIMARY];
+
+ALTER TABLE [dbo].[QRTZ_SCHEDULER_STATE]
+  WITH NOCHECK ADD
+  CONSTRAINT [PK_QRTZ_SCHEDULER_STATE] PRIMARY KEY CLUSTERED
+    (
+      [SCHED_NAME],
+      [INSTANCE_NAME]
+    )
+    ON [PRIMARY];
+
+ALTER TABLE [dbo].[QRTZ_LOCKS]
+  WITH NOCHECK ADD
+  CONSTRAINT [PK_QRTZ_LOCKS] PRIMARY KEY CLUSTERED
+    (
+      [SCHED_NAME],
+      [LOCK_NAME]
+    )
+    ON [PRIMARY];
+
+ALTER TABLE [dbo].[QRTZ_JOB_DETAILS]
+  WITH NOCHECK ADD
+  CONSTRAINT [PK_QRTZ_JOB_DETAILS] PRIMARY KEY CLUSTERED
+    (
+      [SCHED_NAME],
+      [JOB_NAME],
+      [JOB_GROUP]
+    )
+    ON [PRIMARY];
+
+ALTER TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS]
+  WITH NOCHECK ADD
+  CONSTRAINT [PK_QRTZ_SIMPLE_TRIGGERS] PRIMARY KEY CLUSTERED
+    (
+      [SCHED_NAME],
+      [TRIGGER_NAME],
+      [TRIGGER_GROUP]
+    )
+    ON [PRIMARY];
+
+ALTER TABLE [dbo].[QRTZ_SIMPROP_TRIGGERS]
+  WITH NOCHECK ADD
+  CONSTRAINT [PK_QRTZ_SIMPROP_TRIGGERS] PRIMARY KEY CLUSTERED
+    (
+      [SCHED_NAME],
+      [TRIGGER_NAME],
+      [TRIGGER_GROUP]
+    )
+    ON [PRIMARY];
+
+ALTER TABLE [dbo].[QRTZ_TRIGGERS]
+  WITH NOCHECK ADD
+  CONSTRAINT [PK_QRTZ_TRIGGERS] PRIMARY KEY CLUSTERED
+    (
+      [SCHED_NAME],
+      [TRIGGER_NAME],
+      [TRIGGER_GROUP]
+    )
+    ON [PRIMARY];
+
+ALTER TABLE [dbo].[QRTZ_CRON_TRIGGERS]
+  ADD
+  CONSTRAINT [FK_QRTZ_CRON_TRIGGERS_QRTZ_TRIGGERS] FOREIGN KEY
+    (
+      [SCHED_NAME],
+      [TRIGGER_NAME],
+      [TRIGGER_GROUP]
+    ) REFERENCES [dbo].[QRTZ_TRIGGERS] (
+    [SCHED_NAME],
+    [TRIGGER_NAME],
+    [TRIGGER_GROUP]
+  )
+    ON DELETE CASCADE;
+
+ALTER TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS]
+  ADD
+  CONSTRAINT [FK_QRTZ_SIMPLE_TRIGGERS_QRTZ_TRIGGERS] FOREIGN KEY
+    (
+      [SCHED_NAME],
+      [TRIGGER_NAME],
+      [TRIGGER_GROUP]
+    ) REFERENCES [dbo].[QRTZ_TRIGGERS] (
+    [SCHED_NAME],
+    [TRIGGER_NAME],
+    [TRIGGER_GROUP]
+  )
+    ON DELETE CASCADE;
+
+ALTER TABLE [dbo].[QRTZ_SIMPROP_TRIGGERS]
+  ADD
+  CONSTRAINT [FK_QRTZ_SIMPROP_TRIGGERS_QRTZ_TRIGGERS] FOREIGN KEY
+    (
+      [SCHED_NAME],
+      [TRIGGER_NAME],
+      [TRIGGER_GROUP]
+    ) REFERENCES [dbo].[QRTZ_TRIGGERS] (
+    [SCHED_NAME],
+    [TRIGGER_NAME],
+    [TRIGGER_GROUP]
+  )
+    ON DELETE CASCADE;
+
+ALTER TABLE [dbo].[QRTZ_TRIGGERS]
+  ADD
+  CONSTRAINT [FK_QRTZ_TRIGGERS_QRTZ_JOB_DETAILS] FOREIGN KEY
+    (
+      [SCHED_NAME],
+      [JOB_NAME],
+      [JOB_GROUP]
+    ) REFERENCES [dbo].[QRTZ_JOB_DETAILS] (
+    [SCHED_NAME],
+    [JOB_NAME],
+    [JOB_GROUP]
+  );

+ 1 - 1
hsweb-web-websocket/pom.xml

@@ -5,7 +5,7 @@
     <parent>
         <artifactId>hsweb-framework</artifactId>
         <groupId>org.hsweb</groupId>
-       <version>2.2.1</version>
+       <version>2.2.1-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 

+ 1 - 1
hsweb-web-workflow/pom.xml

@@ -5,7 +5,7 @@
     <parent>
         <artifactId>hsweb-framework</artifactId>
         <groupId>org.hsweb</groupId>
-       <version>2.2.1</version>
+       <version>2.2.1-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 

+ 2 - 2
pom.xml

@@ -6,7 +6,7 @@
     <groupId>org.hsweb</groupId>
     <artifactId>hsweb-framework</artifactId>
     <packaging>pom</packaging>
-   <version>2.2.1</version>
+   <version>2.2.1-SNAPSHOT</version>
 
     <name>${project.groupId}:${project.artifactId}</name>
     <url>http://www.hsweb.me</url>
@@ -72,7 +72,7 @@
         <cglib.version>3.2.2</cglib.version>
         <aspectj.version>1.6.12</aspectj.version>
         <hibernate.validator.version>5.1.1.Final</hibernate.validator.version>
-        <hsweb.ezorm.version>1.1</hsweb.ezorm.version>
+        <hsweb.ezorm.version>1.2-SNAPSHOT</hsweb.ezorm.version>
         <hsweb.commons.version>1.0.1</hsweb.commons.version>
         <hsweb.expands.version>1.0</hsweb.expands.version>
     </properties>