├── .gitignore
├── README.md
├── aggregate-framework-admin-web
├── .editorconfig
├── .gitignore
├── config
│ ├── env.js
│ ├── getHttpsConfig.js
│ ├── jest
│ │ ├── cssTransform.js
│ │ └── fileTransform.js
│ ├── modules.js
│ ├── paths.js
│ ├── pnpTs.js
│ ├── webpack.config.js
│ └── webpackDevServer.config.js
├── package-lock.json
├── package.json
├── public
│ ├── favicon.ico
│ ├── index.html
│ ├── logo192.png
│ ├── logo512.png
│ ├── manifest.json
│ └── robots.txt
├── scripts
│ ├── build.js
│ ├── start.js
│ └── test.js
├── src
│ ├── App.css
│ ├── App.js
│ ├── App.test.js
│ ├── common
│ │ ├── api.js
│ │ ├── constants.js
│ │ ├── http.js
│ │ └── testData.js
│ ├── index.css
│ ├── index.js
│ ├── layout
│ │ ├── AggHeader.jsx
│ │ └── AggLayout.jsx
│ ├── logo.svg
│ ├── pages
│ │ └── agg
│ │ │ ├── domain
│ │ │ └── index.jsx
│ │ │ ├── login
│ │ │ └── index.jsx
│ │ │ ├── task
│ │ │ └── index.jsx
│ │ │ ├── transaction
│ │ │ ├── SearchBox.jsx
│ │ │ ├── TableCard.jsx
│ │ │ └── index.jsx
│ │ │ └── welcome
│ │ │ └── index.jsx
│ ├── serviceWorker.js
│ ├── setupProxy.js
│ ├── setupTests.js
│ └── store
│ │ ├── actions
│ │ └── domain.js
│ │ ├── index.js
│ │ └── reducers
│ │ └── domain.js
└── yarn.lock
├── aggregate-framework-bom
└── pom.xml
├── aggregate-framework-core
├── pom.xml
└── src
│ └── main
│ ├── dbscripts
│ └── db.sql
│ ├── java
│ └── org
│ │ └── aggregateframework
│ │ ├── AbstractConfig.java
│ │ ├── AggClient.java
│ │ ├── AggServer.java
│ │ ├── AggService.java
│ │ ├── ClientConfig.java
│ │ ├── ServerConfig.java
│ │ ├── alert
│ │ ├── AlertException.java
│ │ ├── AlertManager.java
│ │ └── ResponseCodeEnum.java
│ │ ├── cache
│ │ ├── AbstractRedisL2Cache.java
│ │ ├── CaffeineL2Cache.java
│ │ ├── IdentifiedEntityMap.java
│ │ ├── JedisClusterL2Cache.java
│ │ ├── JedisL2Cache.java
│ │ ├── JodisClusterL2Cache.java
│ │ ├── L2Cache.java
│ │ ├── MultiLevelL2Cache.java
│ │ ├── NoL2Cache.java
│ │ ├── RedisTemplateL2Cache.java
│ │ └── ShardJedisL2Cache.java
│ │ ├── constants
│ │ ├── MixAll.java
│ │ └── RemotingServiceCode.java
│ │ ├── dao
│ │ ├── AggregateDao.java
│ │ ├── AggregateRootDao.java
│ │ ├── CollectiveAggregateRootDao.java
│ │ ├── CollectiveDomainObjectDao.java
│ │ └── DomainObjectDao.java
│ │ ├── dashboard
│ │ ├── dto
│ │ │ ├── DomainStoreDto.java
│ │ │ ├── DomainStoreRequestDto.java
│ │ │ ├── ModifyCronDto.java
│ │ │ ├── ResponseDto.java
│ │ │ ├── TaskDto.java
│ │ │ ├── TransactionDetailRequestDto.java
│ │ │ ├── TransactionOperateRequestDto.java
│ │ │ ├── TransactionPageDto.java
│ │ │ ├── TransactionPageRequestDto.java
│ │ │ └── TransactionStoreDto.java
│ │ ├── enums
│ │ │ └── ResponseCodeEnum.java
│ │ ├── exception
│ │ │ └── TransactionException.java
│ │ └── service
│ │ │ ├── DomainService.java
│ │ │ ├── TaskService.java
│ │ │ ├── TransactionService.java
│ │ │ ├── TransactionStorageable.java
│ │ │ └── impl
│ │ │ ├── BaseDomainServiceImpl.java
│ │ │ ├── BaseTaskServiceImpl.java
│ │ │ └── BaseTransactionServiceImpl.java
│ │ ├── discovery
│ │ ├── loadbalance
│ │ │ ├── AbstractLoadBalanceServcie.java
│ │ │ ├── LoadBalanceFactory.java
│ │ │ ├── LoadBalanceProvider.java
│ │ │ ├── LoadBalanceServcie.java
│ │ │ ├── LoadBalanceType.java
│ │ │ ├── RandomLoadBalanceProvider.java
│ │ │ ├── RandomLoadBalanceServcieImpl.java
│ │ │ ├── RoundRobinLoadBalanceProvider.java
│ │ │ └── RoundRobinLoadBalanceServcieImpl.java
│ │ └── registry
│ │ │ ├── AbstractRegistryService.java
│ │ │ ├── ClientRegistryConfig.java
│ │ │ ├── RegistryConfig.java
│ │ │ ├── RegistryFactory.java
│ │ │ ├── RegistryProvider.java
│ │ │ ├── RegistryRole.java
│ │ │ ├── RegistryService.java
│ │ │ ├── RegistryType.java
│ │ │ ├── ServerRegistryConfig.java
│ │ │ ├── custom
│ │ │ └── CustomRegistryProvider.java
│ │ │ ├── direct
│ │ │ ├── DirectRegistryProperties.java
│ │ │ ├── DirectRegistryProvider.java
│ │ │ └── DirectRegistryServiceImpl.java
│ │ │ ├── nacos
│ │ │ ├── NacosRegistryProperties.java
│ │ │ ├── NacosRegistryServiceImpl.java
│ │ │ └── NacosRegistryServiceProvider.java
│ │ │ └── zookeeper
│ │ │ ├── ZookeeperInstance.java
│ │ │ ├── ZookeeperRegistryProperties.java
│ │ │ ├── ZookeeperRegistryProvider.java
│ │ │ └── ZookeeperRegistryServiceImpl.java
│ │ ├── domainevent
│ │ ├── EventMessage.java
│ │ ├── MessageType.java
│ │ └── SimpleEventMessage.java
│ │ ├── entity
│ │ ├── AbstractAggregateRoot.java
│ │ ├── AbstractDomainObject.java
│ │ ├── AbstractSimpleAggregateRoot.java
│ │ ├── AbstractSimpleDomainObject.java
│ │ ├── AggregateRoot.java
│ │ ├── CompositeId.java
│ │ ├── DaoAwareQuery.java
│ │ ├── DomainObject.java
│ │ ├── EventContainer.java
│ │ └── Transient.java
│ │ ├── eventbus
│ │ ├── EventBus.java
│ │ └── SimpleEventBus.java
│ │ ├── eventhandling
│ │ ├── AnnotationEventListenerAdapter.java
│ │ ├── EventHandlerHook.java
│ │ ├── EventHandlerListener.java
│ │ ├── EventInvokerEntry.java
│ │ ├── EventListener.java
│ │ ├── SimpleEventListenerProxy.java
│ │ ├── annotation
│ │ │ ├── AsyncConfig.java
│ │ │ ├── EventHandler.java
│ │ │ ├── QueueFullPolicy.java
│ │ │ └── TransactionCheck.java
│ │ └── processor
│ │ │ ├── AsyncMethodInvoker.java
│ │ │ ├── EventHandlerProcessor.java
│ │ │ ├── EventMethodInvoker.java
│ │ │ └── async
│ │ │ ├── AsyncBatchEventHandler.java
│ │ │ ├── AsyncDisruptor.java
│ │ │ ├── AsyncEvent.java
│ │ │ ├── AsyncEventFactory.java
│ │ │ ├── AsyncEventHandler.java
│ │ │ ├── AsyncEventTranslator.java
│ │ │ ├── EventProcessDefaultExceptionHandler.java
│ │ │ ├── EventProcessThread.java
│ │ │ ├── EventProcessThreadFactory.java
│ │ │ ├── RetryEvent.java
│ │ │ └── RetryEventFactory.java
│ │ ├── exception
│ │ ├── CancellingException.java
│ │ ├── ConfirmingException.java
│ │ ├── DomainException.java
│ │ ├── NoDaoDefinitionException.java
│ │ ├── NoExistedTransactionException.java
│ │ ├── OptimisticLockException.java
│ │ ├── RegistryException.java
│ │ └── SystemException.java
│ │ ├── load
│ │ ├── LoadInfo.java
│ │ └── LoadUtils.java
│ │ ├── monitor
│ │ └── ServerFlowMonitor.java
│ │ ├── persistent
│ │ └── redis
│ │ │ ├── CommandCallback.java
│ │ │ ├── JedisCallback.java
│ │ │ ├── JedisClusterCommands.java
│ │ │ ├── JedisCommands.java
│ │ │ ├── PipelineCommands.java
│ │ │ ├── RedisCommands.java
│ │ │ ├── RedisTemplateCommands.java
│ │ │ ├── ShardJedisCommands.java
│ │ │ ├── ShardedJedisCallback.java
│ │ │ └── ShardedPipelineCommand.java
│ │ ├── processor
│ │ ├── ClientRecoveryExecutor.java
│ │ ├── ClientRecoveryProcessor.java
│ │ ├── ServerRecoveryExecutor.java
│ │ └── ServerRequestProcessor.java
│ │ ├── properties
│ │ ├── RecoveryProperties.java
│ │ ├── registry
│ │ │ ├── ClientRegistryProperties.java
│ │ │ ├── RegistryProperties.java
│ │ │ └── ServerRegistryProperties.java
│ │ ├── remoting
│ │ │ ├── NettyClientProperties.java
│ │ │ ├── NettyProperties.java
│ │ │ └── NettyServerProperties.java
│ │ └── store
│ │ │ ├── AbstractJedisStoreProperties.java
│ │ │ ├── DLedgerProperties.java
│ │ │ ├── HostAndPort.java
│ │ │ ├── JdbcStoreProperties.java
│ │ │ ├── RedisClusterStoreProperties.java
│ │ │ ├── RedisStoreProperties.java
│ │ │ ├── ShardRedisStoreProperties.java
│ │ │ └── StoreProperties.java
│ │ ├── recovery
│ │ ├── QuartzRecoveryTask.java
│ │ ├── RecoveryConfig.java
│ │ ├── RecoveryExecutor.java
│ │ ├── RecoveryScheduler.java
│ │ ├── ReusableConnectionProvider.java
│ │ ├── ReusableThreadPool.java
│ │ └── TransactionStoreRecovery.java
│ │ ├── remoting
│ │ ├── RemotingClient.java
│ │ ├── RemotingServer.java
│ │ ├── RemotingService.java
│ │ ├── RequestProcessor.java
│ │ ├── codec
│ │ │ ├── NettyDecoder.java
│ │ │ └── NettyEncoder.java
│ │ ├── exception
│ │ │ ├── RemotingCommandException.java
│ │ │ ├── RemotingConnectException.java
│ │ │ ├── RemotingException.java
│ │ │ ├── RemotingSendRequestException.java
│ │ │ └── RemotingTimeoutException.java
│ │ ├── netty
│ │ │ ├── AbstractNettyRemoting.java
│ │ │ ├── ChannelGroupMap.java
│ │ │ ├── HeartBeatReqHandler.java
│ │ │ ├── HeartBeatRespHandler.java
│ │ │ ├── NettyClientConfig.java
│ │ │ ├── NettyConfig.java
│ │ │ ├── NettyPooledFactory.java
│ │ │ ├── NettyRemotingClient.java
│ │ │ ├── NettyRemotingServer.java
│ │ │ ├── NettyServerConfig.java
│ │ │ ├── RemotingResponseCallback.java
│ │ │ ├── ResponseFuture.java
│ │ │ └── ServerAddressLoader.java
│ │ └── protocol
│ │ │ ├── RemotingCommand.java
│ │ │ └── RemotingCommandCode.java
│ │ ├── repository
│ │ ├── AbstractAggregateRepository.java
│ │ ├── AggreateDaoFactory.java
│ │ ├── AggregateRepository.java
│ │ ├── CrudRepository.java
│ │ ├── DaoAwareAggregateRepository.java
│ │ ├── Repository.java
│ │ ├── SaveAggregateCallback.java
│ │ └── TraversalAggregateRepository.java
│ │ ├── retry
│ │ ├── BinaryExceptionClassifier.java
│ │ ├── Classifier.java
│ │ ├── RecoveryCallback.java
│ │ ├── RetryCallback.java
│ │ ├── RetryContext.java
│ │ ├── RetryOperations.java
│ │ ├── RetryPolicy.java
│ │ ├── RetryTemplate.java
│ │ ├── SimpleRecoveryCallback.java
│ │ ├── SimpleRetryContext.java
│ │ ├── SimpleRetryPolicy.java
│ │ ├── SubclassClassifier.java
│ │ └── backoff
│ │ │ ├── BackOffContext.java
│ │ │ ├── BackOffPolicy.java
│ │ │ ├── ExponentialBackOffPolicy.java
│ │ │ ├── ExponentialRandomBackOffPolicy.java
│ │ │ ├── FixedBackOffPolicy.java
│ │ │ ├── NoBackOffPolicy.java
│ │ │ ├── Sleeper.java
│ │ │ ├── SleepingBackOffPolicy.java
│ │ │ ├── ThreadWaitSleeper.java
│ │ │ └── UniformRandomBackOffPolicy.java
│ │ ├── serializer
│ │ ├── JdkSerializationSerializer.java
│ │ ├── KryoPoolSerializer.java
│ │ ├── ObjectSerializer.java
│ │ └── RegisterableKryoSerializer.java
│ │ ├── session
│ │ ├── AbstractClientSession.java
│ │ ├── AggregateContext.java
│ │ ├── AggregateEntry.java
│ │ ├── ClientSession.java
│ │ ├── LocalSessionFactory.java
│ │ ├── SessionFactory.java
│ │ ├── SessionFactoryHelper.java
│ │ └── UnitOfWork.java
│ │ ├── storage
│ │ ├── AbstractKVTransactionStorage.java
│ │ ├── AbstractRedisTransactionStorage.java
│ │ ├── AbstractTransactionStorage.java
│ │ ├── DLedgerTransactionStorage.java
│ │ ├── JdbcTransactionStorage.java
│ │ ├── JedisClusterTransactionStorage.java
│ │ ├── MemoryTransactionStorage.java
│ │ ├── Page.java
│ │ ├── RedisTransactionStorage.java
│ │ ├── RemotingTransactionStorage.java
│ │ ├── RetryableTransactionStorage.java
│ │ ├── RocksDbTransactionStorage.java
│ │ ├── ShardJedisTransactionStorage.java
│ │ ├── StorageRecoverable.java
│ │ ├── StorageType.java
│ │ ├── StoreConfig.java
│ │ ├── TransactionIOException.java
│ │ ├── TransactionOptimisticLockException.java
│ │ ├── TransactionStorage.java
│ │ ├── TransactionStorageFactory.java
│ │ ├── TransactionStore.java
│ │ ├── domain
│ │ │ ├── AlertType.java
│ │ │ └── DomainStore.java
│ │ └── helper
│ │ │ ├── RedisHelper.java
│ │ │ ├── ShardHolder.java
│ │ │ └── ShardOffset.java
│ │ ├── support
│ │ ├── BeanFactory.java
│ │ └── FactoryBuilder.java
│ │ ├── threadcontext
│ │ ├── EmptyThreadContextSynchronization.java
│ │ ├── ThreadContextSynchronization.java
│ │ └── ThreadContextSynchronizationManager.java
│ │ ├── transaction
│ │ ├── Invocation.java
│ │ ├── LocalTransactionExecutor.java
│ │ ├── LocalTransactionState.java
│ │ ├── Participant.java
│ │ ├── Transaction.java
│ │ ├── repository
│ │ │ ├── DefaultTransactionRepository.java
│ │ │ ├── TransactionConvertor.java
│ │ │ └── TransactionRepository.java
│ │ └── serializer
│ │ │ ├── DefaultRemotingCommandSerializer.java
│ │ │ ├── DefaultTransactionStoreSerializer.java
│ │ │ ├── DomainStoreMapSerializer.java
│ │ │ ├── RemotingCommandSerializer.java
│ │ │ ├── SerializerType.java
│ │ │ ├── TransactionSerializer.java
│ │ │ ├── TransactionStoreMapSerializer.java
│ │ │ ├── TransactionStoreSerializer.java
│ │ │ ├── json
│ │ │ ├── FastjsonTransactionSerializer.java
│ │ │ ├── JacksonDomainStoreSerializer.java
│ │ │ └── JacksonTransactionSerializer.java
│ │ │ └── kryo
│ │ │ ├── KryoTransactionSerializer.java
│ │ │ ├── RegisterableKryoRemotingCommandSerializer.java
│ │ │ ├── RegisterableKryoSerializer.java
│ │ │ └── RegisterableKryoTransactionSerializer.java
│ │ ├── utils
│ │ ├── AggDateFormatUtils.java
│ │ ├── AlertUtils.java
│ │ ├── AnnotationUtils.java
│ │ ├── Assert.java
│ │ ├── ByteUtils.java
│ │ ├── CollectionUtils.java
│ │ ├── DomainObjectUtils.java
│ │ ├── EventHandlerUtils.java
│ │ ├── NetUtils.java
│ │ ├── ObjectUtils.java
│ │ ├── ReflectionUtils.java
│ │ └── StopUtils.java
│ │ └── xid
│ │ ├── TransactionXid.java
│ │ ├── UUIDGenerator.java
│ │ └── Xid.java
│ └── resources
│ └── META-INF
│ └── services
│ ├── org.aggregateframework.discovery.loadbalance.LoadBalanceProvider
│ └── org.aggregateframework.discovery.registry.RegistryProvider
├── aggregate-framework-dashboard
├── pom.xml
└── src
│ └── main
│ ├── java
│ └── org
│ │ └── aggregateframework
│ │ ├── dashboard
│ │ ├── AggregateFrameworkDashboardApplication.java
│ │ ├── config
│ │ │ ├── DashboardConfig.java
│ │ │ └── DashboardProperties.java
│ │ ├── constants
│ │ │ └── DashboardConstant.java
│ │ ├── controller
│ │ │ ├── DomainController.java
│ │ │ ├── TaskController.java
│ │ │ ├── TransactionController.java
│ │ │ └── UserController.java
│ │ ├── enums
│ │ │ └── ConnectionMode.java
│ │ ├── exceptionhandler
│ │ │ └── ControllerExceptionHandler.java
│ │ ├── model
│ │ │ ├── LoginDto.java
│ │ │ └── SystemUser.java
│ │ ├── security
│ │ │ ├── AggAccessDeniedHandler.java
│ │ │ ├── AggAuthenticationEntryPoint.java
│ │ │ ├── JwtAuthFilter.java
│ │ │ ├── SecurityConfig.java
│ │ │ └── UserService.java
│ │ ├── service
│ │ │ ├── condition
│ │ │ │ ├── AggServerStorageCondition.java
│ │ │ │ ├── BaseStorageCondition.java
│ │ │ │ └── LocalStorageCondition.java
│ │ │ └── impl
│ │ │ │ ├── aggserver
│ │ │ │ ├── AggServerDomainServiceImpl.java
│ │ │ │ ├── AggServerFeignClient.java
│ │ │ │ ├── AggServerTaskServiceImpl.java
│ │ │ │ └── AggServerTransactionServiceImpl.java
│ │ │ │ └── local
│ │ │ │ ├── LocalDomainServiceImpl.java
│ │ │ │ ├── LocalTaskServiceImpl.java
│ │ │ │ └── LocalTransactionServiceImpl.java
│ │ └── utils
│ │ │ └── JwtUtil.java
│ │ └── ribbon
│ │ ├── AggFeignClientConfig.java
│ │ └── AggServerList.java
│ └── resources
│ ├── application-dev.yaml
│ ├── application-embedded.yaml
│ ├── application-server.yaml
│ ├── application.yaml
│ └── templates
│ ├── asset-manifest.json
│ ├── favicon.ico
│ ├── index.html
│ ├── logo192.png
│ ├── logo512.png
│ ├── manifest.json
│ ├── precache-manifest.2707a861fce65e0ea4a57437e31cd76c.js
│ ├── robots.txt
│ ├── service-worker.js
│ └── static
│ ├── css
│ ├── 2.4f57d18e.chunk.css
│ ├── 2.4f57d18e.chunk.css.map
│ ├── main.013a3909.chunk.css
│ └── main.013a3909.chunk.css.map
│ └── js
│ ├── 2.ed2ac97b.chunk.js
│ ├── 2.ed2ac97b.chunk.js.LICENSE.txt
│ ├── 2.ed2ac97b.chunk.js.map
│ ├── main.7496146c.chunk.js
│ ├── main.7496146c.chunk.js.map
│ ├── runtime-main.f35c6c1a.js
│ └── runtime-main.f35c6c1a.js.map
├── aggregate-framework-dependencies
└── pom.xml
├── aggregate-framework-distribution
├── dashboard
│ ├── bin
│ │ ├── shutdown.cmd
│ │ ├── shutdown.sh
│ │ ├── startup.cmd
│ │ └── startup.sh
│ └── conf
│ │ └── logback.xml
├── pom.xml
├── release-dashboard.xml
├── release-server.xml
└── server
│ ├── bin
│ ├── shutdown.cmd
│ ├── shutdown.sh
│ ├── startup.cmd
│ └── startup.sh
│ └── conf
│ └── logback.xml
├── aggregate-framework-parent
└── pom.xml
├── aggregate-framework-server
├── pom.xml
└── src
│ └── main
│ ├── dbscripts
│ └── db_init.sql
│ ├── java
│ └── org
│ │ └── aggregateframework
│ │ └── server
│ │ ├── AggregateFrameworkServerApplication.java
│ │ ├── config
│ │ ├── AppConfig.java
│ │ └── ServerEnvironmentPostProcessor.java
│ │ ├── controller
│ │ ├── DomainController.java
│ │ ├── RecoveryController.java
│ │ └── TransactionController.java
│ │ └── service
│ │ ├── DomainServiceImpl.java
│ │ └── TransactionServiceImpl.java
│ └── resources
│ ├── application-dev.yml
│ ├── application.yaml
│ └── schema.sql
├── aggregate-framework-spring-boot-starter
├── pom.xml
└── src
│ └── main
│ ├── java
│ └── org
│ │ └── aggregateframework
│ │ └── spring
│ │ ├── AggFrameworkAutoConfiguration.java
│ │ └── AggFrameworkConfigurationFilter.java
│ └── resources
│ └── META-INF
│ └── spring.factories
├── aggregate-framework-spring
├── pom.xml
└── src
│ └── main
│ ├── java
│ └── org
│ │ └── aggregateframework
│ │ └── spring
│ │ ├── annotation
│ │ ├── EnableSpringIntegration.java
│ │ └── SpringIntegrationConfigurationSelector.java
│ │ ├── datasource
│ │ ├── SessionDataSourceTransactionManager.java
│ │ ├── SessionTransactionSynchronizationAdapter.java
│ │ ├── TransactionManagerAutoProxyCreator.java
│ │ └── TransactionManagerInterceptor.java
│ │ ├── eventhandling
│ │ └── AnnotationEventListenerBeanPostProcessor.java
│ │ ├── factory
│ │ └── SpringBeanFactory.java
│ │ ├── support
│ │ └── SpringIntegrationConfiguration.java
│ │ ├── xid
│ │ ├── DefaultUUIDGenerator.java
│ │ └── SimpleWorkerIdAssigner.java
│ │ └── xml
│ │ ├── AggConfigNamespaceHandlerSupport.java
│ │ ├── SpringIntegrationByConfigDefinitionParser.java
│ │ └── SpringIntegrationByRegisterDefinitionParser.java
│ └── resources
│ ├── META-INF
│ ├── spring.handlers
│ └── spring.schemas
│ ├── aggregateframework-1.1.xsd
│ └── config
│ └── spring
│ └── common
│ └── aggregate-framework-context.xml
├── aggregate-framework-tutorial-sample
├── aggregate-framework-basic-usage
│ ├── pom.xml
│ └── src
│ │ └── main
│ │ ├── java
│ │ └── org
│ │ │ └── aggregateframework
│ │ │ └── basic
│ │ │ └── usage
│ │ │ ├── BasicUsageApplication.java
│ │ │ ├── controller
│ │ │ └── AccountController.java
│ │ │ ├── dao
│ │ │ ├── AccountDao.java
│ │ │ └── SubAccountDao.java
│ │ │ ├── entity
│ │ │ ├── Account.java
│ │ │ └── SubAccount.java
│ │ │ ├── event
│ │ │ ├── AccountCreateEvent.java
│ │ │ └── AccountEventHandler.java
│ │ │ └── repository
│ │ │ └── AccountRepository.java
│ │ └── resources
│ │ ├── application-local.yaml
│ │ ├── application-server.yaml
│ │ ├── application.yaml
│ │ ├── mapping
│ │ ├── AccountMapper.xml
│ │ └── SubAccountMapper.xml
│ │ └── schema.sql
├── aggregate-framework-sample
│ ├── pom.xml
│ └── src
│ │ ├── main
│ │ ├── java
│ │ │ └── org
│ │ │ │ └── aggregateframework
│ │ │ │ └── sample
│ │ │ │ ├── AggregateFrameworkSampleApplication.java
│ │ │ │ ├── complexmodel
│ │ │ │ └── command
│ │ │ │ │ ├── domain
│ │ │ │ │ ├── entity
│ │ │ │ │ │ ├── BookingOrder.java
│ │ │ │ │ │ ├── BookingPayment.java
│ │ │ │ │ │ ├── SeatAvailability.java
│ │ │ │ │ │ └── UserShardingId.java
│ │ │ │ │ ├── event
│ │ │ │ │ │ ├── OrderCreatedEvent.java
│ │ │ │ │ │ ├── OrderUpdatedEvent.java
│ │ │ │ │ │ └── SeatAvailabilityRemovedEvent.java
│ │ │ │ │ └── repository
│ │ │ │ │ │ └── JpaOrderRepository.java
│ │ │ │ │ ├── eventhandler
│ │ │ │ │ └── BookingOrderHandler.java
│ │ │ │ │ ├── infrastructure
│ │ │ │ │ └── dao
│ │ │ │ │ │ ├── BookingOrderDao.java
│ │ │ │ │ │ ├── BookingPaymentDao.java
│ │ │ │ │ │ └── SeatAvailabilityDao.java
│ │ │ │ │ └── service
│ │ │ │ │ ├── OrderService.java
│ │ │ │ │ └── OrderServiceImpl.java
│ │ │ │ ├── hierarchicalmodel
│ │ │ │ └── command
│ │ │ │ │ ├── domain
│ │ │ │ │ ├── entity
│ │ │ │ │ │ ├── DeliveryOrder.java
│ │ │ │ │ │ ├── DeliveryOrderInfo.java
│ │ │ │ │ │ ├── HierarchicalOrder.java
│ │ │ │ │ │ ├── JobOrder.java
│ │ │ │ │ │ ├── JobOrderInfo.java
│ │ │ │ │ │ └── OrderInfo.java
│ │ │ │ │ └── repository
│ │ │ │ │ │ ├── DeliveryOrderRepository.java
│ │ │ │ │ │ └── JobOrderRepository.java
│ │ │ │ │ └── infrastructure
│ │ │ │ │ └── dao
│ │ │ │ │ ├── HierarchicalOrderDao.java
│ │ │ │ │ └── OrderInfoDao.java
│ │ │ │ ├── quickstart
│ │ │ │ ├── command
│ │ │ │ │ ├── domain
│ │ │ │ │ │ ├── entity
│ │ │ │ │ │ │ ├── OrderLine.java
│ │ │ │ │ │ │ ├── Payment.java
│ │ │ │ │ │ │ └── PricedOrder.java
│ │ │ │ │ │ ├── event
│ │ │ │ │ │ │ ├── OrderConfirmedEvent.java
│ │ │ │ │ │ │ ├── OrderPlacedEvent.java
│ │ │ │ │ │ │ └── PaymentConfirmedEvent.java
│ │ │ │ │ │ ├── factory
│ │ │ │ │ │ │ ├── OrderFactory.java
│ │ │ │ │ │ │ └── PaymentFactory.java
│ │ │ │ │ │ └── repository
│ │ │ │ │ │ │ ├── OrderRepository.java
│ │ │ │ │ │ │ └── PaymentRepository.java
│ │ │ │ │ ├── eventhandler
│ │ │ │ │ │ ├── OrderHandler.java
│ │ │ │ │ │ └── PaymentHandler.java
│ │ │ │ │ ├── infrastructure
│ │ │ │ │ │ ├── cache
│ │ │ │ │ │ │ └── PricedOrderL2Cache.java
│ │ │ │ │ │ └── dao
│ │ │ │ │ │ │ ├── OrderDao.java
│ │ │ │ │ │ │ ├── OrderLineDao.java
│ │ │ │ │ │ │ └── PaymentDao.java
│ │ │ │ │ └── service
│ │ │ │ │ │ └── OrderService.java
│ │ │ │ └── config
│ │ │ │ │ └── AppConfig.java
│ │ │ │ ├── threadcontext
│ │ │ │ └── TestThreadContextSynchronization.java
│ │ │ │ └── web
│ │ │ │ └── controller
│ │ │ │ └── BenchmarkController.java
│ │ └── resources
│ │ │ ├── META-INF
│ │ │ └── services
│ │ │ │ └── org.aggregateframework.threadcontext.ThreadContextSynchronization
│ │ │ ├── application-dev.yaml
│ │ │ ├── application.yaml
│ │ │ ├── config
│ │ │ ├── spring
│ │ │ │ └── local
│ │ │ │ │ ├── appcontext-service-aggregate.xml
│ │ │ │ │ ├── appcontext-service-cache.xml
│ │ │ │ │ ├── appcontext-service-common.xml
│ │ │ │ │ ├── appcontext-service-complex-dao.xml
│ │ │ │ │ ├── appcontext-service-hierarchical-dao.xml
│ │ │ │ │ └── appcontext-service-quickstart-dao.xml
│ │ │ └── sqlmap
│ │ │ │ ├── main
│ │ │ │ ├── mybatis-complex-order.xml
│ │ │ │ ├── mybatis-complex-payment.xml
│ │ │ │ ├── mybatis-complex-seatAvailability.xml
│ │ │ │ ├── mybatis-hierarchical-order.xml
│ │ │ │ ├── mybatis-hierarchical-orderInfo.xml
│ │ │ │ ├── mybatis-quickstart-order.xml
│ │ │ │ ├── mybatis-quickstart-orderline.xml
│ │ │ │ └── mybatis-quickstart-payment.xml
│ │ │ │ └── sqlmap-config.xml
│ │ │ ├── h2.sql
│ │ │ ├── jdbc.properties
│ │ │ ├── log4j2.xml
│ │ │ ├── redis.properties
│ │ │ └── zk.properties
│ │ └── test
│ │ └── java
│ │ └── org
│ │ └── aggregateframework
│ │ └── sample
│ │ ├── AbstractTestCase.java
│ │ ├── asynctest
│ │ ├── RingBufferEvent.java
│ │ ├── RingBufferLogEventHandler.java
│ │ └── RingBufferLogEventTranslator.java
│ │ ├── cacheintegration
│ │ ├── CaffeinelL2CacheTest.java
│ │ └── RepositoryCacheTest.java
│ │ ├── complexmodel
│ │ ├── OrderTestCase.java
│ │ └── domain
│ │ │ └── repositorytest
│ │ │ └── PricedOrderRepositoryTest.java
│ │ ├── hierarchymodel
│ │ ├── domain
│ │ │ └── repository
│ │ │ │ └── DeliveryBookingPricedOrderRepositoryTest.java
│ │ └── infrastructure
│ │ │ └── dao
│ │ │ └── HierarchyPricedOrderDaoTest.java
│ │ ├── performancetest
│ │ └── PerformanceTest.java
│ │ ├── quickstart
│ │ └── service
│ │ │ └── SimpleOrderServiceTest.java
│ │ ├── repository
│ │ └── RocksDbTest.java
│ │ ├── serializer
│ │ └── SerializerTest.java
│ │ ├── threadcontext
│ │ └── ThreadContextTest.java
│ │ └── transactionmessage
│ │ └── PricedOrderServiceTest.java
└── pom.xml
├── doc
├── AggregateFamework Reference.docx
└── AggregateFamework Reference.pdf
└── pom.xml
/.gitignore:
--------------------------------------------------------------------------------
1 | # maven ignore
2 | target/
3 | *.jar
4 | *.war
5 | *.zip
6 | *.tar
7 | *.tar.gz
8 | .flattened-pom.xml
9 |
10 | # eclipse ignore
11 | .settings/
12 | .project
13 | .classpath
14 |
15 | # idea ignore
16 | .idea/
17 | *.ipr
18 | *.iml
19 | *.iws
20 |
21 | # temp ignore
22 | *.log
23 | *.cache
24 | *.diff
25 | *.patch
26 | *.tmp
27 |
28 | # system ignore
29 | .DS_Store
30 | Thumbs.db
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | AGGREGATE-FRAMEWORK是一款基于DDD和CQRS思想开发的领域驱动框架。内置了DomainObiect、AggregateRoot、Repository、DomainEvent、EventHandler等DDD基础构建块的实现。同时也提供了基于乐观锁的并发控制和可靠事件机制,用于满足分布式环境下的数据一致性需求。
2 |
3 | 主要目标是方便开发人员运用DDD和CQRS思想来构建复杂的、可扩展的应用系统。
4 |
5 | 详细介绍:
6 | https://changmingxie.github.io/zh-cn/aggdocs/what-is-aggregateframework.html
7 |
--------------------------------------------------------------------------------
/aggregate-framework-admin-web/.editorconfig:
--------------------------------------------------------------------------------
1 | # 🎨 editorconfig.org
2 |
3 | root = true
4 |
5 | [*]
6 |
7 | charset = utf-8
8 |
9 | indent_style = space
10 |
11 | end_of_line = lf
12 |
13 | # [*.{js, jsx, ts, tsx, vue}]
14 |
15 | indent_size = 2
16 |
17 | insert_final_newline = true
18 |
19 | trim_trailing_whitespace = true
20 |
21 | [*.{md, json}]
22 |
23 | trim_trailing_whitespace = false
24 |
25 |
26 |
--------------------------------------------------------------------------------
/aggregate-framework-admin-web/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .idea
16 | .DS_Store
17 | .env.local
18 | .env.development.local
19 | .env.test.local
20 | .env.production.local
21 |
22 | npm-debug.log*
23 | yarn-debug.log*
24 | yarn-error.log*
25 |
26 | dist
27 |
--------------------------------------------------------------------------------
/aggregate-framework-admin-web/config/jest/cssTransform.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | // This is a custom Jest transformer turning style imports into empty objects.
4 | // http://facebook.github.io/jest/docs/en/webpack.html
5 |
6 | module.exports = {
7 | process() {
8 | return 'module.exports = {};';
9 | },
10 | getCacheKey() {
11 | // The output is always the same.
12 | return 'cssTransform';
13 | },
14 | };
15 |
--------------------------------------------------------------------------------
/aggregate-framework-admin-web/config/pnpTs.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const {resolveModuleName} = require('ts-pnp');
4 |
5 | exports.resolveModuleName = (
6 | typescript,
7 | moduleName,
8 | containingFile,
9 | compilerOptions,
10 | resolutionHost
11 | ) => {
12 | return resolveModuleName(
13 | moduleName,
14 | containingFile,
15 | compilerOptions,
16 | resolutionHost,
17 | typescript.resolveModuleName
18 | );
19 | };
20 |
21 | exports.resolveTypeReferenceDirective = (
22 | typescript,
23 | moduleName,
24 | containingFile,
25 | compilerOptions,
26 | resolutionHost
27 | ) => {
28 | return resolveModuleName(
29 | moduleName,
30 | containingFile,
31 | compilerOptions,
32 | resolutionHost,
33 | typescript.resolveTypeReferenceDirective
34 | );
35 | };
36 |
--------------------------------------------------------------------------------
/aggregate-framework-admin-web/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/changmingxie/aggregate-framework/9e6cc6fec81dc927145e87fcc0a28b9c77b9f51a/aggregate-framework-admin-web/public/favicon.ico
--------------------------------------------------------------------------------
/aggregate-framework-admin-web/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/changmingxie/aggregate-framework/9e6cc6fec81dc927145e87fcc0a28b9c77b9f51a/aggregate-framework-admin-web/public/logo192.png
--------------------------------------------------------------------------------
/aggregate-framework-admin-web/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/changmingxie/aggregate-framework/9e6cc6fec81dc927145e87fcc0a28b9c77b9f51a/aggregate-framework-admin-web/public/logo512.png
--------------------------------------------------------------------------------
/aggregate-framework-admin-web/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/aggregate-framework-admin-web/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/aggregate-framework-admin-web/src/App.css:
--------------------------------------------------------------------------------
1 | .search-box {
2 | display: flex;
3 | flex-direction: row;
4 | }
5 |
6 | .search-box .ant-btn {
7 | margin-left: 8px;
8 | }
9 |
10 | .site-layout-content {
11 | padding: 12px;
12 | overflow: scroll;
13 | max-height: 48rem;
14 | }
15 |
16 | .tab-3-body {
17 | background-color: #fff;
18 | padding-top: 20px;
19 | padding-left: 24px;
20 | padding-right: 24px;
21 | padding-bottom: 1px;
22 | }
23 |
24 | .tab-3-row {
25 | padding: 6px;
26 | }
27 |
28 | .tab-3-switch-label {
29 | padding-left: 12px;
30 | }
31 |
32 | #root {
33 | height: 100%;
34 | }
35 |
36 | .layout {
37 | height: 100%;
38 | }
39 |
40 | .login-container {
41 | min-height: 100%;
42 | width: 100%;
43 | background-color: #2d3a4b;
44 | overflow: hidden;
45 | }
46 |
--------------------------------------------------------------------------------
/aggregate-framework-admin-web/src/App.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {Provider} from 'react-redux';
3 | import {HashRouter as Router, Redirect, Route, Switch} from 'react-router-dom';
4 | import 'antd/dist/antd.css';
5 | import './App.css';
6 |
7 | import Login from './pages/agg/login/index';
8 | import Welcome from './pages/agg/welcome/index';
9 | import Domain from './pages/agg/domain/index';
10 | import Transaction from './pages/agg/transaction/index';
11 | import Task from "./pages/agg/task/index";
12 |
13 | import store from './store';
14 | import AggLayout from "./layout/AggLayout";
15 |
16 | function App(props) {
17 | return (
18 |