Explorar o código

Merge remote-tracking branch 'origin/master'

zhouhao %!s(int64=7) %!d(string=hai) anos
pai
achega
dd36b1841c
Modificáronse 10 ficheiros con 148 adicións e 54 borrados
  1. 21 8
      hsweb-message/hsweb-message-websocket/pom.xml
  2. 17 24
      hsweb-message/hsweb-message-websocket/src/test/java/org/hswebframework/web/socket/WebSocketServerTests.java
  3. 2 0
      hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/SqlExecuteResult.java
  4. 10 10
      hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-simple/src/main/java/org/hswebframework/web/datasource/manager/simple/DefaultLocalTransactionExecutor.java
  5. 8 5
      hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-simple/src/main/java/org/hswebframework/web/datasource/manager/simple/NonTransactionSqlExecutor.java
  6. 15 0
      hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-simple/src/main/java/org/hswebframework/web/datasource/manager/simple/QueryResult.java
  7. 46 0
      hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-simple/src/main/java/org/hswebframework/web/datasource/manager/simple/QueryResultWrapper.java
  8. 2 0
      hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-simple/src/main/java/org/hswebframework/web/datasource/manager/simple/TransactionExecutor.java
  9. 1 1
      hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-starter/src/test/java/org/hswebframework/web/datasource/manager/simple/SimpleDatabaseManagerServiceTest.java
  10. 26 6
      hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-web/src/main/java/org/hswebframework/web/database/manager/web/DataBaseManagerController.java

+ 21 - 8
hsweb-message/hsweb-message-websocket/pom.xml

@@ -19,19 +19,19 @@
             <version>${project.version}</version>
             <scope>test</scope>
         </dependency>
-        <!--<dependency>-->
-            <!--<groupId>org.hswebframework.web</groupId>-->
-            <!--<artifactId>hsweb-message-memory</artifactId>-->
-            <!--<version>${project.version}</version>-->
-            <!--<scope>test</scope>-->
-        <!--</dependency>-->
-
         <dependency>
             <groupId>org.hswebframework.web</groupId>
-            <artifactId>hsweb-message-jms</artifactId>
+            <artifactId>hsweb-message-memory</artifactId>
             <version>${project.version}</version>
             <scope>test</scope>
         </dependency>
+
+        <!--<dependency>-->
+            <!--<groupId>org.hswebframework.web</groupId>-->
+            <!--<artifactId>hsweb-message-jms</artifactId>-->
+            <!--<version>${project.version}</version>-->
+            <!--<scope>test</scope>-->
+        <!--</dependency>-->
         <dependency>
             <groupId>org.hswebframework.web</groupId>
             <artifactId>hsweb-concurrent-counter-redis</artifactId>
@@ -59,7 +59,20 @@
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-websocket</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.springframework.boot</groupId>
+                    <artifactId>spring-boot-starter-tomcat</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+        <!--使用undertow作为web容器-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-undertow</artifactId>
         </dependency>
+
         <dependency>
             <groupId>org.hswebframework.web</groupId>
             <artifactId>hsweb-authorization-api</artifactId>

+ 17 - 24
hsweb-message/hsweb-message-websocket/src/test/java/org/hswebframework/web/socket/WebSocketServerTests.java

@@ -1,20 +1,13 @@
 package org.hswebframework.web.socket;
 
-import org.hswebframework.web.concurrent.counter.Counter;
 import org.hswebframework.web.concurrent.counter.CounterManager;
-import org.hswebframework.web.counter.redis.RedissonCounterManager;
+import org.hswebframework.web.concurrent.counter.SimpleCounterManager;
 import org.hswebframework.web.message.Messager;
-import org.hswebframework.web.message.jms.JmsMessager;
-import org.hswebframework.web.message.redis.RedissonMessager;
-import org.redisson.Redisson;
-import org.redisson.api.RedissonClient;
-import org.redisson.config.Config;
+import org.hswebframework.web.message.memory.MemoryMessager;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
-import org.springframework.jms.annotation.EnableJms;
-import org.springframework.jms.core.JmsTemplate;
 
 /**
  * TODO 完成注释
@@ -23,33 +16,33 @@ import org.springframework.jms.core.JmsTemplate;
  */
 @Configuration
 @EnableAutoConfiguration
