zhouhao 7 سال پیش
والد
کامیت
f1438a81f7

+ 2 - 1
README.md

@@ -1,7 +1,8 @@
 ## hsweb  3.0
 [![Maven metadata URI](https://img.shields.io/maven-metadata/v/http/nexus.hsweb.me/content/groups/public/org/hswebframework/web/hsweb-framework/maven-metadata.xml.svg)](http://nexus.hsweb.me/#nexus-search;quick~hsweb-framework)
 [![Codecov](https://codecov.io/gh/hs-web/hsweb-framework/branch/master/graph/badge.svg)](https://codecov.io/gh/hs-web/hsweb-framework/branch/master)
-[![sonar](https://sonarcloud.io/api/badges/measure?key=org.hswebframework.web:hsweb-framework&metric=bugs)](https://sonarcloud.io/dashboard?id=org.hswebframework.web%3Ahsweb-framework)
+[![Sonar Coverage](https://sonarcloud.io/api/badges/measure?key=org.hswebframework.web:hsweb-framework&metric=coverage)](https://sonarcloud.io/dashboard?id=org.hswebframework.web%3Ahsweb-framework)
+[![Sonar Bugs](https://sonarcloud.io/api/badges/measure?key=org.hswebframework.web:hsweb-framework&metric=bugs)](https://sonarcloud.io/dashboard?id=org.hswebframework.web%3Ahsweb-framework)
 [![Build Status](https://travis-ci.org/hs-web/hsweb-framework.svg?branch=master)](https://travis-ci.org/hs-web/hsweb-framework)
 [![License](https://img.shields.io/badge/license-Apache%202-4EB1BA.svg?style=flat-square)](https://www.apache.org/licenses/LICENSE-2.0.html)
 [![Insight.io](https://www.insight.io/repoBadge/github.com/hs-web/hsweb-framework)](https://insight.io/github.com/hs-web/hsweb-framework)

+ 6 - 64
hsweb-system/hsweb-system-datasource/hsweb-system-datasource-entity/src/main/java/org/hswebframework/web/entity/datasource/SimpleDataSourceConfigEntity.java

@@ -1,5 +1,6 @@
 package org.hswebframework.web.entity.datasource;
 
+import lombok.*;
 import org.hswebframework.web.commons.entity.SimpleGenericEntity;
 
 /**
@@ -7,6 +8,11 @@ import org.hswebframework.web.commons.entity.SimpleGenericEntity;
  *
  * @author hsweb-generator-online
  */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
 public class SimpleDataSourceConfigEntity extends SimpleGenericEntity<String> implements DataSourceConfigEntity {
     //数据源名称
     private String         name;
@@ -16,68 +22,4 @@ public class SimpleDataSourceConfigEntity extends SimpleGenericEntity<String> im
     private java.util.Date createDate;
     //备注
     private String         describe;
-
-    /**
-     * @return 数据源名称
-     */
-    @Override
-    public String getName() {
-        return this.name;
-    }
-
-    /**
-     * @param name 数据源名称
-     */
-    @Override
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    /**
-     * @return 是否启用
-     */
-    @Override
-    public Long getEnabled() {
-        return this.enabled;
-    }
-
-    /**
-     * @param enabled 是否启用
-     */
-    @Override
-    public void setEnabled(Long enabled) {
-        this.enabled = enabled;
-    }
-
-    /**
-     * @return 创建日期
-     */
-    @Override
-    public java.util.Date getCreateDate() {
-        return this.createDate;
-    }
-
-    /**
-     * @param createDate 创建日期
-     */
-    @Override
-    public void setCreateDate(java.util.Date createDate) {
-        this.createDate = createDate;
-    }
-
-    /**
-     * @return 备注
-     */
-    @Override
-    public String getDescribe() {
-        return this.describe;
-    }
-
-    /**
-     * @param describe 备注
-     */
-    @Override
-    public void setDescribe(String describe) {
-        this.describe = describe;
-    }
 }

+ 6 - 0
hsweb-system/hsweb-system-datasource/hsweb-system-datasource-service/hsweb-system-datasource-service-simple/pom.xml

@@ -27,5 +27,11 @@
             <artifactId>hsweb-datasource-api</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.hswebframework.web</groupId>
+            <artifactId>hsweb-datasource-jta</artifactId>
+            <version>${project.version}</version>
+            <optional>true</optional>
+        </dependency>
     </dependencies>
 </project>

+ 82 - 0
hsweb-system/hsweb-system-datasource/hsweb-system-datasource-service/hsweb-system-datasource-service-simple/src/main/java/org/hswebframework/web/service/datasource/simple/InServiceJtaDataSourceRepository.java

@@ -0,0 +1,82 @@
+package org.hswebframework.web.service.datasource.simple;
+
+import com.alibaba.fastjson.JSON;
+import org.hswebframework.web.commons.entity.factory.EntityFactory;
+import org.hswebframework.web.datasource.jta.AtomikosDataSourceConfig;
+import org.hswebframework.web.datasource.jta.JtaDataSourceRepository;
+import org.hswebframework.web.entity.datasource.DataSourceConfigEntity;
+import org.hswebframework.web.service.datasource.DataSourceConfigService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.stream.Collectors;
+
+/**
+ * @author zhouhao
+ * @since 1.0
+ */
+public class InServiceJtaDataSourceRepository implements JtaDataSourceRepository {
+    private DataSourceConfigService dataSourceConfigService;
+
+    private EntityFactory entityFactory;
+
+    @Autowired
+    public void setEntityFactory(EntityFactory entityFactory) {
+        this.entityFactory = entityFactory;
+    }
+
+    @Autowired
+    public void setDataSourceConfigService(DataSourceConfigService dataSourceConfigService) {
+        this.dataSourceConfigService = dataSourceConfigService;
+    }
+
+    protected AtomikosDataSourceConfig convert(DataSourceConfigEntity entity) {
+        if (null == entity) {
+            return null;
+        }
+        Map<String, Object> config = entity.getProperties();
+        if (config == null) {
+            return null;
+        }
+        Object xaProperties = config.get("xaProperties");
+        Properties properties = new Properties();
+
+        if (xaProperties instanceof String) {
+            xaProperties = JSON.parseObject(((String) xaProperties));
+        }
+        if (xaProperties instanceof Map) {
+            properties.putAll(((Map) xaProperties));
+        }
+        config.remove("xaProperties");
+        AtomikosDataSourceConfig target = entityFactory.copyProperties(config, new AtomikosDataSourceConfig());
+        target.setId(entity.getId());
+        target.setName(entity.getName());
+        target.setDescribe(entity.getDescribe());
+        target.setXaProperties(properties);
+        return target;
+    }
+
+    @Override
+    public List<AtomikosDataSourceConfig> findAll() {
+        return dataSourceConfigService.select().stream()
+                .map(this::convert)
+                .collect(Collectors.toList());
+    }
+
+    @Override
+    public AtomikosDataSourceConfig findById(String dataSourceId) {
+        return convert(dataSourceConfigService.selectByPk(dataSourceId));
+    }
+
+    @Override
+    public AtomikosDataSourceConfig add(AtomikosDataSourceConfig config) {
+        throw new UnsupportedOperationException("add AtomikosDataSourceConfig not support");
+    }
+
+    @Override
+    public AtomikosDataSourceConfig remove(String dataSourceId) {
+        throw new UnsupportedOperationException("remove datasource not support");
+    }
+}

+ 4 - 1
hsweb-system/hsweb-system-datasource/hsweb-system-datasource-service/hsweb-system-datasource-service-simple/src/main/java/org/hswebframework/web/service/datasource/simple/SimpleDataSourceConfigService.java

@@ -2,10 +2,12 @@ package org.hswebframework.web.service.datasource.simple;
 
 import org.hswebframework.web.dao.datasource.DataSourceConfigDao;
 import org.hswebframework.web.entity.datasource.DataSourceConfigEntity;
+import org.hswebframework.web.service.EnableCacheGenericEntityService;
 import org.hswebframework.web.service.GenericEntityService;
 import org.hswebframework.web.id.IDGenerator;
 import org.hswebframework.web.service.datasource.DataSourceConfigService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.CacheConfig;
 import org.springframework.stereotype.Service;
 
 /**
@@ -14,7 +16,8 @@ import org.springframework.stereotype.Service;
  * @author hsweb-generator-online
  */
 @Service("dataSourceConfigService")
-public class SimpleDataSourceConfigService extends GenericEntityService<DataSourceConfigEntity, String>
+@CacheConfig(cacheNames = "data-source")
+public class SimpleDataSourceConfigService extends EnableCacheGenericEntityService<DataSourceConfigEntity, String>
         implements DataSourceConfigService {
     @Autowired
     private DataSourceConfigDao dataSourceConfigDao;

+ 104 - 0
hsweb-system/hsweb-system-datasource/hsweb-system-datasource-service/hsweb-system-datasource-service-simple/src/test/java/org/hswebframework/web/service/datasource/simple/InServiceJtaDataSourceRepositoryTests.java

@@ -0,0 +1,104 @@
+package org.hswebframework.web.service.datasource.simple;
+
+import org.hswebframework.web.commons.entity.factory.MapperEntityFactory;
+import org.hswebframework.web.datasource.jta.AtomikosDataSourceConfig;
+import org.hswebframework.web.entity.datasource.DataSourceConfigEntity;
+import org.hswebframework.web.entity.datasource.SimpleDataSourceConfigEntity;
+import org.hswebframework.web.service.datasource.DataSourceConfigService;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.runners.MockitoJUnitRunner;
+
+import java.util.*;
+
+import static org.junit.Assert.*;
+import static org.mockito.Mockito.*;
+
+/**
+ * @author zhouhao
+ * @since 3.0
+ */
+@RunWith(MockitoJUnitRunner.class)
+public class InServiceJtaDataSourceRepositoryTests {
+
+    @InjectMocks
+    InServiceJtaDataSourceRepository repository = new InServiceJtaDataSourceRepository();
+
+    @Mock
+    DataSourceConfigService dataSourceConfigService;
+
+    AtomikosDataSourceConfig config = new AtomikosDataSourceConfig();
+
+    {
+        repository.setEntityFactory(new MapperEntityFactory());
+        config.setMinPoolSize(12);
+        config.setMaxPoolSize(999);
+        config.setId("test-ds");
+        config.setName("测试");
+        config.setDescribe("测试");
+        config.setXaDataSourceClassName("com.alibaba.druid.DruidDataSource");
+        Properties properties = new Properties();
+        properties.setProperty("url", "jdbc:h2:mem:core;DB_CLOSE_ON_EXIT=FALSE");
+        properties.setProperty("username", "sa");
+        properties.setProperty("password", "");
+        config.setXaProperties(properties);
+    }
+
+    @Before
+    public void init() {
+        DataSourceConfigEntity configEntity = SimpleDataSourceConfigEntity
+                .builder()
+                .createDate(new Date())
+                .describe("测试")
+                .enabled(1L)
+                .name("测试")
+                .build();
+        Map<String, Object> properties = new HashMap<>();
+        properties.put("minPoolSize", config.getMinPoolSize() + "");
+        properties.put("maxPoolSize", config.getMaxPoolSize() + "");
+        properties.put("borrowConnectionTimeout", config.getBorrowConnectionTimeout());
+        properties.put("reapTimeout", config.getReapTimeout());
+        properties.put("initTimeout", config.getInitTimeout());
+        properties.put("xaDataSourceClassName", config.getXaDataSourceClassName());
+        properties.put("xaProperties", config.getXaProperties());
+        configEntity.setProperties(properties);
+        configEntity.setId("test-ds");
+        when(dataSourceConfigService.selectByPk("test-ds")).thenReturn(configEntity);
+        when(dataSourceConfigService.select()).thenReturn(new ArrayList<>(Arrays.asList(configEntity)));
+    }
+
+    @Test
+    public void testQuery() {
+        AtomikosDataSourceConfig dataSourceConfig = repository.findById("test-ds");
+        assertNotNull(dataSourceConfig);
+        assertEquals(dataSourceConfig.hashCode(), config.hashCode());
+    }
+
+    @Test
+    public void testQuery2() {
+        AtomikosDataSourceConfig dataSourceConfig = repository.findAll().get(0);
+        assertNotNull(dataSourceConfig);
+        assertEquals(dataSourceConfig.hashCode(), config.hashCode());
+    }
+
+    @Test
+    public void testUD() {
+        try {
+            repository.remove("test-ds");
+            assertTrue(false);
+        } catch (UnsupportedOperationException e) {
+
+        }
+        try {
+            repository.add(config);
+            assertTrue(false);
+        } catch (UnsupportedOperationException e) {
+
+        }
+    }
+
+}