Uploaded image for project: 'Apache ServiceComb'
  1. Apache ServiceComb
  2. SCB-2425

Refactoring the Alpha module using Spring SPI

    XMLWordPrintableJSON

Details

    • Task
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • pack-0.7.0
    • pack-0.7.0
    • Saga
    • None

    Description

      The purpose of refactoring is to decouple distributed transaction implementation

      Alpha Module

      • Rename alpha-fsm to alpha-spec-saga-akka
      • Add alpha-spec-saga-db
      • Add alpha-spec-tcc-db
      • Keep Acceptance module artifactId and directory name the same, e.g. rename acceptance-pack-akka-spring to acceptance-pack-akka-spring-demo
      • Rename persistence-jpa to alpha/alpha-persistence-jpa

      Alpha Using Spring SPI

      • Load AlphaSpecXXXAutoConfiguration through spring.factories under each module
      • Configure the SPI module by parameters, likes alpha.spec.names=saga-db or alpha.spec.names=saga-akka

      Alpha Configuration

      alpha:
        spec:
          names: saga-db
          saga:
            akka:
              channel:
                name: memory
                memory:
                  max-length: -1
                kafka:
                  topic: servicecomb-pack-actor-event
                  bootstrap-servers: 127.0.0.1:9092
                  consumer:
                    group-id: servicecomb-pack
                    auto.offset.reset: earliest
                  producer:
                    batch-size: 16384
                    retries: 0
                    buffer.memory: 33554432
              repository:
                name: elasticsearch
                elasticsearch:
                  uris: http://localhost:9200
                  batch-size: 100
                  refresh-time: 5000
            db:
              datasource:
                username: sa
                password:
                url: jdbc:hsqldb:mem:saga
                initialization-mode: always
              cluster:
                enabled: true
                type: jdbc
                expire: 5000
          tcc:
            db:
              memory-mode: true
              datasource:
                username: sa
                password:
                url: jdbc:hsqldb:mem:saga
                initialization-mode: always
      

       
      Omega Modules

      • Split OmegaSpringConfig into OmegaSagaSpringConfig and OmegaTccSpringConfig

      Omega AutoConfiguration

      • OmegaSagaSpringConfig using omega.spec.names=saga
      • OmegaTccSpringConfig using omega.spec.names=tcc
      • TransactionAspectConfig class of the omega-spring-tx module uses ConditionalOnExpression to initialize beans

      Legacy Issue

      • [Duplicate Code]Create class EclipseLinkJpaConfiguration in test case to avoid dependency on class EclipseLinkJpaConfiguration in alpha-persistence-jpa module
      • [Duplicate Code]Because of the metrics API, each Spec module contains same classes as follows
          AlphaMetricsEndpointImpl.java 
          MetricsService.java 
          SagaAkkaAPIv1Controller.java, SagaAkkaAPIv1Impl.java 
          SagaDbAPIv1Controller.java, SagaDbAPIv1Impl.java 
          TccDbAPIv1Controller.java, TccDbAPIv1Impl.java
        
      • saga-db saga-akka and tcc-db cannot be used together
      • Refactor Redis and Rabbit channel configuration in saga-akka module
         

       

      Attachments

        Activity

          People

            zhanglei Lei Zhang
            zhanglei Lei Zhang
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: