@@ -1,3 +1,6 @@ | |||||
# Idea configuration file | |||||
.idea/ | |||||
# Binaries for programs and plugins | # Binaries for programs and plugins | ||||
*.exe | *.exe | ||||
*.exe~ | *.exe~ | ||||
@@ -19,14 +19,15 @@ package tcc | |||||
import ( | import ( | ||||
"context" | "context" | ||||
"encoding/json" | |||||
"fmt" | "fmt" | ||||
"sync" | "sync" | ||||
"github.com/seata/seata-go/pkg/protocol/resource" | |||||
"github.com/seata/seata-go/pkg/tm" | |||||
"github.com/seata/seata-go/pkg/common" | |||||
"github.com/seata/seata-go/pkg/protocol/branch" | "github.com/seata/seata-go/pkg/protocol/branch" | ||||
"github.com/seata/seata-go/pkg/protocol/resource" | |||||
"github.com/seata/seata-go/pkg/rm" | "github.com/seata/seata-go/pkg/rm" | ||||
"github.com/seata/seata-go/pkg/tm" | |||||
) | ) | ||||
var ( | var ( | ||||
@@ -125,12 +126,20 @@ func (t *TCCResourceManager) BranchCommit(ctx context.Context, ranchType branch. | |||||
} | } | ||||
func (t *TCCResourceManager) getBusinessActionContext(xid string, branchID int64, resourceID string, applicationData []byte) tm.BusinessActionContext { | func (t *TCCResourceManager) getBusinessActionContext(xid string, branchID int64, resourceID string, applicationData []byte) tm.BusinessActionContext { | ||||
var actionContextMap = make(map[string]interface{}, 2) | |||||
if len(applicationData) > 0 { | |||||
var tccContext map[string]interface{} | |||||
json.Unmarshal(applicationData, &tccContext) | |||||
if v, ok := tccContext[common.ActionContext]; ok { | |||||
actionContextMap = v.(map[string]interface{}) | |||||
} | |||||
} | |||||
return tm.BusinessActionContext{ | return tm.BusinessActionContext{ | ||||
Xid: xid, | |||||
BranchId: branchID, | |||||
ActionName: resourceID, | |||||
// todo get ActionContext | |||||
//ActionContext:, | |||||
Xid: xid, | |||||
BranchId: branchID, | |||||
ActionName: resourceID, | |||||
ActionContext: &actionContextMap, | |||||
} | } | ||||
} | } | ||||
@@ -0,0 +1,36 @@ | |||||
/* | |||||
* Licensed to the Apache Software Foundation (ASF) under one or more | |||||
* contributor license agreements. See the NOTICE file distributed with | |||||
* this work for additional information regarding copyright ownership. | |||||
* The ASF licenses this file to You under the Apache License, Version 2.0 | |||||
* (the "License"); you may not use this file except in compliance with | |||||
* the License. You may obtain a copy of the License at | |||||
* | |||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* Unless required by applicable law or agreed to in writing, software | |||||
* distributed under the License is distributed on an "AS IS" BASIS, | |||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
* See the License for the specific language governing permissions and | |||||
* limitations under the License. | |||||
*/ | |||||
package tcc | |||||
import ( | |||||
"encoding/json" | |||||
"testing" | |||||
"github.com/stretchr/testify/assert" | |||||
) | |||||
func TestActionContext(t *testing.T) { | |||||
applicationData := `{"actionContext":{"zhangsan":"lisi"}}` | |||||
businessActionContext := GetTCCResourceManagerInstance(). | |||||
getBusinessActionContext("1111111111", 2645276141, "TestActionContext", []byte(applicationData)) | |||||
assert.NotEmpty(t, businessActionContext) | |||||
bytes, err := json.Marshal(businessActionContext.ActionContext) | |||||
assert.Nil(t, err) | |||||
assert.Equal(t, `{"zhangsan":"lisi"}`, string(bytes)) | |||||
} |