chore(project): 添加项目配置文件和忽略规则
- 添加 Babel 配置文件支持 ES6+ 语法转换 - 添加 ESLint 忽略规则和配置文件 - 添加 Git 忽略规则文件 - 添加 Travis CI 配置文件 - 添加 1.4.2 版本变更日志文件 - 添加 Helm 图表辅助模板文件 - 添加 Helm 忽略规则文件
This commit is contained in:
43
rm/pom.xml
Normal file
43
rm/pom.xml
Normal file
@@ -0,0 +1,43 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
~ Copyright 1999-2019 Seata.io Group.
|
||||
~
|
||||
~ Licensed 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.
|
||||
-->
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<groupId>io.seata</groupId>
|
||||
<artifactId>seata-parent</artifactId>
|
||||
<version>${revision}</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>seata-rm</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
<name>seata-rm ${project.version}</name>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>seata-core</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.guava</groupId>
|
||||
<artifactId>guava</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
|
||||
</project>
|
||||
159
rm/src/main/java/io/seata/rm/AbstractRMHandler.java
Normal file
159
rm/src/main/java/io/seata/rm/AbstractRMHandler.java
Normal file
@@ -0,0 +1,159 @@
|
||||
/*
|
||||
* Copyright 1999-2019 Seata.io Group.
|
||||
*
|
||||
* Licensed 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 io.seata.rm;
|
||||
|
||||
import io.seata.core.exception.AbstractExceptionHandler;
|
||||
import io.seata.core.exception.TransactionException;
|
||||
import io.seata.core.model.BranchStatus;
|
||||
import io.seata.core.model.BranchType;
|
||||
import io.seata.core.model.ResourceManager;
|
||||
import io.seata.core.protocol.AbstractMessage;
|
||||
import io.seata.core.protocol.AbstractResultMessage;
|
||||
import io.seata.core.protocol.transaction.AbstractTransactionRequestToRM;
|
||||
import io.seata.core.protocol.transaction.BranchCommitRequest;
|
||||
import io.seata.core.protocol.transaction.BranchCommitResponse;
|
||||
import io.seata.core.protocol.transaction.BranchRollbackRequest;
|
||||
import io.seata.core.protocol.transaction.BranchRollbackResponse;
|
||||
import io.seata.core.protocol.transaction.RMInboundHandler;
|
||||
import io.seata.core.protocol.transaction.UndoLogDeleteRequest;
|
||||
import io.seata.core.rpc.RpcContext;
|
||||
import io.seata.core.rpc.TransactionMessageHandler;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* The Abstract RM event handler
|
||||
*
|
||||
* @author sharajava
|
||||
*/
|
||||
public abstract class AbstractRMHandler extends AbstractExceptionHandler
|
||||
implements RMInboundHandler, TransactionMessageHandler {
|
||||
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(AbstractRMHandler.class);
|
||||
|
||||
@Override
|
||||
public BranchCommitResponse handle(BranchCommitRequest request) {
|
||||
BranchCommitResponse response = new BranchCommitResponse();
|
||||
exceptionHandleTemplate(new AbstractCallback<BranchCommitRequest, BranchCommitResponse>() {
|
||||
@Override
|
||||
public void execute(BranchCommitRequest request, BranchCommitResponse response)
|
||||
throws TransactionException {
|
||||
doBranchCommit(request, response);
|
||||
}
|
||||
}, request, response);
|
||||
return response;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BranchRollbackResponse handle(BranchRollbackRequest request) {
|
||||
BranchRollbackResponse response = new BranchRollbackResponse();
|
||||
exceptionHandleTemplate(new AbstractCallback<BranchRollbackRequest, BranchRollbackResponse>() {
|
||||
@Override
|
||||
public void execute(BranchRollbackRequest request, BranchRollbackResponse response)
|
||||
throws TransactionException {
|
||||
doBranchRollback(request, response);
|
||||
}
|
||||
}, request, response);
|
||||
return response;
|
||||
}
|
||||
|
||||
/**
|
||||
* delete undo log
|
||||
* @param request the request
|
||||
*/
|
||||
@Override
|
||||
public void handle(UndoLogDeleteRequest request) {
|
||||
// https://github.com/seata/seata/issues/2226
|
||||
}
|
||||
|
||||
/**
|
||||
* Do branch commit.
|
||||
*
|
||||
* @param request the request
|
||||
* @param response the response
|
||||
* @throws TransactionException the transaction exception
|
||||
*/
|
||||
protected void doBranchCommit(BranchCommitRequest request, BranchCommitResponse response)
|
||||
throws TransactionException {
|
||||
String xid = request.getXid();
|
||||
long branchId = request.getBranchId();
|
||||
String resourceId = request.getResourceId();
|
||||
String applicationData = request.getApplicationData();
|
||||
if (LOGGER.isInfoEnabled()) {
|
||||
LOGGER.info("Branch committing: " + xid + " " + branchId + " " + resourceId + " " + applicationData);
|
||||
}
|
||||
BranchStatus status = getResourceManager().branchCommit(request.getBranchType(), xid, branchId, resourceId,
|
||||
applicationData);
|
||||
response.setXid(xid);
|
||||
response.setBranchId(branchId);
|
||||
response.setBranchStatus(status);
|
||||
if (LOGGER.isInfoEnabled()) {
|
||||
LOGGER.info("Branch commit result: " + status);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Do branch rollback.
|
||||
*
|
||||
* @param request the request
|
||||
* @param response the response
|
||||
* @throws TransactionException the transaction exception
|
||||
*/
|
||||
protected void doBranchRollback(BranchRollbackRequest request, BranchRollbackResponse response)
|
||||
throws TransactionException {
|
||||
String xid = request.getXid();
|
||||
long branchId = request.getBranchId();
|
||||
String resourceId = request.getResourceId();
|
||||
String applicationData = request.getApplicationData();
|
||||
if (LOGGER.isInfoEnabled()) {
|
||||
LOGGER.info("Branch Rollbacking: " + xid + " " + branchId + " " + resourceId);
|
||||
}
|
||||
BranchStatus status = getResourceManager().branchRollback(request.getBranchType(), xid, branchId, resourceId,
|
||||
applicationData);
|
||||
response.setXid(xid);
|
||||
response.setBranchId(branchId);
|
||||
response.setBranchStatus(status);
|
||||
if (LOGGER.isInfoEnabled()) {
|
||||
LOGGER.info("Branch Rollbacked result: " + status);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* get resource manager implement
|
||||
*
|
||||
* @return resource manager
|
||||
*/
|
||||
protected abstract ResourceManager getResourceManager();
|
||||
|
||||
@Override
|
||||
public AbstractResultMessage onRequest(AbstractMessage request, RpcContext context) {
|
||||
if (!(request instanceof AbstractTransactionRequestToRM)) {
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
AbstractTransactionRequestToRM transactionRequest = (AbstractTransactionRequestToRM)request;
|
||||
transactionRequest.setRMInboundMessageHandler(this);
|
||||
|
||||
return transactionRequest.handle(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResponse(AbstractResultMessage response, RpcContext context) {
|
||||
LOGGER.info("the rm client received response msg [{}] from tc server.", response.toString());
|
||||
}
|
||||
|
||||
public abstract BranchType getBranchType();
|
||||
}
|
||||
123
rm/src/main/java/io/seata/rm/AbstractResourceManager.java
Normal file
123
rm/src/main/java/io/seata/rm/AbstractResourceManager.java
Normal file
@@ -0,0 +1,123 @@
|
||||
/*
|
||||
* Copyright 1999-2019 Seata.io Group.
|
||||
*
|
||||
* Licensed 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 io.seata.rm;
|
||||
|
||||
import io.seata.common.exception.NotSupportYetException;
|
||||
import io.seata.core.exception.RmTransactionException;
|
||||
import io.seata.core.exception.TransactionException;
|
||||
import io.seata.core.exception.TransactionExceptionCode;
|
||||
import io.seata.core.model.BranchStatus;
|
||||
import io.seata.core.model.BranchType;
|
||||
import io.seata.core.model.Resource;
|
||||
import io.seata.core.model.ResourceManager;
|
||||
import io.seata.core.protocol.ResultCode;
|
||||
import io.seata.core.protocol.transaction.BranchRegisterRequest;
|
||||
import io.seata.core.protocol.transaction.BranchRegisterResponse;
|
||||
import io.seata.core.protocol.transaction.BranchReportRequest;
|
||||
import io.seata.core.protocol.transaction.BranchReportResponse;
|
||||
import io.seata.core.rpc.netty.RmNettyRemotingClient;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.util.concurrent.TimeoutException;
|
||||
|
||||
/**
|
||||
* abstract ResourceManager
|
||||
*
|
||||
* @author zhangsen
|
||||
*/
|
||||
public abstract class AbstractResourceManager implements ResourceManager {
|
||||
|
||||
protected static final Logger LOGGER = LoggerFactory.getLogger(AbstractResourceManager.class);
|
||||
|
||||
/**
|
||||
* registry branch record
|
||||
*
|
||||
* @param branchType the branch type
|
||||
* @param resourceId the resource id
|
||||
* @param clientId the client id
|
||||
* @param xid the xid
|
||||
* @param lockKeys the lock keys
|
||||
* @return branchId
|
||||
* @throws TransactionException TransactionException
|
||||
*/
|
||||
@Override
|
||||
public Long branchRegister(BranchType branchType, String resourceId, String clientId, String xid, String applicationData, String lockKeys) throws TransactionException {
|
||||
try {
|
||||
BranchRegisterRequest request = new BranchRegisterRequest();
|
||||
request.setXid(xid);
|
||||
request.setLockKey(lockKeys);
|
||||
request.setResourceId(resourceId);
|
||||
request.setBranchType(branchType);
|
||||
request.setApplicationData(applicationData);
|
||||
|
||||
BranchRegisterResponse response = (BranchRegisterResponse) RmNettyRemotingClient.getInstance().sendSyncRequest(request);
|
||||
if (response.getResultCode() == ResultCode.Failed) {
|
||||
throw new RmTransactionException(response.getTransactionExceptionCode(), String.format("Response[ %s ]", response.getMsg()));
|
||||
}
|
||||
return response.getBranchId();
|
||||
} catch (TimeoutException toe) {
|
||||
throw new RmTransactionException(TransactionExceptionCode.IO, "RPC Timeout", toe);
|
||||
} catch (RuntimeException rex) {
|
||||
throw new RmTransactionException(TransactionExceptionCode.BranchRegisterFailed, "Runtime", rex);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* report branch status
|
||||
*
|
||||
* @param branchType the branch type
|
||||
* @param xid the xid
|
||||
* @param branchId the branch id
|
||||
* @param status the status
|
||||
* @param applicationData the application data
|
||||
* @throws TransactionException TransactionException
|
||||
*/
|
||||
@Override
|
||||
public void branchReport(BranchType branchType, String xid, long branchId, BranchStatus status, String applicationData) throws TransactionException {
|
||||
try {
|
||||
BranchReportRequest request = new BranchReportRequest();
|
||||
request.setXid(xid);
|
||||
request.setBranchId(branchId);
|
||||
request.setStatus(status);
|
||||
request.setApplicationData(applicationData);
|
||||
|
||||
BranchReportResponse response = (BranchReportResponse) RmNettyRemotingClient.getInstance().sendSyncRequest(request);
|
||||
if (response.getResultCode() == ResultCode.Failed) {
|
||||
throw new RmTransactionException(response.getTransactionExceptionCode(), String.format("Response[ %s ]", response.getMsg()));
|
||||
}
|
||||
} catch (TimeoutException toe) {
|
||||
throw new RmTransactionException(TransactionExceptionCode.IO, "RPC Timeout", toe);
|
||||
} catch (RuntimeException rex) {
|
||||
throw new RmTransactionException(TransactionExceptionCode.BranchReportFailed, "Runtime", rex);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean lockQuery(BranchType branchType, String resourceId, String xid, String lockKeys) throws TransactionException {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unregisterResource(Resource resource) {
|
||||
throw new NotSupportYetException("unregister a resource");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerResource(Resource resource) {
|
||||
RmNettyRemotingClient.getInstance().registerResource(resource.getResourceGroupId(), resource.getResourceId());
|
||||
}
|
||||
}
|
||||
102
rm/src/main/java/io/seata/rm/DefaultRMHandler.java
Normal file
102
rm/src/main/java/io/seata/rm/DefaultRMHandler.java
Normal file
@@ -0,0 +1,102 @@
|
||||
/*
|
||||
* Copyright 1999-2019 Seata.io Group.
|
||||
*
|
||||
* Licensed 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 io.seata.rm;
|
||||
|
||||
import io.seata.common.exception.FrameworkException;
|
||||
import io.seata.common.loader.EnhancedServiceLoader;
|
||||
import io.seata.common.util.CollectionUtils;
|
||||
import io.seata.core.context.RootContext;
|
||||
import io.seata.core.model.BranchType;
|
||||
import io.seata.core.model.ResourceManager;
|
||||
import io.seata.core.protocol.transaction.BranchCommitRequest;
|
||||
import io.seata.core.protocol.transaction.BranchCommitResponse;
|
||||
import io.seata.core.protocol.transaction.BranchRollbackRequest;
|
||||
import io.seata.core.protocol.transaction.BranchRollbackResponse;
|
||||
import io.seata.core.protocol.transaction.UndoLogDeleteRequest;
|
||||
import org.slf4j.MDC;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
/**
|
||||
* the default RM event handler implement, deal with the phase two events
|
||||
*
|
||||
* @author zhangsen
|
||||
*/
|
||||
public class DefaultRMHandler extends AbstractRMHandler {
|
||||
|
||||
protected static Map<BranchType, AbstractRMHandler> allRMHandlersMap = new ConcurrentHashMap<>();
|
||||
|
||||
protected DefaultRMHandler() {
|
||||
initRMHandlers();
|
||||
}
|
||||
|
||||
protected void initRMHandlers() {
|
||||
List<AbstractRMHandler> allRMHandlers = EnhancedServiceLoader.loadAll(AbstractRMHandler.class);
|
||||
if (CollectionUtils.isNotEmpty(allRMHandlers)) {
|
||||
for (AbstractRMHandler rmHandler : allRMHandlers) {
|
||||
allRMHandlersMap.put(rmHandler.getBranchType(), rmHandler);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public BranchCommitResponse handle(BranchCommitRequest request) {
|
||||
MDC.put(RootContext.MDC_KEY_XID, request.getXid());
|
||||
MDC.put(RootContext.MDC_KEY_BRANCH_ID, String.valueOf(request.getBranchId()));
|
||||
return getRMHandler(request.getBranchType()).handle(request);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BranchRollbackResponse handle(BranchRollbackRequest request) {
|
||||
MDC.put(RootContext.MDC_KEY_XID, request.getXid());
|
||||
MDC.put(RootContext.MDC_KEY_BRANCH_ID, String.valueOf(request.getBranchId()));
|
||||
return getRMHandler(request.getBranchType()).handle(request);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle(UndoLogDeleteRequest request) {
|
||||
getRMHandler(request.getBranchType()).handle(request);
|
||||
}
|
||||
|
||||
protected AbstractRMHandler getRMHandler(BranchType branchType) {
|
||||
return allRMHandlersMap.get(branchType);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ResourceManager getResourceManager() {
|
||||
throw new FrameworkException("DefaultRMHandler isn't a real AbstractRMHandler");
|
||||
}
|
||||
|
||||
private static class SingletonHolder {
|
||||
private static AbstractRMHandler INSTANCE = new DefaultRMHandler();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get resource manager.
|
||||
*
|
||||
* @return the resource manager
|
||||
*/
|
||||
public static AbstractRMHandler get() {
|
||||
return DefaultRMHandler.SingletonHolder.INSTANCE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BranchType getBranchType() {
|
||||
throw new FrameworkException("DefaultRMHandler isn't a real AbstractRMHandler");
|
||||
}
|
||||
}
|
||||
157
rm/src/main/java/io/seata/rm/DefaultResourceManager.java
Normal file
157
rm/src/main/java/io/seata/rm/DefaultResourceManager.java
Normal file
@@ -0,0 +1,157 @@
|
||||
/*
|
||||
* Copyright 1999-2019 Seata.io Group.
|
||||
*
|
||||
* Licensed 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 io.seata.rm;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import io.seata.common.exception.FrameworkException;
|
||||
import io.seata.common.loader.EnhancedServiceLoader;
|
||||
import io.seata.common.util.CollectionUtils;
|
||||
import io.seata.core.exception.TransactionException;
|
||||
import io.seata.core.model.BranchStatus;
|
||||
import io.seata.core.model.BranchType;
|
||||
import io.seata.core.model.Resource;
|
||||
import io.seata.core.model.ResourceManager;
|
||||
|
||||
/**
|
||||
* default resource manager, adapt all resource managers
|
||||
*
|
||||
* @author zhangsen
|
||||
*/
|
||||
public class DefaultResourceManager implements ResourceManager {
|
||||
|
||||
/**
|
||||
* all resource managers
|
||||
*/
|
||||
protected static Map<BranchType, ResourceManager> resourceManagers
|
||||
= new ConcurrentHashMap<>();
|
||||
|
||||
private DefaultResourceManager() {
|
||||
initResourceManagers();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get resource manager.
|
||||
*
|
||||
* @return the resource manager
|
||||
*/
|
||||
public static DefaultResourceManager get() {
|
||||
return SingletonHolder.INSTANCE;
|
||||
}
|
||||
|
||||
/**
|
||||
* only for mock
|
||||
*
|
||||
* @param branchType branchType
|
||||
* @param rm resource manager
|
||||
*/
|
||||
public static void mockResourceManager(BranchType branchType, ResourceManager rm) {
|
||||
resourceManagers.put(branchType, rm);
|
||||
}
|
||||
|
||||
protected void initResourceManagers() {
|
||||
//init all resource managers
|
||||
List<ResourceManager> allResourceManagers = EnhancedServiceLoader.loadAll(ResourceManager.class);
|
||||
if (CollectionUtils.isNotEmpty(allResourceManagers)) {
|
||||
for (ResourceManager rm : allResourceManagers) {
|
||||
resourceManagers.put(rm.getBranchType(), rm);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public BranchStatus branchCommit(BranchType branchType, String xid, long branchId,
|
||||
String resourceId, String applicationData)
|
||||
throws TransactionException {
|
||||
return getResourceManager(branchType).branchCommit(branchType, xid, branchId, resourceId, applicationData);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BranchStatus branchRollback(BranchType branchType, String xid, long branchId,
|
||||
String resourceId, String applicationData)
|
||||
throws TransactionException {
|
||||
return getResourceManager(branchType).branchRollback(branchType, xid, branchId, resourceId, applicationData);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long branchRegister(BranchType branchType, String resourceId,
|
||||
String clientId, String xid, String applicationData, String lockKeys)
|
||||
throws TransactionException {
|
||||
return getResourceManager(branchType).branchRegister(branchType, resourceId, clientId, xid, applicationData,
|
||||
lockKeys);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void branchReport(BranchType branchType, String xid, long branchId, BranchStatus status,
|
||||
String applicationData) throws TransactionException {
|
||||
getResourceManager(branchType).branchReport(branchType, xid, branchId, status, applicationData);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean lockQuery(BranchType branchType, String resourceId,
|
||||
String xid, String lockKeys) throws TransactionException {
|
||||
return getResourceManager(branchType).lockQuery(branchType, resourceId, xid, lockKeys);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerResource(Resource resource) {
|
||||
getResourceManager(resource.getBranchType()).registerResource(resource);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unregisterResource(Resource resource) {
|
||||
getResourceManager(resource.getBranchType()).unregisterResource(resource);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Resource> getManagedResources() {
|
||||
Map<String, Resource> allResource = new HashMap<>();
|
||||
for (ResourceManager rm : resourceManagers.values()) {
|
||||
Map<String, Resource> tempResources = rm.getManagedResources();
|
||||
if (tempResources != null) {
|
||||
allResource.putAll(tempResources);
|
||||
}
|
||||
}
|
||||
return allResource;
|
||||
}
|
||||
|
||||
/**
|
||||
* get ResourceManager by Resource Type
|
||||
*
|
||||
* @param branchType branch type
|
||||
* @return resource manager
|
||||
*/
|
||||
public ResourceManager getResourceManager(BranchType branchType) {
|
||||
ResourceManager rm = resourceManagers.get(branchType);
|
||||
if (rm == null) {
|
||||
throw new FrameworkException("No ResourceManager for BranchType:" + branchType.name());
|
||||
}
|
||||
return rm;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BranchType getBranchType() {
|
||||
throw new FrameworkException("DefaultResourceManager isn't a real ResourceManager");
|
||||
}
|
||||
|
||||
private static class SingletonHolder {
|
||||
private static DefaultResourceManager INSTANCE = new DefaultResourceManager();
|
||||
}
|
||||
|
||||
}
|
||||
40
rm/src/main/java/io/seata/rm/RMClient.java
Normal file
40
rm/src/main/java/io/seata/rm/RMClient.java
Normal file
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
* Copyright 1999-2019 Seata.io Group.
|
||||
*
|
||||
* Licensed 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 io.seata.rm;
|
||||
|
||||
import io.seata.core.rpc.netty.RmNettyRemotingClient;
|
||||
|
||||
/**
|
||||
* The Rm client Initiator.
|
||||
*
|
||||
* @author slievrly
|
||||
*/
|
||||
public class RMClient {
|
||||
|
||||
/**
|
||||
* Init.
|
||||
*
|
||||
* @param applicationId the application id
|
||||
* @param transactionServiceGroup the transaction service group
|
||||
*/
|
||||
public static void init(String applicationId, String transactionServiceGroup) {
|
||||
RmNettyRemotingClient rmNettyRemotingClient = RmNettyRemotingClient.getInstance(applicationId, transactionServiceGroup);
|
||||
rmNettyRemotingClient.setResourceManager(DefaultResourceManager.get());
|
||||
rmNettyRemotingClient.setTransactionMessageHandler(DefaultRMHandler.get());
|
||||
rmNettyRemotingClient.init();
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user