diff --git a/observe/docs b/observe/docs
index 5f68973bb..b20668b3a 160000
--- a/observe/docs
+++ b/observe/docs
@@ -1 +1 @@
-Subproject commit 5f68973bb41b525e2e25179966a99d84a2431532
+Subproject commit b20668b3ae195e3c55a38923892abaffd7d5c17e
diff --git a/observe/mirana b/observe/mirana
index 6eda0885a..7f6b5f84f 160000
--- a/observe/mirana
+++ b/observe/mirana
@@ -1 +1 @@
-Subproject commit 6eda0885aa1cc62b6a12ee2771a5ab51327f9424
+Subproject commit 7f6b5f84fb6843fca33dd537ec3100c31cf0a794
diff --git a/pom.xml b/pom.xml
index 40ce62147..c677adb47 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,7 +45,7 @@
1.11.0
2.2.3
- 2.7.1
+ 2.7.2
1.5.1
2.3.3
2.0.47
diff --git a/wings/faceless-flywave/src/test/java/pro/fessional/wings/faceless/sample/TestWingsInitDatabaseSample.java b/wings/faceless-flywave/src/test/java/pro/fessional/wings/faceless/sample/TestWingsInitDatabaseSample.java
index 1c840871f..70bbc0ad4 100644
--- a/wings/faceless-flywave/src/test/java/pro/fessional/wings/faceless/sample/TestWingsInitDatabaseSample.java
+++ b/wings/faceless-flywave/src/test/java/pro/fessional/wings/faceless/sample/TestWingsInitDatabaseSample.java
@@ -8,6 +8,7 @@
import org.springframework.boot.test.context.SpringBootTest;
import pro.fessional.wings.faceless.flywave.SchemaRevisionManager;
import pro.fessional.wings.faceless.flywave.WingsRevision;
+import pro.fessional.wings.testing.faceless.database.TestingDatabaseHelper;
import static pro.fessional.wings.faceless.flywave.WingsRevision.V90_22_0601_01_TestSchema;
import static pro.fessional.wings.faceless.util.FlywaveRevisionScanner.REVISION_PATH_MASTER;
@@ -24,10 +25,14 @@ public class TestWingsInitDatabaseSample {
@Setter(onMethod_ = {@Autowired})
private SchemaRevisionManager schemaRevisionManager;
+
+ @Setter(onMethod_ = {@Autowired})
+ protected TestingDatabaseHelper testingDatabaseHelper;
@Test
@TmsLink("C12024")
public void init060101() {
+ testingDatabaseHelper.cleanTable();
// init
var sqls = scan(REVISION_PATH_MASTER, WingsRevision.V01_19_0521_01_EnumI18n.classpath());
schemaRevisionManager.publishRevision(WingsRevision.V00_19_0512_01_Schema.revision(), 0);
diff --git a/wings/faceless-flywave/src/test/java/pro/fessional/wings/faceless/sample/TestWingsSchemaGeneratorSample.java b/wings/faceless-flywave/src/test/java/pro/fessional/wings/faceless/sample/TestWingsSchemaGeneratorSample.java
index 48eebeb74..2c98c0ac0 100644
--- a/wings/faceless-flywave/src/test/java/pro/fessional/wings/faceless/sample/TestWingsSchemaGeneratorSample.java
+++ b/wings/faceless-flywave/src/test/java/pro/fessional/wings/faceless/sample/TestWingsSchemaGeneratorSample.java
@@ -11,8 +11,6 @@
import pro.fessional.wings.faceless.util.FlywaveRevisionScanner;
import pro.fessional.wings.testing.faceless.database.TestingDatabaseHelper;
-import java.util.SortedMap;
-
import static pro.fessional.wings.faceless.flywave.WingsRevision.V90_22_0601_02_TestRecord;
/**
@@ -32,18 +30,17 @@
public class TestWingsSchemaGeneratorSample {
@Setter(onMethod_ = {@Autowired})
- private TestingDatabaseHelper testingDatabaseHelper;
+ private SchemaRevisionManager schemaRevisionManager;
@Setter(onMethod_ = {@Autowired})
- private SchemaRevisionManager schemaRevisionManager;
+ private TestingDatabaseHelper testingDatabaseHelper;
@Test
@TmsLink("C12026")
public void init060102() {
testingDatabaseHelper.cleanTable();
- final SortedMap sqls = FlywaveRevisionScanner
- .scan(FlywaveRevisionScanner.REVISION_PATH_MASTER,
- WingsRevision.V01_19_0521_01_EnumI18n.classpath());
+ var sqls = FlywaveRevisionScanner.scan(FlywaveRevisionScanner.REVISION_PATH_MASTER,
+ WingsRevision.V01_19_0521_01_EnumI18n.classpath());
schemaRevisionManager.checkAndInitSql(sqls, 0, true);
schemaRevisionManager.publishRevision(V90_22_0601_02_TestRecord.revision(), 0);
}
diff --git a/wings/faceless-jooq/src/test/java/pro/fessional/wings/faceless/database/jooq/WingsJooqDaoAliasImplTest.java b/wings/faceless-jooq/src/test/java/pro/fessional/wings/faceless/database/jooq/WingsJooqDaoAliasImplTest.java
index 0bf9497e0..e44b65dc2 100644
--- a/wings/faceless-jooq/src/test/java/pro/fessional/wings/faceless/database/jooq/WingsJooqDaoAliasImplTest.java
+++ b/wings/faceless-jooq/src/test/java/pro/fessional/wings/faceless/database/jooq/WingsJooqDaoAliasImplTest.java
@@ -22,7 +22,6 @@
import java.time.LocalDateTime;
import java.util.Arrays;
-import java.util.SortedMap;
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -51,7 +50,7 @@ public class WingsJooqDaoAliasImplTest {
private SchemaRevisionManager schemaRevisionManager;
@Setter(onMethod_ = {@Autowired})
- private TstShardingDao dao;
+ private TstShardingDao tstShardingDao;
private final TstShardingTable tbl = TstShardingTable.TstSharding;
private final LocalDateTime now = LocalDateTime.now();
@@ -60,7 +59,7 @@ public class WingsJooqDaoAliasImplTest {
@TmsLink("C12081")
public void test0DropAndInit() {
testingDatabaseHelper.cleanTable();
- final SortedMap sqls = FlywaveRevisionScanner.scan(REVISION_PATH_MASTER, WingsRevision.V01_19_0521_01_EnumI18n.classpath());
+ var sqls = FlywaveRevisionScanner.scan(REVISION_PATH_MASTER, WingsRevision.V01_19_0521_01_EnumI18n.classpath());
schemaRevisionManager.checkAndInitSql(sqls, 0, true);
schemaRevisionManager.publishRevision(V90_22_0601_02_TestRecord.revision(), -1);
}
@@ -79,9 +78,9 @@ public void test1BatchLoadSeeLog() {
new TstShardingRecord(303L, now, now, now, 9L, "batch load 303", "", ZH_CN)
);
testcaseNotice("batch load, check log, ignore, 301-303, use `from dual where exists` check, then insert");
- dao.batchLoad(rds, true);
+ tstShardingDao.batchLoad(rds, true);
testcaseNotice("batch load, check log, replace, 301-303, use on duplicate key update");
- dao.batchLoad(rds, false);
+ tstShardingDao.batchLoad(rds, false);
}
@Test
@@ -93,7 +92,7 @@ public void test2BatchInsertSeeLog() {
new TstShardingRecord(306L, now, now, now, 9L, "batch load 306", "", ZH_CN)
);
testcaseNotice("batch Insert, check log, 304-306, in 2 batch");
- final var rs = dao.batchInsert(rds, 2);
+ final var rs = tstShardingDao.batchInsert(rds, 2);
assertArrayEquals(new int[]{1, 1, 1}, rs);
}
@@ -106,16 +105,16 @@ public void test3BatchMergeSeeLog() {
new TstShardingRecord(309L, now, now, now, 9L, "batch load 309", "", ZH_CN)
);
testcaseNotice("batch Insert, check log, ignore, 307-309, in 2 batch, insert ignore");
- final var rs1 = dao.batchInsert(rds, 2, true);
+ final var rs1 = tstShardingDao.batchInsert(rds, 2, true);
assertArrayEquals(new int[]{1, 1, 1}, rs1);
testcaseNotice("batch Insert, check log, replace, 307-309, in 2 batch, replace into", "BUG https://github.com/apache/shardingsphere/issues/8226\n");
- final var rs2 = dao.batchInsert(rds, 2, false);
+ final var rs2 = tstShardingDao.batchInsert(rds, 2, false);
assertArrayEquals(new int[]{1, 1, 1}, rs2);
testcaseNotice("batch Merge, check log, on dupkey, 307-309, in 2 batch, duplicate");
testcaseNotice("insert into `tst_sharding` (`id`, .., `other_info`) values (?,..., ?) on duplicate key update `login_info` = ?, `other_info` = ?");
- final var rs3 = dao.batchMerge(tbl, rds, 2, tbl.LoginInfo, tbl.OtherInfo);
+ final var rs3 = tstShardingDao.batchMerge(tbl, rds, 2, tbl.LoginInfo, tbl.OtherInfo);
assertArrayEquals(new int[]{1, 1, 1}, rs3);
}
@@ -128,7 +127,7 @@ public void test4BatchStoreSeeLog() {
new TstShardingRecord(312L, now, now, now, 9L, "batch load 312", "merge", ZH_CN)
);
testcaseNotice("batch Insert, check log, ignore, 307-309, in 2 batch");
- final var rs = dao.batchStore(rds, 2);
+ final var rs = tstShardingDao.batchStore(rds, 2);
assertArrayEquals(new int[]{1, 1, 1}, rs);
}
@@ -141,10 +140,10 @@ public void test5BatchUpdateSeeLog() {
new TstShardingRecord(311L, now, now, now, 9L, "batch load 311", "update", ZH_CN)
);
testcaseNotice("batch Update, check log, 307-309, in 2 batch");
- final var rs1 = dao.batchUpdate(rds, 2);
+ final var rs1 = tstShardingDao.batchUpdate(rds, 2);
assertArrayEquals(new int[]{1, 1, 1}, rs1);
- final var rs2 = dao.batchUpdate(tbl, new Field[]{tbl.Id}, rds, 2, tbl.LoginInfo, tbl.OtherInfo);
+ final var rs2 = tstShardingDao.batchUpdate(tbl, new Field[]{tbl.Id}, rds, 2, tbl.LoginInfo, tbl.OtherInfo);
assertArrayEquals(new int[]{1, 1, 1}, rs2);
}
@@ -153,7 +152,7 @@ public void test5BatchUpdateSeeLog() {
public void test6SingleMergeSeeLog() {
testcaseNotice("insert into `tst_sharding` (`id`, .., `other_info`) values (?,..., ?) on duplicate key update `login_info` = ?, `other_info` = ?");
TstSharding pojo = new TstSharding(312L, now, now, now, 9L, "batch load 312", "update-bymerge", ZH_CN);
- final var rs = dao.mergeInto(tbl, pojo, tbl.LoginInfo, tbl.OtherInfo);
+ final var rs = tstShardingDao.mergeInto(tbl, pojo, tbl.LoginInfo, tbl.OtherInfo);
assertEquals(2, rs);
}
@@ -166,17 +165,17 @@ public void test7BatchMergeSeeLog() {
new TstShardingRecord(311L, now, now, now, 9L, "batch 311-merge", "update-merge", ZH_CN)
);
testcaseNotice("313 insert, 310,311 update");
- final var rs = dao.batchMerge(tbl, new Field[]{tbl.Id}, rds, 2, tbl.LoginInfo, tbl.OtherInfo);
+ final var rs = tstShardingDao.batchMerge(tbl, new Field[]{tbl.Id}, rds, 2, tbl.LoginInfo, tbl.OtherInfo);
assertArrayEquals(new int[]{1, 1, 1}, rs);
}
@Test
@TmsLink("C12089")
public void test8LogicDeleteSeeLog() {
- dao.fetchById(1L);
- dao.fetchOneById(1L);
- dao.count();
- final TstShardingTable tbl = dao.getTable();
- dao.count(tbl, tbl.getOnlyLive());
+ tstShardingDao.fetchById(1L);
+ tstShardingDao.fetchOneById(1L);
+ tstShardingDao.count();
+ final TstShardingTable tbl = tstShardingDao.getTable();
+ tstShardingDao.count(tbl, tbl.getOnlyLive());
}
}
diff --git a/wings/faceless-jooq/src/test/java/pro/fessional/wings/faceless/jooq/JooqDeleteListenerTest.java b/wings/faceless-jooq/src/test/java/pro/fessional/wings/faceless/jooq/JooqDeleteListenerTest.java
index 0c2c0f9a4..924c57a96 100644
--- a/wings/faceless-jooq/src/test/java/pro/fessional/wings/faceless/jooq/JooqDeleteListenerTest.java
+++ b/wings/faceless-jooq/src/test/java/pro/fessional/wings/faceless/jooq/JooqDeleteListenerTest.java
@@ -23,7 +23,6 @@
import java.time.LocalDateTime;
import java.util.Arrays;
-import java.util.SortedMap;
import static pro.fessional.wings.faceless.convention.EmptyValue.DATE_TIME;
import static pro.fessional.wings.faceless.enums.autogen.StandardLanguage.ZH_CN;
@@ -60,7 +59,7 @@ public class JooqDeleteListenerTest {
@TmsLink("C12095")
public void test0CleanTables() {
testingDatabaseHelper.cleanTable();
- final SortedMap sqls = FlywaveRevisionScanner.scan(REVISION_PATH_MASTER);
+ var sqls = FlywaveRevisionScanner.scan(REVISION_PATH_MASTER);
schemaRevisionManager.checkAndInitSql(sqls, 0, true);
schemaRevisionManager.publishRevision(V90_22_0601_02_TestRecord.revision(), -1);
}
diff --git a/wings/faceless-jooq/src/test/java/pro/fessional/wings/faceless/jooq/JooqMapperCompatibleTest.java b/wings/faceless-jooq/src/test/java/pro/fessional/wings/faceless/jooq/JooqMapperCompatibleTest.java
index 02c90e6c2..dd698cabb 100644
--- a/wings/faceless-jooq/src/test/java/pro/fessional/wings/faceless/jooq/JooqMapperCompatibleTest.java
+++ b/wings/faceless-jooq/src/test/java/pro/fessional/wings/faceless/jooq/JooqMapperCompatibleTest.java
@@ -40,13 +40,13 @@ public class JooqMapperCompatibleTest {
private TestingDatabaseHelper testingDatabaseHelper;
@Setter(onMethod_ = {@Autowired})
- private TstShardingDao dao;
+ private TstShardingDao tstShardingDao;
@Test
@TmsLink("C12098")
public void test0Init() {
testingDatabaseHelper.cleanTable();
- final var sqls = FlywaveRevisionScanner.scanMaster();
+ var sqls = FlywaveRevisionScanner.scanMaster();
schemaRevisionManager.checkAndInitSql(sqls, 0, false);
schemaRevisionManager.publishRevision(WingsRevision.V90_22_0601_02_TestRecord.revision(), 0);
}
@@ -54,7 +54,7 @@ public void test0Init() {
@Test
@TmsLink("C12099")
public void test1Exist() {
- final boolean b = dao.notTableExist();
+ final boolean b = tstShardingDao.notTableExist();
Assertions.assertFalse(b);
}
@@ -67,8 +67,8 @@ public static class SameName {
@Test
@TmsLink("C12100")
public void test1Lower() {
- DSLContext ctx = dao.ctx();
- TstShardingTable t = dao.getTable();
+ DSLContext ctx = tstShardingDao.ctx();
+ TstShardingTable t = tstShardingDao.getTable();
Condition c = t.Id.gt(1L).and(t.Id.le(105L));
testcaseNotice("Case-sensitive alias, not supported by jooq, supported by sfm");
@@ -85,8 +85,8 @@ public void test1Lower() {
@Test
@TmsLink("C12101")
public void test1Snake() {
- DSLContext ctx = dao.ctx();
- TstShardingTable t = dao.getTable();
+ DSLContext ctx = tstShardingDao.ctx();
+ TstShardingTable t = tstShardingDao.getTable();
Condition c = t.Id.gt(1L).and(t.Id.le(105L));
testcaseNotice("Underscore alias, supported by both jooq and sfm");
@@ -109,8 +109,8 @@ public void test1Array() {
vo.setId(101L);
vo.setLoginInfo("login-info test");
- final TstShardingRecord rd = dao.newRecord(vo);
- final Field>[] fld = dao.getTable().fields();
+ final TstShardingRecord rd = tstShardingDao.newRecord(vo);
+ final Field>[] fld = tstShardingDao.getTable().fields();
final Object[] arr = rd.intoArray();
Assertions.assertNotNull(rd.getLoginInfo());
@@ -120,16 +120,16 @@ public void test1Array() {
@Test
@TmsLink("C12103")
public void test2Array() {
- TstShardingTable t = dao.getTable();
+ TstShardingTable t = tstShardingDao.getTable();
Condition c = t.Id.eq(105L);
- final TstShardingRecord rd = dao.ctx()
- .selectFrom(t)
- .where(c)
- .fetchOne();
+ final TstShardingRecord rd = tstShardingDao.ctx()
+ .selectFrom(t)
+ .where(c)
+ .fetchOne();
Assertions.assertNotNull(rd);
Assertions.assertNotNull(rd.getLoginInfo());
final Object[] arr = rd.intoArray();
- final Field>[] fld = dao.getTable().fields();
+ final Field>[] fld = tstShardingDao.getTable().fields();
Assertions.assertEquals(fld.length, arr.length, "Sfm bug https://github.com/arnaudroger/SimpleFlatMapper/issues/764");
}
}
diff --git a/wings/faceless-jooq/src/test/java/pro/fessional/wings/faceless/jooq/JooqTableCudListenerTest.java b/wings/faceless-jooq/src/test/java/pro/fessional/wings/faceless/jooq/JooqTableCudListenerTest.java
index c298b45c8..960d1b4c1 100644
--- a/wings/faceless-jooq/src/test/java/pro/fessional/wings/faceless/jooq/JooqTableCudListenerTest.java
+++ b/wings/faceless-jooq/src/test/java/pro/fessional/wings/faceless/jooq/JooqTableCudListenerTest.java
@@ -30,7 +30,6 @@
import java.util.Collections;
import java.util.List;
import java.util.Map;
-import java.util.SortedMap;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.BiConsumer;
@@ -79,7 +78,7 @@ public class JooqTableCudListenerTest {
@TmsLink("C12104")
public void test0Init() {
testingDatabaseHelper.cleanTable();
- final SortedMap sqls = FlywaveRevisionScanner.scan(REVISION_PATH_MASTER);
+ var sqls = FlywaveRevisionScanner.scan(REVISION_PATH_MASTER);
schemaRevisionManager.checkAndInitSql(sqls, 0, true);
schemaRevisionManager.publishRevision(V90_22_0601_02_TestRecord.revision(), -1);
}
diff --git a/wings/faceless-jooq/src/test/java/pro/fessional/wings/faceless/jooq/TransactionalServiceTest.java b/wings/faceless-jooq/src/test/java/pro/fessional/wings/faceless/jooq/TransactionalServiceTest.java
index efaec9119..b90fa68e3 100644
--- a/wings/faceless-jooq/src/test/java/pro/fessional/wings/faceless/jooq/TransactionalServiceTest.java
+++ b/wings/faceless-jooq/src/test/java/pro/fessional/wings/faceless/jooq/TransactionalServiceTest.java
@@ -15,6 +15,7 @@
import pro.fessional.wings.faceless.app.service.TestTransactionalManageService;
import pro.fessional.wings.faceless.flywave.SchemaRevisionManager;
import pro.fessional.wings.faceless.util.FlywaveRevisionScanner;
+import pro.fessional.wings.testing.faceless.database.TestingDatabaseHelper;
import java.util.concurrent.atomic.AtomicLong;
@@ -42,10 +43,14 @@ public class TransactionalServiceTest {
@Setter(onMethod_ = {@Autowired})
protected LightIdBufferedProvider lightIdBufferedProvider;
+ @Setter(onMethod_ = {@Autowired})
+ protected TestingDatabaseHelper testingDatabaseHelper;
+
@Test
@TmsLink("C12108")
public void test0Init() {
- final var sqls = FlywaveRevisionScanner.scanMaster();
+ testingDatabaseHelper.cleanTable();
+ var sqls = FlywaveRevisionScanner.scanMaster();
schemaRevisionManager.checkAndInitSql(sqls, 0, false);
schemaRevisionManager.publishRevision(V90_22_0601_01_TestSchema.revision(), 0);
}
@@ -61,7 +66,7 @@ public void testDeclarativeTx() {
Assertions.fail("should exception in create");
}
catch (Exception e) {
- log.info("insert failure", e);
+ log.info("should insert failure", e);
}
final long ild = id.get();
final long nxt = testTransactionalClauseService.getNextSequence();
@@ -76,7 +81,7 @@ public void testDeclarativeTx() {
Assertions.fail("should exception in update");
}
catch (Exception e) {
- log.info("update failure", e);
+ log.info("should update failure", e);
}
// rollback
@@ -89,7 +94,7 @@ public void testDeclarativeTx() {
Assertions.fail("should exception in delete");
}
catch (Exception e) {
- log.info("delete failure", e);
+ log.info("should delete failure", e);
}
// rollback
@@ -120,7 +125,7 @@ public void testWithoutTx() {
Assertions.fail("should exception in create");
}
catch (Exception e) {
- log.info("insert failure", e);
+ log.info("should insert failure", e);
}
final long ild = id.get();
final long nxt = testTransactionalClauseService.getNextSequence();
@@ -135,7 +140,7 @@ public void testWithoutTx() {
Assertions.fail("should exception in update");
}
catch (Exception e) {
- log.info("update failure", e);
+ log.info("should update failure", e);
}
final Integer uc = testTransactionalClauseService.selectInt(id.get());
@@ -147,7 +152,7 @@ public void testWithoutTx() {
Assertions.fail("should exception in delete");
}
catch (Exception e) {
- log.info("delete failure", e);
+ log.info("should delete failure", e);
}
final Integer dc = testTransactionalClauseService.selectInt(id.get());
@@ -183,7 +188,7 @@ public void testProgrammaticTx(boolean rollback) {
Assertions.fail("should exception in create");
}
catch (Exception e) {
- log.info("insert failure", e);
+ log.info("should insert failure", e);
}
final long ild = id.get();
final long nxt = testTransactionalClauseService.getNextSequence();
@@ -199,7 +204,7 @@ public void testProgrammaticTx(boolean rollback) {
Assertions.fail("should exception in update");
}
catch (Exception e) {
- log.info("update failure", e);
+ log.info("should update failure", e);
}
// rollback
final Integer uc = testTransactionalClauseService.selectInt(id.get());
@@ -211,7 +216,7 @@ public void testProgrammaticTx(boolean rollback) {
Assertions.fail("should exception in delete");
}
catch (Exception e) {
- log.info("delete failure", e);
+ log.info("should delete failure", e);
}
// rollback
final Integer dc = testTransactionalClauseService.selectInt(id.get());
diff --git a/wings/faceless-jooq/src/test/java/pro/fessional/wings/faceless/sample/TestJooqDslAndDaoSample.java b/wings/faceless-jooq/src/test/java/pro/fessional/wings/faceless/sample/TestJooqDslAndDaoSample.java
index 0aaa9c42c..96e469cb2 100644
--- a/wings/faceless-jooq/src/test/java/pro/fessional/wings/faceless/sample/TestJooqDslAndDaoSample.java
+++ b/wings/faceless-jooq/src/test/java/pro/fessional/wings/faceless/sample/TestJooqDslAndDaoSample.java
@@ -25,6 +25,7 @@
import pro.fessional.wings.faceless.service.journal.JournalDiff;
import pro.fessional.wings.faceless.spring.prop.FacelessJooqConfProp;
import pro.fessional.wings.faceless.util.FlywaveRevisionScanner;
+import pro.fessional.wings.testing.faceless.database.TestingDatabaseHelper;
import pro.fessional.wings.testing.silencer.TestingLoggerAssert;
import java.time.LocalDateTime;
@@ -64,7 +65,10 @@ public class TestJooqDslAndDaoSample {
private SchemaRevisionManager schemaRevisionManager;
@Setter(onMethod_ = {@Autowired})
- private TstShardingDao dao;
+ private TestingDatabaseHelper testingDatabaseHelper;
+
+ @Setter(onMethod_ = {@Autowired})
+ private TstShardingDao tstShardingDao;
@Setter(onMethod_ = {@Autowired})
private FacelessJooqConfProp prop;
@@ -72,7 +76,8 @@ public class TestJooqDslAndDaoSample {
@Test
@TmsLink("C12112")
public void test0Init() {
- final var sqls = FlywaveRevisionScanner.scanMaster();
+ testingDatabaseHelper.cleanTable();
+ var sqls = FlywaveRevisionScanner.scanMaster();
schemaRevisionManager.checkAndInitSql(sqls, 0, true);
schemaRevisionManager.publishRevision(V90_22_0601_01_TestSchema.revision(), 0);
}
@@ -91,35 +96,35 @@ public void test1Dao() {
al.start();
testcaseNotice("Use alias");
- final var a = dao.getAlias();
+ final var a = tstShardingDao.getAlias();
final var c = a.Id.gt(1L).and(a.CommitId.lt(200L));
// testcaseNotice("select count(*) from `tst_sharding` as `y8` where (`y8`.`id` = ? and `y8`.`commit_id` = ?)");
- final var i = dao.count(a, c);
+ final var i = tstShardingDao.count(a, c);
// testcaseNotice("select * from `tst_sharding` as `y8` where (`y8`.`id` = ? and `y8`.`commit_id` = ?) limit ?");
- final var ft1 = dao.fetch(a, 0, 2, c, a.Id.desc());
+ final var ft1 = tstShardingDao.fetch(a, 0, 2, c, a.Id.desc());
log.info("============count {}, ft2'size={}", i, ft1.size());
// testcaseNotice("select `id`, `commit_id` from `tst_sharding` where (`id` > ? and `commit_id` < ?) order by `id` desc limit ? offset ?");
- final var ft2 = dao.fetch(0, 2, (t, w) -> w
+ final var ft2 = tstShardingDao.fetch(0, 2, (t, w) -> w
.where(t.Id.gt(1L).and(t.CommitId.lt(200L)))
.query(t.Id, t.CommitId, t.Id.desc()));
log.info("============count {}, ft2'size={}", i, ft2.size());
// table
testcaseNotice("Use table");
- final var t = dao.getTable();
+ final var t = tstShardingDao.getTable();
final var setter = new LinkedHashMap<>();
setter.put(t.CommitId, t.Id.add(1L));
setter.put(t.LoginInfo, "info");
// testcaseNotice("update `tst_sharding` set `commit_id` = (`id` + ?), `login_info` = ? where `id` = ?");
- final var u1 = dao.update(t, setter, t.Id.eq(2L));
+ final var u1 = tstShardingDao.update(t, setter, t.Id.eq(2L));
log.info("============update {}", u1);
final var po = new TstSharding();
po.setCommitId(2L);
po.setLoginInfo("info");
// testcaseNotice("update `tst_sharding` set `commit_id` = ?, `login_info` = ? where `id` = ?");
- final var u2 = dao.update(t, po, t.Id.eq(2L));
+ final var u2 = tstShardingDao.update(t, po, t.Id.eq(2L));
log.info("============update {}", u2);
al.stop();
@@ -136,7 +141,7 @@ public void test2Dsl() {
// final var nullOrder: OrderField? = null
final var emptyOrder = new OrderField[]{};
final var t = TstShardingTable.TstSharding;
- DSLContext dsl = dao.ctx();
+ DSLContext dsl = tstShardingDao.ctx();
final var sql = dsl.select(t.Id, nullField) // null safe
.from(t)
.where(nullCond) // null safe
@@ -217,9 +222,9 @@ public void test3Journal() {
@TmsLink("C12116")
public void test4DeleteDt() {
testcaseNotice("Logic delete");
- final var c1 = dao.count();
+ final var c1 = tstShardingDao.count();
log.info("count1={}", c1);
- final var c2 = dao.count(TstShardingTable::getOnlyDied);
+ final var c2 = tstShardingDao.count(TstShardingTable::getOnlyDied);
log.info("count2={}", c2);
}
@@ -227,8 +232,8 @@ public void test4DeleteDt() {
@TmsLink("C12117")
public void test4Shadow() {
testcaseNotice("Shadow table");
- TstShardingTable upd = dao.newTable("", "_postfix");
- final var c1 = dao.count(upd, null);
+ TstShardingTable upd = tstShardingDao.newTable("", "_postfix");
+ final var c1 = tstShardingDao.count(upd, null);
log.info("count1={}", c1);
}
@@ -238,7 +243,7 @@ public void test5DiffDao() {
testcaseNotice("Diff Dao");
TstSharding po = new TstSharding();
final long id = 20221024L;
- final TstShardingTable t = dao.getTable();
+ final TstShardingTable t = tstShardingDao.getTable();
final LocalDateTime now = LocalDateTime.of(2022, 10, 24, 12, 34, 56);
po.setId(id);
@@ -250,7 +255,7 @@ public void test5DiffDao() {
po.setOtherInfo("other by diff insert");
po.setLanguage(ZH_CN);
- final JournalDiff d0 = dao.diffInsert(po);
+ final JournalDiff d0 = tstShardingDao.diffInsert(po);
log.warn("diffInsert0={}", d0);
Assertions.assertNotNull(d0);
Assertions.assertEquals(1, d0.getCount());
@@ -261,7 +266,7 @@ public void test5DiffDao() {
Assertions.assertEquals(Arrays.asList(id, now, DATE_TIME, DATE_TIME, id, "login by diff insert", "other by diff insert", ZH_CN), d0.getValue2());
po.setId(id + 1);
- final JournalDiff d1 = dao.diffInsert(po);
+ final JournalDiff d1 = tstShardingDao.diffInsert(po);
log.warn("diffInsert1={}", d1);
Assertions.assertNotNull(d1);
Assertions.assertEquals(Arrays.asList(id + 1, now, DATE_TIME, DATE_TIME, id, "login by diff insert", "other by diff insert", ZH_CN), d1.getValue2());
@@ -270,7 +275,7 @@ public void test5DiffDao() {
setter.put(t.CommitId, t.CommitId.add(1));
setter.put(t.LoginInfo, "login by diff update");
- final JournalDiff d2 = dao.diffUpdate(t, setter, t.Id.ge(id));
+ final JournalDiff d2 = tstShardingDao.diffUpdate(t, setter, t.Id.ge(id));
log.warn("diffUpdate2={}", d2);
Assertions.assertNotNull(d2);
Assertions.assertEquals(2, d2.getCount());
@@ -280,7 +285,7 @@ public void test5DiffDao() {
Assertions.assertEquals(Arrays.asList(id + 1, "login by diff update", id + 1, "login by diff update"), d2.getValue2());
- final JournalDiff d3 = dao.diffDelete(t, t.Id.ge(id));
+ final JournalDiff d3 = tstShardingDao.diffDelete(t, t.Id.ge(id));
log.warn("diffDelete3={}", d3);
JournalDiffHelper.tidy(d3, t.Language); // withDefault
Assertions.assertNotNull(d3);
@@ -300,8 +305,8 @@ public void test5DiffDsl() {
testcaseNotice("Diff Dsl");
TstSharding po = new TstSharding();
final long id = 20221024L;
- final TstShardingTable t = dao.getTable();
- final DSLContext dsl = dao.ctx();
+ final TstShardingTable t = tstShardingDao.getTable();
+ final DSLContext dsl = tstShardingDao.ctx();
final LocalDateTime now = LocalDateTime.of(2022, 10, 24, 12, 34, 56);
po.setId(id);
@@ -314,7 +319,7 @@ public void test5DiffDsl() {
po.setLanguage(ZH_CN);
final SelectConditionStep query = dsl.selectFrom(t).where(t.Id.eq(id));
- final JournalDiff d0 = JournalDiffHelper.diffInsert(t, query, () -> dao.insert(po));
+ final JournalDiff d0 = JournalDiffHelper.diffInsert(t, query, () -> tstShardingDao.insert(po));
log.warn("diffInsert0={}", d0);
Assertions.assertNotNull(d0);
Assertions.assertEquals(1, d0.getCount());
diff --git a/wings/faceless-jooq/src/test/java/pro/fessional/wings/faceless/sample/TestJooqMostSelectSample.java b/wings/faceless-jooq/src/test/java/pro/fessional/wings/faceless/sample/TestJooqMostSelectSample.java
index 797944561..2c4057959 100644
--- a/wings/faceless-jooq/src/test/java/pro/fessional/wings/faceless/sample/TestJooqMostSelectSample.java
+++ b/wings/faceless-jooq/src/test/java/pro/fessional/wings/faceless/sample/TestJooqMostSelectSample.java
@@ -47,6 +47,7 @@
import pro.fessional.wings.faceless.enums.autogen.StandardLanguage;
import pro.fessional.wings.faceless.flywave.SchemaRevisionManager;
import pro.fessional.wings.faceless.util.FlywaveRevisionScanner;
+import pro.fessional.wings.testing.faceless.database.TestingDatabaseHelper;
import java.time.LocalDateTime;
import java.util.ArrayList;
@@ -82,12 +83,16 @@ public class TestJooqMostSelectSample {
private SchemaRevisionManager schemaRevisionManager;
@Setter(onMethod_ = {@Autowired})
- private TstShardingDao dao;
+ private TestingDatabaseHelper testingDatabaseHelper;
+
+ @Setter(onMethod_ = {@Autowired})
+ private TstShardingDao tstShardingDao;
@Test
@TmsLink("C12120")
public void test0Init() {
- final var sqls = FlywaveRevisionScanner.scanMaster();
+ testingDatabaseHelper.cleanTable();
+ var sqls = FlywaveRevisionScanner.scanMaster();
schemaRevisionManager.checkAndInitSql(sqls, 0, false);
schemaRevisionManager.publishRevision(V90_22_0601_02_TestRecord.revision(), 0);
}
@@ -95,8 +100,8 @@ public void test0Init() {
@Test
@TmsLink("C12121")
public void test1SelectOnDemand() {
- DSLContext ctx = dao.ctx();
- TstShardingTable t = dao.getTable();
+ DSLContext ctx = tstShardingDao.ctx();
+ TstShardingTable t = tstShardingDao.getTable();
Condition c = t.Id.gt(1L).and(t.Id.le(105L));
testcaseNotice("1 field to List");
@@ -124,7 +129,7 @@ public void test1SelectOnDemand() {
Map> grps = ctx.selectFrom(t)
.where(c)
.fetch()
- .intoGroups(t.Id, dao.mapper());
+ .intoGroups(t.Id, tstShardingDao.mapper());
testcaseNotice("2 fields to 2D array");
Object[][] arrs = ctx.select(t.Id, t.LoginInfo)
@@ -174,8 +179,8 @@ static void into(@Nullable Record2 source, @NotNull DiffName targe
@Test
@TmsLink("C12122")
public void test2InsertPojo() {
- DSLContext ctx = dao.ctx();
- TstShardingTable t = dao.getTable();
+ DSLContext ctx = tstShardingDao.ctx();
+ TstShardingTable t = tstShardingDao.getTable();
Condition c = t.Id.gt(1L).and(t.Id.le(105L));
testcaseNotice("Multiple fields (subsets of the same name) to List *Recommended*");
@@ -237,8 +242,8 @@ public void test3MixingSql() {
);
//////////////////////// execution ////////////////////////
- DSLContext ctx = dao.ctx();
- TstShardingTable t = dao.getTable();
+ DSLContext ctx = tstShardingDao.ctx();
+ TstShardingTable t = tstShardingDao.getTable();
testcaseNotice("from `tst_sharding` where (id >= ? AND id <= ?)"
, "from `tst_sharding` where (id >= 1 AND id <= 105)");
@@ -272,7 +277,7 @@ public void test3MixingSql() {
@Test
@TmsLink("C12124")
public void test3BindSql() {
- DSLContext ctx = dao.ctx();
+ DSLContext ctx = tstShardingDao.ctx();
testcaseNotice("Binding by map or jackson pojo to map");
Map bd1 = new HashMap<>();
@@ -309,7 +314,7 @@ public void test3BindSql() {
// Convert by record, Must have fields with the same name
testcaseNotice("Binding by pojo, Convert by record, Must have fields with the same name");
- TstShardingRecord rc = dao.newRecord(bd3);
+ TstShardingRecord rc = tstShardingDao.newRecord(bd3);
rc.from(bd3);
List bv3 = ctx.fetch("""
SELECT id, login_info
@@ -325,7 +330,7 @@ public void test3BindSql() {
@TmsLink("C12125")
public void test3DynamicSql() {
// condition and `cond*`
- TstShardingTable t = dao.getTable();
+ TstShardingTable t = tstShardingDao.getTable();
// by builder, null friendly
Condition d1 = WingsJooqUtil.condition("1=1");
@@ -355,31 +360,31 @@ public void test3DynamicSql() {
SameName bd1 = new SameName();
bd1.setId(105L);
bd1.setLoginInfo("LOGIN_INFO-05");
- TstShardingRecord rc1 = dao.newRecord(bd1);
+ TstShardingRecord rc1 = tstShardingDao.newRecord(bd1);
// where (`id` = ? and `login_info` = ?)
// (`id` = 105 and `login_info` = 'LOGIN_INFO-05')
testcaseNotice("by Record and condChain `AND`");
Condition cd1 = WingsJooqUtil.condChain(AND, rc1);
- List rs1 = dao.fetch(dao.getTable(), cd1);
+ List rs1 = tstShardingDao.fetch(tstShardingDao.getTable(), cd1);
//
SameName bd2 = new SameName();
bd2.setId(105L);
bd2.setLoginInfo("LOGIN_INFO-06");
- TstShardingRecord rc2 = dao.newRecord(bd2);
+ TstShardingRecord rc2 = tstShardingDao.newRecord(bd2);
// where (`id` = ? or `login_info` = ?)
// where (`id` = 105 or `login_info` = 'LOGIN_INFO-06')
testcaseNotice("by Record and condChain `OR`");
Condition cd2 = WingsJooqUtil.condChain(OR, rc2);
- List rs2 = dao.fetch(dao.getTable(), cd2);
+ List rs2 = tstShardingDao.fetch(tstShardingDao.getTable(), cd2);
// only id
// where `id` = ?
// where `id` = 105
testcaseNotice("by Record and condChain single field");
List cds = WingsJooqUtil.condField(rc2, t.Id);
- List rs3 = dao.fetch(t, DSL.condition(OR, cds));
+ List rs3 = tstShardingDao.fetch(t, DSL.condition(OR, cds));
//
testcaseNotice("by string-value map");
@@ -390,13 +395,13 @@ public void test3DynamicSql() {
// from `tst_sharding` where (id = ? and login_info = ?)
Condition cd4 = WingsJooqUtil.condChain(map);
- List rc4 = dao.fetch(t, cd4);
+ List rc4 = tstShardingDao.fetch(t, cd4);
// from `tst_sharding` as `y8` where (`y8`.`login_info` = ? and `y8`.`id` = ?)
testcaseNotice("by string-value map, and alias");
- TstShardingTable a = dao.getAlias();
+ TstShardingTable a = tstShardingDao.getAlias();
Condition cd5 = WingsJooqUtil.condChain(map, true, a);
- List rc5 = dao.fetch(a, cd5);
+ List rc5 = tstShardingDao.fetch(a, cd5);
// use dao.update() to update
@@ -437,10 +442,10 @@ public void test4JdbcTemplate() {
@Test
@TmsLink("C12127")
public void test5PaginateJooq() {
- DSLContext dsl = dao.ctx();
- TstShardingTable t = dao.getTable();
- TstShardingTable t1 = dao.getAlias();
- TstShardingTable t2 = dao.getAlias("t2");
+ DSLContext dsl = tstShardingDao.ctx();
+ TstShardingTable t = tstShardingDao.getTable();
+ TstShardingTable t1 = tstShardingDao.getAlias();
+ TstShardingTable t2 = tstShardingDao.getAlias("t2");
//
testcaseNotice("use helperJooq, normal",
@@ -449,7 +454,7 @@ public void test5PaginateJooq() {
PageQuery page = new PageQuery().setSize(5).setPage(1).setSort("d");
Map> order = new HashMap<>();
order.put("d", t1.Id);
- PageResult pr1 = PageJooqHelper.use(dao, page)
+ PageResult pr1 = PageJooqHelper.use(tstShardingDao, page)
.count()
.from(t1)
.where(t1.Id.ge(1L))
@@ -457,7 +462,7 @@ public void test5PaginateJooq() {
.fetch(t1.Id, t1.CommitId)
.into(TstSharding.class);
- PageResult pr2 = PageJooqHelper.use(dao.ctx(), page)
+ PageResult pr2 = PageJooqHelper.use(tstShardingDao.ctx(), page)
.count()
.from(t1)
.where(t1.Id.ge(1L))
@@ -473,7 +478,7 @@ public void test5PaginateJooq() {
testcaseNotice("use helperJooq, simple",
"cached total to ignore `select count` in db",
"select * from `tst_sharding` limit ?");
- PageResult pr3 = PageJooqHelper.use(dao, page, 10)
+ PageResult pr3 = PageJooqHelper.use(tstShardingDao, page, 10)
.count()
.from(t)
.whereTrue()
@@ -484,14 +489,14 @@ public void test5PaginateJooq() {
testcaseNotice("use helperJooq wrap",
"select count(*) as `c` from (select `t1`.* from `tst_sharding` as `t1` where `t1`.`id` >= ?) as `q`",
"select `t1`.* from `tst_sharding` as `t1` where `t1`.`id` >= ? order by `id` asc limit ?");
- final var qry4 = dsl.select(t1.asterisk()).from(t1).where(t1.Id.ge(1L));
- PageResult pr4 = PageJooqHelper.use(dao, page)
+ final var qry4 = dsl.select(t1.asterisk()).from(t1).where(t1.Id.ge(1L));
+ PageResult pr4 = PageJooqHelper.use(tstShardingDao, page)
.wrap(qry4, order)
.fetch()
.into(TstSharding.class);
- final var qry5 = dsl.select(t1.Id, t1.CommitId).from(t1).where(t1.Id.ge(1L));
- PageResult pr5 = PageJooqHelper.use(dao, page)
+ final var qry5 = dsl.select(t1.Id, t1.CommitId).from(t1).where(t1.Id.ge(1L));
+ PageResult pr5 = PageJooqHelper.use(tstShardingDao, page)
.wrap(qry5, order)
.fetch()
.into(it -> {
@@ -593,22 +598,22 @@ public static class EnumDto {
@Test
@TmsLink("C12129")
public void test6MapperEnum() {
- final TstShardingTable t = dao.getTable();
+ final TstShardingTable t = tstShardingDao.getTable();
DataType lang = SQLDataType.INTEGER.asConvertedDataType(JooqConsEnumConverter.of(StandardLanguage.class));
final Field langField = DSL.field(t.Language.getName(), lang);
- final List sn = dao.ctx()
- .select(t.Id, langField)
- .from(t)
- .fetch()
- .into(EnumDto.class);
+ final List sn = tstShardingDao.ctx()
+ .select(t.Id, langField)
+ .from(t)
+ .fetch()
+ .into(EnumDto.class);
log.info("sn={}", sn);
// Global injected
- final List sn2 = dao.ctx()
- .select(t.Id, t.Language)
- .from(t)
- .fetch()
- .into(EnumDto.class);
+ final List sn2 = tstShardingDao.ctx()
+ .select(t.Id, t.Language)
+ .from(t)
+ .fetch()
+ .into(EnumDto.class);
log.info("sn2={}", sn2);
}
@@ -618,8 +623,8 @@ public void test7Function() {
testcaseNotice("by DSL, get function of dialect",
"select `id` from `tst_sharding` where (`modify_dt` > date_add(?, interval ? day) and substring(`other_info`, ?, ?) like ?)");
- final TstShardingTable t = dao.getTable();
- final String sql1 = dao
+ final TstShardingTable t = tstShardingDao.getTable();
+ final String sql1 = tstShardingDao
.ctx()
.select(t.Id)
.from(t)
@@ -635,7 +640,7 @@ public void test7Function() {
rw2.add(DSL.row(1L, "1"));
rw2.add(DSL.row(2L, "2"));
- final String sql2 = dao
+ final String sql2 = tstShardingDao
.ctx()
.select(t.Id)
.from(t)
diff --git a/wings/faceless-shard/src/test/java/pro/fessional/wings/faceless/flywave/FlywaveShardingTest.java b/wings/faceless-shard/src/test/java/pro/fessional/wings/faceless/flywave/FlywaveShardingTest.java
index 603adc08e..332db3e18 100644
--- a/wings/faceless-shard/src/test/java/pro/fessional/wings/faceless/flywave/FlywaveShardingTest.java
+++ b/wings/faceless-shard/src/test/java/pro/fessional/wings/faceless/flywave/FlywaveShardingTest.java
@@ -14,8 +14,6 @@
import pro.fessional.wings.testing.database.TestingDataSource;
import pro.fessional.wings.testing.faceless.database.TestingDatabaseHelper;
-import java.util.SortedMap;
-
import static org.junit.jupiter.api.Assertions.assertEquals;
import static pro.fessional.wings.faceless.flywave.WingsRevision.V90_22_0601_01_TestSchema;
import static pro.fessional.wings.faceless.flywave.WingsRevision.V90_22_0601_02_TestRecord;
@@ -45,7 +43,7 @@ public class FlywaveShardingTest {
@TmsLink("C12131")
public void test0CleanTables() {
testingDatabaseHelper.cleanTable();
- final SortedMap sqls = FlywaveRevisionScanner.scanMaster();
+ var sqls = FlywaveRevisionScanner.scanMaster();
schemaRevisionManager.checkAndInitSql(sqls, 0, true);
}
diff --git a/wings/faceless-shard/src/test/java/pro/fessional/wings/faceless/jooq/JooqShardingTest.java b/wings/faceless-shard/src/test/java/pro/fessional/wings/faceless/jooq/JooqShardingTest.java
index b0a93635b..48fbad669 100644
--- a/wings/faceless-shard/src/test/java/pro/fessional/wings/faceless/jooq/JooqShardingTest.java
+++ b/wings/faceless-shard/src/test/java/pro/fessional/wings/faceless/jooq/JooqShardingTest.java
@@ -25,7 +25,6 @@
import java.time.LocalDateTime;
import java.util.Arrays;
-import java.util.SortedMap;
import static pro.fessional.wings.faceless.enums.autogen.StandardLanguage.ZH_CN;
import static pro.fessional.wings.faceless.flywave.WingsRevision.V90_22_0601_01_TestSchema;
@@ -60,7 +59,7 @@ public class JooqShardingTest {
@TmsLink("C12135")
public void test0CleanTables() {
testingDatabaseHelper.cleanTable();
- final SortedMap sqls = FlywaveRevisionScanner.scanMaster();
+ var sqls = FlywaveRevisionScanner.scanMaster();
schemaRevisionManager.checkAndInitSql(sqls, 0, true);
}
diff --git a/wings/slardar-hazel-caching/pom.xml b/wings/slardar-hazel-caching/pom.xml
index 43947125b..24e9e3f00 100644
--- a/wings/slardar-hazel-caching/pom.xml
+++ b/wings/slardar-hazel-caching/pom.xml
@@ -32,10 +32,5 @@
com.hazelcast
hazelcast-spring
-
-
- org.springframework.session
- spring-session-hazelcast
-
diff --git a/wings/slardar-hazel-caching/src/main/java/pro/fessional/wings/slardar/spring/bean/HazelcastConfigConfiguration.java b/wings/slardar-hazel-caching/src/main/java/pro/fessional/wings/slardar/spring/bean/HazelcastConfigConfiguration.java
index a4c04b28d..733fcfe4e 100644
--- a/wings/slardar-hazel-caching/src/main/java/pro/fessional/wings/slardar/spring/bean/HazelcastConfigConfiguration.java
+++ b/wings/slardar-hazel-caching/src/main/java/pro/fessional/wings/slardar/spring/bean/HazelcastConfigConfiguration.java
@@ -1,5 +1,7 @@
package pro.fessional.wings.slardar.spring.bean;
+import com.hazelcast.config.GlobalSerializerConfig;
+import com.hazelcast.config.SerializationConfig;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.boot.autoconfigure.hazelcast.HazelcastConfigCustomizer;
@@ -7,6 +9,7 @@
import org.springframework.context.annotation.Configuration;
import pro.fessional.wings.silencer.spring.boot.ConditionalWingsEnabled;
import pro.fessional.wings.slardar.cache.hazelcast.WingsHazelcastCacheCustomizer;
+import pro.fessional.wings.slardar.serialize.KryoHazelcast;
import pro.fessional.wings.slardar.spring.prop.SlardarCacheProp;
import pro.fessional.wings.slardar.spring.prop.SlardarEnabledProp;
@@ -39,4 +42,23 @@ public HazelcastConfigCustomizer wingsHazelcastCacheCustomizer(SlardarCacheProp
log.info("SlardarHazelCaching spring-bean wingsHazelcastCacheCustomizer");
return new WingsHazelcastCacheCustomizer(conf);
}
+
+ @Bean
+ @ConditionalWingsEnabled
+ public HazelcastConfigCustomizer wingsHazelcastGlobalSerializer() {
+ log.info("SlardarHazelCaching spring-bean wingsHazelcastGlobalSerializer");
+ return config -> {
+ SerializationConfig serialization = config.getSerializationConfig();
+ GlobalSerializerConfig gs = serialization.getGlobalSerializerConfig();
+ if (gs == null) {
+ GlobalSerializerConfig ngs = new GlobalSerializerConfig();
+ ngs.setClassName(KryoHazelcast.class.getName());
+ serialization.setGlobalSerializerConfig(ngs);
+ log.info("Wings hazelcast setGlobalSerializerConfig class=KryoHazelcast");
+ }
+ else {
+ log.info("Wings hazelcast setGlobalSerializerConfig skipped, current=" + gs);
+ }
+ };
+ }
}
diff --git a/wings/slardar-hazel-caching/src/main/resources/extra-conf/hazelcast-client.xml b/wings/slardar-hazel-caching/src/main/resources/extra-conf/hazelcast-client.xml
index e8add326d..6108a7c0f 100644
--- a/wings/slardar-hazel-caching/src/main/resources/extra-conf/hazelcast-client.xml
+++ b/wings/slardar-hazel-caching/src/main/resources/extra-conf/hazelcast-client.xml
@@ -39,15 +39,6 @@
true
INVALIDATE
-
-
-
- pro.fessional.wings.slardar.serialize.KryoHazelcast
-
-
-
-
diff --git a/wings/slardar-hazel-caching/src/main/resources/extra-conf/hazelcast-server.xml b/wings/slardar-hazel-caching/src/main/resources/extra-conf/hazelcast-server.xml
index c0ebe40f7..5d940c8bf 100644
--- a/wings/slardar-hazel-caching/src/main/resources/extra-conf/hazelcast-server.xml
+++ b/wings/slardar-hazel-caching/src/main/resources/extra-conf/hazelcast-server.xml
@@ -52,16 +52,6 @@
-
-
-
- pro.fessional.wings.slardar.serialize.KryoHazelcast
-
-
-
-
-
ETERNAL
diff --git a/wings/slardar-hazel-session/pom.xml b/wings/slardar-hazel-session/pom.xml
index a2dcff66a..01c232072 100644
--- a/wings/slardar-hazel-session/pom.xml
+++ b/wings/slardar-hazel-session/pom.xml
@@ -19,13 +19,19 @@
pro.fessional.wings
- slardar-hazel-caching
+ slardar-webmvc
+
- pro.fessional.wings
- slardar-webmvc
+ org.springframework.session
+ spring-session-hazelcast
+
+ pro.fessional.wings
+ slardar-hazel-caching
+ test
+
org.springframework.boot
spring-boot-starter-security
diff --git a/wings/slardar-hazel-session/src/main/java/pro/fessional/wings/slardar/spring/bean/SlardarHazelSessionConfiguration.java b/wings/slardar-hazel-session/src/main/java/pro/fessional/wings/slardar/spring/bean/SlardarHazelSessionConfiguration.java
index 24b66ed3d..943cc3560 100644
--- a/wings/slardar-hazel-session/src/main/java/pro/fessional/wings/slardar/spring/bean/SlardarHazelSessionConfiguration.java
+++ b/wings/slardar-hazel-session/src/main/java/pro/fessional/wings/slardar/spring/bean/SlardarHazelSessionConfiguration.java
@@ -1,13 +1,18 @@
package pro.fessional.wings.slardar.spring.bean;
+import com.hazelcast.config.SerializationConfig;
+import com.hazelcast.config.SerializerConfig;
import com.hazelcast.core.HazelcastInstance;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.hazelcast.HazelcastConfigCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.session.FindByIndexNameSessionRepository;
+import org.springframework.session.MapSession;
import org.springframework.session.Session;
+import org.springframework.session.hazelcast.HazelcastSessionSerializer;
import org.springframework.session.security.SpringSessionBackedSessionRegistry;
import pro.fessional.wings.silencer.spring.boot.ConditionalWingsEnabled;
import pro.fessional.wings.slardar.session.HazelcastSessionHelper;
@@ -39,4 +44,37 @@ public HazelcastSessionHelper wingsSessionHelper(
log.info("SlardarHazelSession spring-bean wingsSessionHelper");
return new HazelcastSessionHelper(sessionRepository, hazelcastInstance, mapName);
}
+
+ /**
+ * spring FindByIndexNameSessionRepository
+ */
+ @Bean
+ @ConditionalWingsEnabled
+ public HazelcastConfigCustomizer wingsHazelcastSessionSerializer() {
+ log.info("SlardarHazelSession spring-bean wingsHazelcastSessionSerializer");
+ return config -> {
+ String msc = MapSession.class.getName();
+ SerializationConfig serialization = config.getSerializationConfig();
+ for (SerializerConfig ss : serialization.getSerializerConfigs()) {
+ String tcn = ss.getTypeClassName();
+ if (tcn == null) {
+ Class> tc = ss.getTypeClass();
+ if (tc != null) {
+ tcn = tc.getName();
+ }
+ }
+
+ if (msc.equals(tcn)) {
+ log.warn("Wings hazelcast addSerializerConfig skipped, current=" + ss);
+ return;
+ }
+ }
+
+ log.info("Wings hazelcast addSerializerConfig type=MapSession");
+ SerializerConfig sessionSerializer = new SerializerConfig();
+ sessionSerializer.setClass(HazelcastSessionSerializer.class);
+ sessionSerializer.setTypeClass(MapSession.class);
+ serialization.addSerializerConfig(sessionSerializer);
+ };
+ }
}
diff --git a/wings/slardar-sprint/pom.xml b/wings/slardar-sprint/pom.xml
index 0754b86cd..d6cae4b59 100644
--- a/wings/slardar-sprint/pom.xml
+++ b/wings/slardar-sprint/pom.xml
@@ -17,6 +17,10 @@
Integration of WebMvc/hazelcast/security-conf/admin/actuator
+
+ pro.fessional.wings
+ slardar-hazel-caching
+
pro.fessional.wings
slardar-hazel-session
diff --git a/wings/slardar-webmvc/src/main/java/pro/fessional/wings/slardar/concur/impl/DoubleKillExceptionResolver.java b/wings/slardar-webmvc/src/main/java/pro/fessional/wings/slardar/concur/impl/DoubleKillExceptionResolver.java
index a55821a17..1ec8c1577 100644
--- a/wings/slardar-webmvc/src/main/java/pro/fessional/wings/slardar/concur/impl/DoubleKillExceptionResolver.java
+++ b/wings/slardar-webmvc/src/main/java/pro/fessional/wings/slardar/concur/impl/DoubleKillExceptionResolver.java
@@ -1,5 +1,6 @@
package pro.fessional.wings.slardar.concur.impl;
+import org.jetbrains.annotations.NotNull;
import org.springframework.core.annotation.Order;
import pro.fessional.mirana.text.StringTemplate;
import pro.fessional.wings.silencer.spring.WingsOrdered;
@@ -21,7 +22,7 @@ public DoubleKillExceptionResolver(SimpleResponse defaultResponse) {
}
@Override
- protected SimpleResponse resolve(DoubleKillException e) {
+ protected SimpleResponse resolve(@NotNull DoubleKillException e) {
final String body = StringTemplate
.dyn(defaultResponse.getResponseBody())
.bindStr("{key}", e.getProgressKey())
diff --git a/wings/slardar-webmvc/src/main/java/pro/fessional/wings/slardar/webmvc/SimpleExceptionResolver.java b/wings/slardar-webmvc/src/main/java/pro/fessional/wings/slardar/webmvc/SimpleExceptionResolver.java
index bb1e09db9..90a8cc02c 100644
--- a/wings/slardar-webmvc/src/main/java/pro/fessional/wings/slardar/webmvc/SimpleExceptionResolver.java
+++ b/wings/slardar-webmvc/src/main/java/pro/fessional/wings/slardar/webmvc/SimpleExceptionResolver.java
@@ -2,6 +2,7 @@
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
+import org.jetbrains.annotations.NotNull;
/**
* @author trydofor
@@ -14,7 +15,7 @@ public class SimpleExceptionResolver extends WingsException
protected final SimpleResponse defaultResponse;
@Override
- protected SimpleResponse resolve(T ce) {
+ protected SimpleResponse resolve(@NotNull T ce) {
return defaultResponse;
}
}
diff --git a/wings/slardar-webmvc/src/main/java/pro/fessional/wings/slardar/webmvc/WingsExceptionResolver.java b/wings/slardar-webmvc/src/main/java/pro/fessional/wings/slardar/webmvc/WingsExceptionResolver.java
index 4bab19d0d..5a739cd7b 100644
--- a/wings/slardar-webmvc/src/main/java/pro/fessional/wings/slardar/webmvc/WingsExceptionResolver.java
+++ b/wings/slardar-webmvc/src/main/java/pro/fessional/wings/slardar/webmvc/WingsExceptionResolver.java
@@ -2,11 +2,15 @@
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
+import lombok.Getter;
+import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+import org.springframework.core.Ordered;
import org.springframework.http.HttpStatus;
+import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
-import org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver;
import pro.fessional.wings.slardar.servlet.response.view.PlainTextView;
import java.lang.reflect.ParameterizedType;
@@ -17,8 +21,11 @@
* @since 2021-03-25
*/
@Slf4j
-public abstract class WingsExceptionResolver extends AbstractHandlerExceptionResolver {
+@Getter
+@Setter
+public abstract class WingsExceptionResolver implements HandlerExceptionResolver, Ordered {
+ private int order = Ordered.LOWEST_PRECEDENCE;
protected final Class> acceptClass;
protected WingsExceptionResolver() {
@@ -32,14 +39,15 @@ protected WingsExceptionResolver() {
@Override
@SuppressWarnings("unchecked")
- protected ModelAndView doResolveException(
+ public ModelAndView resolveException(
@NotNull HttpServletRequest request,
- @NotNull HttpServletResponse response, Object handler,
+ @NotNull HttpServletResponse response, @Nullable Object handler,
@NotNull Exception ex) {
if (acceptClass.isInstance(ex)) {
final SimpleResponse body = resolve((T) ex);
if (body == null) return null;
+
ModelAndView mav = new ModelAndView();
PlainTextView pv = new PlainTextView(body.getContentType(), body.getResponseBody());
mav.setStatus(HttpStatus.valueOf(body.getHttpStatus()));
@@ -56,5 +64,6 @@ protected ModelAndView doResolveException(
* @param ex current exception
* @return null if not support
*/
- protected abstract SimpleResponse resolve(T ex);
+ @Nullable
+ protected abstract SimpleResponse resolve(@NotNull T ex);
}
diff --git a/wings/slardar/src/main/java/pro/fessional/wings/slardar/httprest/okhttp/OkHttpTokenizeLogin.java b/wings/slardar/src/main/java/pro/fessional/wings/slardar/httprest/okhttp/OkHttpTokenizeLogin.java
index 35be1a3cc..9a49fcc8b 100644
--- a/wings/slardar/src/main/java/pro/fessional/wings/slardar/httprest/okhttp/OkHttpTokenizeLogin.java
+++ b/wings/slardar/src/main/java/pro/fessional/wings/slardar/httprest/okhttp/OkHttpTokenizeLogin.java
@@ -14,6 +14,8 @@
import org.jetbrains.annotations.NotNull;
import pro.fessional.wings.slardar.jackson.JacksonHelper;
+import java.util.function.Consumer;
+
/**
* Traditional Post-Form Login
*
@@ -66,6 +68,7 @@ public class OkHttpTokenizeLogin implements OkHttpTokenClient.Tokenize {
private String headerUserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36";
private transient String token;
+ private transient Consumer initListener;
@Override
public boolean needToken(@NotNull Request request) {
@@ -104,11 +107,20 @@ public boolean initToken(@NotNull Call.Factory callFactory) {
if (cookieAuto) return true;
- final String tkn = parseResponse(res);
- if (tkn != null) {
- token = tkn;
+ final String newTkn = parseResponse(res);
+ if (newTkn != null) {
+ token = newTkn;
+ if (initListener != null) {
+ try {
+ initListener.accept(newTkn);
+ }
+ catch (Exception e) {
+ log.warn("failed to listen login init", e);
+ }
+ }
+ return true;
}
- return tkn != null;
+ return false;
}
@Contract("_->param1")
diff --git a/wings/slardar/src/main/java/pro/fessional/wings/slardar/httprest/okhttp/OkHttpTokenizeOauth.java b/wings/slardar/src/main/java/pro/fessional/wings/slardar/httprest/okhttp/OkHttpTokenizeOauth.java
index 966ceb1ef..ce886f1d7 100644
--- a/wings/slardar/src/main/java/pro/fessional/wings/slardar/httprest/okhttp/OkHttpTokenizeOauth.java
+++ b/wings/slardar/src/main/java/pro/fessional/wings/slardar/httprest/okhttp/OkHttpTokenizeOauth.java
@@ -20,6 +20,8 @@
import pro.fessional.wings.slardar.context.Now;
import pro.fessional.wings.slardar.jackson.JacksonHelper;
+import java.util.function.Consumer;
+
/**
* fedex authorization v1
*
@@ -70,6 +72,7 @@ public class OkHttpTokenizeOauth implements OkHttpTokenClient.Tokenize {
*/
private int expireBuff = 30_000;
private transient Token token;
+ private transient Consumer initListener;
@Override
public boolean needToken(@NotNull Request request) {
@@ -91,19 +94,32 @@ public boolean fillToken(Request.Builder builder) {
@Override
public boolean initToken(@NotNull Call.Factory callFactory) {
- final Token tkn = token;
+ final Token oldTkn = token;
Token newTkn = null;
- if (tkn != null && tkn.refresh != null) {
- newTkn = fetchByRefresh(callFactory, tkn.refresh);
+ if (oldTkn != null && oldTkn.refresh != null) {
+ newTkn = fetchByRefresh(callFactory, oldTkn.refresh);
}
if (newTkn == null) {
newTkn = fetchByGrantType(callFactory);
}
- token = newTkn;
- return newTkn != null;
+ if (newTkn != null) {
+ token = newTkn;
+
+ if (initListener != null) {
+ try {
+ initListener.accept(newTkn);
+ }
+ catch (Exception e) {
+ log.warn("failed to listen oauth init", e);
+ }
+ }
+ return true;
+ }
+
+ return false;
}
@SuppressWarnings("DuplicatedCode")
diff --git a/wings/warlock-shadow/src/main/java/pro/fessional/wings/warlock/errorhandle/DefaultExceptionResolver.java b/wings/warlock-shadow/src/main/java/pro/fessional/wings/warlock/errorhandle/DefaultExceptionResolver.java
index bdf14ed0a..5b86cdf32 100644
--- a/wings/warlock-shadow/src/main/java/pro/fessional/wings/warlock/errorhandle/DefaultExceptionResolver.java
+++ b/wings/warlock-shadow/src/main/java/pro/fessional/wings/warlock/errorhandle/DefaultExceptionResolver.java
@@ -1,8 +1,13 @@
package pro.fessional.wings.warlock.errorhandle;
import com.fasterxml.jackson.databind.ObjectMapper;
+import lombok.Getter;
+import lombok.Setter;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.http.HttpStatus;
import org.springframework.security.access.AccessDeniedException;
@@ -32,11 +37,15 @@
* @since 2021-03-25
*/
@Slf4j
+@Getter
public class DefaultExceptionResolver extends SimpleExceptionResolver {
protected final MessageSource messageSource;
protected final ObjectMapper objectMapper;
+ @Setter(onMethod_ = {@Autowired(required = false)})
+ protected Handler handler = null;
+
public DefaultExceptionResolver(SimpleResponse defaultResponse, MessageSource messageSource, ObjectMapper objectMapper) {
super(defaultResponse);
this.messageSource = messageSource;
@@ -44,36 +53,49 @@ public DefaultExceptionResolver(SimpleResponse defaultResponse, MessageSource me
}
@Override
- protected SimpleResponse resolve(Exception exception) {
+ protected SimpleResponse resolve(@NotNull Exception exception) {
+ SimpleResponse response = null;
try {
- Throwable tmp = exception;
- for (; tmp != null; tmp = tmp.getCause()) {
- if (tmp instanceof HttpStatusException ex) {
- return handle(ex);
+ Throwable cause = exception;
+ for (; response == null && cause != null; cause = cause.getCause()) {
+ if (cause instanceof HttpStatusException ex) {
+ response = handle(ex);
}
- else if (tmp instanceof TerminalContextException ex) {
- return handleUnauthorized(ex);
+ else if (cause instanceof TerminalContextException ex) {
+ response = handleUnauthorized(ex);
}
- else if (tmp instanceof CodeException ex) {
- return handle(ex);
+ else if (cause instanceof CodeException ex) {
+ response = handle(ex);
}
- else if (tmp instanceof DataResult> ex) {
- return handle(ex);
+ else if (cause instanceof DataResult> ex) {
+ response = handle(ex);
}
- else if (tmp instanceof AuthenticationException ex) {
- return handleUnauthorized(ex);
+ else if (cause instanceof AuthenticationException ex) {
+ response = handleUnauthorized(ex);
}
- else if (tmp instanceof AccessDeniedException ex) {
- return handleAccessDenied(ex);
+ else if (cause instanceof AccessDeniedException ex) {
+ response = handleAccessDenied(ex);
}
}
+ // handler
+ if (handler != null) {
+ // use original exception if response is null, otherwise the cause
+ response = handler.handle(response == null ? exception : cause, response);
+ }
}
- catch (Exception e) {
+ catch (Throwable e) {
DummyBlock.ignore(e);
}
- log.error("unhandled exception, response default", exception);
- return defaultResponse;
+ if (response == null) {
+ log.error("unhandled exception, response default", exception);
+ response = defaultResponse;
+ }
+ else {
+ log.debug("handled exception, response simple", exception);
+ }
+
+ return response;
}
@SneakyThrows
@@ -132,4 +154,17 @@ protected String resolveMessage(String code, Object... args) {
Locale locale = LocaleZoneIdUtil.LocaleNonnull.get();
return messageSource.getMessage(code, args, locale);
}
+
+ /**
+ * handle response and exception after resolving cause
+ */
+ public interface Handler {
+ /**
+ * use original exception if response is null, otherwise the cause
+ */
+ @Nullable
+ default SimpleResponse handle(@NotNull Throwable cause, @Nullable SimpleResponse response) {
+ return response;
+ }
+ }
}
diff --git a/wings/warlock-shadow/src/test/java/pro/fessional/wings/warlock/controller/api/OkHttpTokenizeTest.java b/wings/warlock-shadow/src/test/java/pro/fessional/wings/warlock/controller/api/OkHttpTokenizeTest.java
index 1c6a8c78e..53f48119c 100644
--- a/wings/warlock-shadow/src/test/java/pro/fessional/wings/warlock/controller/api/OkHttpTokenizeTest.java
+++ b/wings/warlock-shadow/src/test/java/pro/fessional/wings/warlock/controller/api/OkHttpTokenizeTest.java
@@ -16,6 +16,8 @@
import pro.fessional.wings.slardar.spring.prop.SlardarSessionProp;
import pro.fessional.wings.warlock.spring.prop.WarlockUrlmapProp;
+import java.util.concurrent.atomic.AtomicReference;
+
/**
* @author trydofor
* @since 2022-11-16
@@ -74,6 +76,8 @@ public void testOauthClientCredentials() {
tokenize.setClientSecret(secret);
tokenize.setAuthorizeUrl(host + urlmapProp.getOauthAuthorize());
tokenize.setAccessTokenUrl(host + urlmapProp.getOauthAccessToken());
+ final AtomicReference token = new AtomicReference<>();
+ tokenize.setInitListener(token::set);
OkHttpTokenClient oauthClient = new OkHttpTokenClient(okHttpClient, tokenize);
okhttp3.Request request = new okhttp3.Request.Builder()
@@ -81,6 +85,7 @@ public void testOauthClientCredentials() {
.post(OkHttpClientHelper.EMPTY)
.build();
+ Assertions.assertSame(token.get(), tokenize.getToken());
final String str = OkHttpClientHelper.executeString(oauthClient, request, false);
Assertions.assertNotNull(str);
Assertions.assertNotEquals("failed", str);
@@ -96,6 +101,8 @@ public void testFormLogin() {
tokenize.setUsername("trydofor");
tokenize.setPassword("moMxVKXxA8Pe9XX9");
tokenize.setHeaderAuth(slardarSessionProp.getHeaderName());
+ final AtomicReference token = new AtomicReference<>();
+ tokenize.setInitListener(token::set);
OkHttpTokenClient oauthClient = new OkHttpTokenClient(okHttpClient, tokenize);
okhttp3.Request request = new okhttp3.Request.Builder()
@@ -103,6 +110,7 @@ public void testFormLogin() {
.post(OkHttpClientHelper.EMPTY)
.build();
+ Assertions.assertSame(token.get(), tokenize.getToken());
final String str = OkHttpClientHelper.executeString(oauthClient, request, false);
Assertions.assertNotNull(str);
Assertions.assertNotEquals("failed", str);