-@EnableJms
+//@EnableJms
 public class WebSocketServerTests {
 
     static {
-        System.setProperty("org.apache.activemq.SERIALIZABLE_PACKAGES", "*");
+       // System.setProperty("org.apache.activemq.SERIALIZABLE_PACKAGES", "*");
     }
-
+//
     @Bean
-    public Messager messager(RedissonClient client) {
-        return new RedissonMessager(client);
+    public Messager messager() {
+        return new MemoryMessager();
     }
 
-    @Bean(destroyMethod = "shutdown")
-    public RedissonClient redissonClient(){
-        Config config = new Config();
-        config.useSingleServer().setAddress("redis://127.0.0.1:6379");
-        return Redisson.create(config);
-    }
+//    @Bean(destroyMethod = "shutdown")
+//    public RedissonClient redissonClient(){
+//        Config config = new Config();
+//        config.useSingleServer().setAddress("redis://127.0.0.1:6379");
+//        return Redisson.create(config);
+//    }
 
     @Bean
-    public TestProcessor testProcessor() {
-        return new TestProcessor();
+    public CounterManager counterManager() {
+        return new SimpleCounterManager();
     }
 
     @Bean
-    public CounterManager counterManager(RedissonClient client) {
-        return new RedissonCounterManager(client);
+    public TestProcessor testProcessor() {
+        return new TestProcessor();
     }
 
 //    // 使用redis

+ 2 - 0
hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-api/src/main/java/org/hswebframework/web/database/manager/SqlExecuteResult.java

@@ -18,4 +18,6 @@ public class SqlExecuteResult {
 
     private Object result;
 
+    private boolean success;
+
 }

+ 10 - 10
hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-simple/src/main/java/org/hswebframework/web/datasource/manager/simple/DefaultLocalTransactionExecutor.java

@@ -94,6 +94,10 @@ public class DefaultLocalTransactionExecutor implements TransactionExecutor {
         }
     }
 
+    public boolean isRunning() {
+        return running;
+    }
+
     @Override
     public void rollback() {
         tryRollback();
@@ -178,8 +182,12 @@ public class DefaultLocalTransactionExecutor implements TransactionExecutor {
                                 }
                                 //执行sql
                                 return sqlRequestExecutor.apply(sqlExecutor, sqlInfo);
-                            } catch (SQLException e) {
-                                throw new SqlExecuteException(e.getMessage(), e, sqlInfo.getSql());
+                            } catch (Exception e) {
+                                return SqlExecuteResult.builder()
+                                        .result(e.getMessage())
+                                        .sqlInfo(sqlInfo)
+                                        .success(false)
+                                        .build();
                             }
                         })
                         .collect(Collectors.toList());
@@ -203,7 +211,6 @@ public class DefaultLocalTransactionExecutor implements TransactionExecutor {
         List<SqlExecuteResult> results = new ArrayList<>();
 
         //异常信息
-        Exception[] exceptions = new Exception[1];
         Execution execution = new Execution();
         execution.datasourceId = DataSourceHolder.switcher().currentDataSourceId();
 
@@ -214,7 +221,6 @@ public class DefaultLocalTransactionExecutor implements TransactionExecutor {
             countDownLatch.countDown();
         };
         execution.onError = (e) -> {
-            exceptions[0] = e;
             countDownLatch.countDown();
         };
         logger.debug("submit sql execute job {}", transactionId);
@@ -225,12 +231,6 @@ public class DefaultLocalTransactionExecutor implements TransactionExecutor {
         }
         //等待sql执行完毕
         countDownLatch.await();
-        //判断是否有异常
-        Exception exception;
-        if ((exception = exceptions[0]) != null) {
-            rollback();
-            throw exception;
-        }
         return results;
     }
 

+ 8 - 5
hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-simple/src/main/java/org/hswebframework/web/datasource/manager/simple/NonTransactionSqlExecutor.java

@@ -19,17 +19,19 @@ public class NonTransactionSqlExecutor implements SqlExecutor {
     }
 
     @Override
-    public List<SqlExecuteResult> execute(SqlExecuteRequest request)throws Exception {
+    public List<SqlExecuteResult> execute(SqlExecuteRequest request) throws Exception {
         return request.getSql().stream().map(this::doExecute).collect(Collectors.toList());
     }
 
-    public SqlExecuteResult doExecute(SqlInfo sqlInfo)   {
+    public SqlExecuteResult doExecute(SqlInfo sqlInfo) {
         SqlExecuteResult result = new SqlExecuteResult();
         Object executeResult = null;
         try {
             switch (sqlInfo.getType().toUpperCase()) {
                 case "SELECT":
-                    executeResult = executor.list(sqlInfo.getSql());
+                    QueryResultWrapper wrapper = new QueryResultWrapper();
+                    executor.list(sqlInfo.getSql(), wrapper);
+                    executeResult = wrapper.getResult();
                     break;
                 case "INSERT":
                 case "UPDATE":
@@ -41,8 +43,9 @@ public class NonTransactionSqlExecutor implements SqlExecutor {
                 default:
                     executor.exec(sqlInfo.getSql());
             }
-        }catch (SQLException e){
-            throw new SqlExecuteException(e.getMessage(),e,sqlInfo.getSql());
+            result.setSuccess(true);
+        } catch (SQLException e) {
+            throw new SqlExecuteException(e.getMessage(), e, sqlInfo.getSql());
         }
         result.setResult(executeResult);
         result.setSqlInfo(sqlInfo);

+ 15 - 0
hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-simple/src/main/java/org/hswebframework/web/datasource/manager/simple/QueryResult.java

@@ -0,0 +1,15 @@
+package org.hswebframework.web.datasource.manager.simple;
+
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+@Data
+public class QueryResult {
+    private List<String> columns;
+
+    private List<List<Object>> data=new ArrayList<>();
+
+}

+ 46 - 0
hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-simple/src/main/java/org/hswebframework/web/datasource/manager/simple/QueryResultWrapper.java

@@ -0,0 +1,46 @@
+package org.hswebframework.web.datasource.manager.simple;
+
+import org.hswebframework.ezorm.core.ObjectWrapper;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class QueryResultWrapper implements ObjectWrapper<QueryResult> {
+   private QueryResult result = new QueryResult();
+
+    private List<Object> temp = new ArrayList<>();
+
+    @Override
+    public void setUp(List<String> columns) {
+        result.setColumns(columns);
+    }
+
+    @Override
+    public Class<QueryResult> getType() {
+        return QueryResult.class;
+    }
+
+    @Override
+    public QueryResult newInstance() {
+        return result;
+    }
+
+    @Override
+    public void wrapper(QueryResult instance, int index, String attr, Object value) {
+        temp.add(value);
+
+    }
+
+    @Override
+    public boolean done(QueryResult instance) {
+        instance.getData().add(new ArrayList<>(temp));
+        temp.clear();
+        return false;
+    }
+
+    public QueryResult getResult() {
+        return result;
+    }
+
+
+}

+ 2 - 0
hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-simple/src/main/java/org/hswebframework/web/datasource/manager/simple/TransactionExecutor.java

@@ -17,6 +17,8 @@ public interface TransactionExecutor extends Runnable {
 
     void rollback();
 
+    boolean isRunning();
+
     List<SqlExecuteResult> execute(SqlExecuteRequest request)throws Exception;
 
 }

+ 1 - 1
hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-starter/src/test/java/org/hswebframework/web/datasource/manager/simple/SimpleDatabaseManagerServiceTest.java

@@ -60,7 +60,7 @@ public class SimpleDatabaseManagerServiceTest extends SimpleWebApplicationTests
         countDownLatch.await();
 
         sqlInfo = new SqlInfo();
-        sqlInfo.setSql("select * from t_test ");
+        sqlInfo.setSql("select *,name as \"NAME\",1 as \"\" from t_test ");
         sqlInfo.setType("select");
 
         request.setSql(Arrays.asList(sqlInfo));

+ 26 - 6
hsweb-system/hsweb-system-database-manager/hsweb-system-database-manager-web/src/main/java/org/hswebframework/web/database/manager/web/DataBaseManagerController.java

@@ -4,8 +4,10 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import org.hswebframework.web.Sqls;
+import org.hswebframework.web.authorization.Authentication;
 import org.hswebframework.web.authorization.Permission;
 import org.hswebframework.web.authorization.annotation.Authorize;
+import org.hswebframework.web.authorization.exception.AccessDenyException;
 import org.hswebframework.web.controller.message.ResponseMessage;
 import org.hswebframework.web.database.manager.DatabaseManagerService;
 import org.hswebframework.web.database.manager.SqlExecuteRequest;
@@ -55,9 +57,9 @@ public class DataBaseManagerController {
     public ResponseMessage<List<SqlExecuteResult>> execute(
             @PathVariable @ApiParam("数据源ID") String datasourceId,
             @RequestBody @ApiParam("SQL脚本") String sqlLines) throws Exception {
-
+        DataSourceHolder.switcher().use(datasourceId);
         return ResponseMessage.ok(databaseManagerService.execute(SqlExecuteRequest.builder()
-                .sql(parseSql(sqlLines,datasourceId))
+                .sql(parseSql(sqlLines, datasourceId))
                 .build()));
 
     }
@@ -69,7 +71,7 @@ public class DataBaseManagerController {
                                                            @ApiParam("SQL脚本") String sqlLines) throws Exception {
         return ResponseMessage.ok(databaseManagerService
                 .execute(SqlExecuteRequest.builder()
-                        .sql(parseSql(sqlLines,null))
+                        .sql(parseSql(sqlLines, null))
                         .build()));
     }
 
@@ -79,7 +81,7 @@ public class DataBaseManagerController {
     public ResponseMessage<List<SqlExecuteResult>> executeTransactional(@PathVariable @ApiParam("事务ID") String transactionalId,
                                                                         @ApiParam("SQL脚本") @RequestBody String sqlLines) throws Exception {
         return ResponseMessage.ok(databaseManagerService.execute(transactionalId, SqlExecuteRequest.builder()
-                .sql(parseSql(sqlLines,null))
+                .sql(parseSql(sqlLines, null))
                 .build()));
     }
 
@@ -89,8 +91,9 @@ public class DataBaseManagerController {
     public ResponseMessage<List<SqlExecuteResult>> executeTransactional(@PathVariable @ApiParam("事务ID") String transactionalId,
                                                                         @PathVariable @ApiParam("数据源ID") String dataSourceId,
                                                                         @ApiParam("SQL脚本") @RequestBody String sqlLines) throws Exception {
+        DataSourceHolder.switcher().use(dataSourceId);
         return ResponseMessage.ok(databaseManagerService.execute(transactionalId, SqlExecuteRequest.builder()
-                .sql(parseSql(sqlLines,dataSourceId))
+                .sql(parseSql(sqlLines, dataSourceId))
                 .build()));
     }
 
@@ -101,6 +104,14 @@ public class DataBaseManagerController {
         return ResponseMessage.ok(databaseManagerService.newTransaction());
     }
 
+    @GetMapping("/transactional/new/{dataSourceId}")
+    @Authorize(action = "execute", description = "执行SQL")
+    @ApiOperation("指定数据源新建事务")
+    public ResponseMessage<String> newTransaction(@PathVariable String dataSourceId) throws Exception {
+        DataSourceHolder.switcher().use(dataSourceId);
+        return ResponseMessage.ok(databaseManagerService.newTransaction(dataSourceId));
+    }
+
 
     @GetMapping("/transactional")
     @Authorize(action = "execute", description = "执行SQL")
@@ -125,13 +136,22 @@ public class DataBaseManagerController {
         return ResponseMessage.ok();
     }
 
-    private List<SqlInfo> parseSql(String sqlText,String datasourceId) {
+
+    private List<SqlInfo> parseSql(String sqlText, String datasourceId) {
+      //  Authentication authentication = Authentication.current().orElse(null);
+
         List<String> sqlList = Sqls.parse(sqlText);
         return sqlList.stream().map(sql -> {
             SqlInfo sqlInfo = new SqlInfo();
             sqlInfo.setSql(sql);
             sqlInfo.setDatasourceId(datasourceId);
             sqlInfo.setType(sql.split("[ ]")[0].toLowerCase());
+//            if (authentication != null) {
+//                if (!authentication.hasPermission("database-manager", sqlInfo.getType())) {
+//
+//                   // throw new AccessDenyException("权限不足");
+//                }
+//            }
             return sqlInfo;
         }).collect(Collectors.toList());
     }