code: public void joinGroup(String groupId, String unitId, String transactionType, TransactionInfo transactionInfo)
              throws TransactionException {
          try {
              txLogger.txTrace(groupId, unitId, "join group > transaction type: {}", transactionType);
  
              reliableMessenger.joinGroup(groupId, unitId, transactionType, DTXLocalContext.transactionState(globalContext.dtxState(groupId)));
  
              txLogger.txTrace(groupId, unitId, "join group message over.");
  
              // 异步检测
              dtxChecking.startDelayCheckingAsync(groupId, unitId, transactionType);
  
              // 缓存参与方切面信息
              aspectLogger.trace(groupId, unitId, transactionInfo);
          } catch (RpcException e) {
              dtxExceptionHandler.handleJoinGroupMessageException(Arrays.asList(groupId, unitId, transactionType), e);
          } catch (LcnBusinessException e) {
              dtxExceptionHandler.handleJoinGroupBusinessException(Arrays.asList(groupId, unitId, transactionType), e);
          }
          txLogger.txTrace(groupId, unitId, "join group logic over");
      }
docs: Client加入事务组操作集合
  
  @param groupId         groupId
  @param unitId          unitId
  @param transactionType transactionType
  @param transactionInfo txTrace
  @throws TransactionException 加入事务组失败时抛出