This is an automated email from the ASF dual-hosted git repository. ningjiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-saga.git
commit e38d1b769c6c40713a558f969a70ce4e01385839 Author: KomachiSion <263976...@qq.com> AuthorDate: Fri Aug 24 11:20:05 2018 +0800 SCB-867 Add SQL type Jackson format --- ...agaRequest.java => JacksonSQLCompensation.java} | 48 ++++++++------- ...onSagaRequest.java => JacksonSQLOperation.java} | 43 ++++++++------ ...SagaRequest.java => JacksonSQLTransaction.java} | 29 ++++----- .../saga/format/JsonSQLSagaRequest.java | 69 ++++++++++++++++++++++ .../servicecomb/saga/format/JsonSagaRequest.java | 3 +- 5 files changed, 137 insertions(+), 55 deletions(-) diff --git a/saga-format/src/main/java/org/apache/servicecomb/saga/format/JsonSagaRequest.java b/saga-format/src/main/java/org/apache/servicecomb/saga/format/JacksonSQLCompensation.java similarity index 53% copy from saga-format/src/main/java/org/apache/servicecomb/saga/format/JsonSagaRequest.java copy to saga-format/src/main/java/org/apache/servicecomb/saga/format/JacksonSQLCompensation.java index a25542f..6a61bf3 100644 --- a/saga-format/src/main/java/org/apache/servicecomb/saga/format/JsonSagaRequest.java +++ b/saga-format/src/main/java/org/apache/servicecomb/saga/format/JacksonSQLCompensation.java @@ -17,24 +17,32 @@ package org.apache.servicecomb.saga.format; -import org.apache.servicecomb.saga.core.Operation; -import org.apache.servicecomb.saga.core.SagaRequest; -import org.apache.servicecomb.saga.core.Transport; -import org.apache.servicecomb.saga.transports.TransportFactory; - -import com.fasterxml.jackson.annotation.JsonSubTypes; -import com.fasterxml.jackson.annotation.JsonSubTypes.Type; -import com.fasterxml.jackson.annotation.JsonTypeInfo; - -@JsonTypeInfo( - use = JsonTypeInfo.Id.NAME, - include = JsonTypeInfo.As.PROPERTY, - visible = true, - property = "type") -@JsonSubTypes({ - @Type(value = JsonRestSagaRequest.class, name = Operation.TYPE_REST) -}) -public interface JsonSagaRequest<T extends Transport> extends SagaRequest { - - JsonSagaRequest with(TransportFactory transportFactory); +import java.util.List; + +import org.apache.servicecomb.saga.core.Compensation; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; + +public class JacksonSQLCompensation extends JacksonSQLOperation implements Compensation { + + private final int retries; + + public JacksonSQLCompensation(String sql, List<String> params) { + this(sql, params, DEFAULT_RETRIES); + } + + @JsonCreator + public JacksonSQLCompensation( + @JsonProperty("sql") String sql, + @JsonProperty("params") List<String> params, + @JsonProperty("retries") int retries) { + super(sql, params); + this.retries = retries <= 0? DEFAULT_RETRIES : retries; + } + + @Override + public int retries() { + return this.retries; + } } diff --git a/saga-format/src/main/java/org/apache/servicecomb/saga/format/JsonSagaRequest.java b/saga-format/src/main/java/org/apache/servicecomb/saga/format/JacksonSQLOperation.java similarity index 56% copy from saga-format/src/main/java/org/apache/servicecomb/saga/format/JsonSagaRequest.java copy to saga-format/src/main/java/org/apache/servicecomb/saga/format/JacksonSQLOperation.java index a25542f..500bdfd 100644 --- a/saga-format/src/main/java/org/apache/servicecomb/saga/format/JsonSagaRequest.java +++ b/saga-format/src/main/java/org/apache/servicecomb/saga/format/JacksonSQLOperation.java @@ -17,24 +17,33 @@ package org.apache.servicecomb.saga.format; +import java.util.List; + import org.apache.servicecomb.saga.core.Operation; -import org.apache.servicecomb.saga.core.SagaRequest; -import org.apache.servicecomb.saga.core.Transport; +import org.apache.servicecomb.saga.core.SQLOperation; +import org.apache.servicecomb.saga.core.SagaResponse; +import org.apache.servicecomb.saga.transports.SQLTransport; import org.apache.servicecomb.saga.transports.TransportFactory; -import com.fasterxml.jackson.annotation.JsonSubTypes; -import com.fasterxml.jackson.annotation.JsonSubTypes.Type; -import com.fasterxml.jackson.annotation.JsonTypeInfo; - -@JsonTypeInfo( - use = JsonTypeInfo.Id.NAME, - include = JsonTypeInfo.As.PROPERTY, - visible = true, - property = "type") -@JsonSubTypes({ - @Type(value = JsonRestSagaRequest.class, name = Operation.TYPE_REST) -}) -public interface JsonSagaRequest<T extends Transport> extends SagaRequest { - - JsonSagaRequest with(TransportFactory transportFactory); +import com.fasterxml.jackson.annotation.JsonIgnore; + +public class JacksonSQLOperation extends SQLOperation implements TransportAware<SQLTransport> { + + @JsonIgnore + private SQLTransport transport; + + public JacksonSQLOperation(String sql, List<String> params) { + super(sql, params); + } + + @Override + public Operation with(TransportFactory<SQLTransport> transport) { + this.transport = transport.getTransport(); + return this; + } + + @Override + public SagaResponse send(String datasource) { + return transport.with(datasource, sql(), params()); + } } diff --git a/saga-format/src/main/java/org/apache/servicecomb/saga/format/JsonSagaRequest.java b/saga-format/src/main/java/org/apache/servicecomb/saga/format/JacksonSQLTransaction.java similarity index 53% copy from saga-format/src/main/java/org/apache/servicecomb/saga/format/JsonSagaRequest.java copy to saga-format/src/main/java/org/apache/servicecomb/saga/format/JacksonSQLTransaction.java index a25542f..e85c036 100644 --- a/saga-format/src/main/java/org/apache/servicecomb/saga/format/JsonSagaRequest.java +++ b/saga-format/src/main/java/org/apache/servicecomb/saga/format/JacksonSQLTransaction.java @@ -17,24 +17,19 @@ package org.apache.servicecomb.saga.format; -import org.apache.servicecomb.saga.core.Operation; -import org.apache.servicecomb.saga.core.SagaRequest; -import org.apache.servicecomb.saga.core.Transport; -import org.apache.servicecomb.saga.transports.TransportFactory; +import java.util.List; -import com.fasterxml.jackson.annotation.JsonSubTypes; -import com.fasterxml.jackson.annotation.JsonSubTypes.Type; -import com.fasterxml.jackson.annotation.JsonTypeInfo; +import org.apache.servicecomb.saga.core.Transaction; -@JsonTypeInfo( - use = JsonTypeInfo.Id.NAME, - include = JsonTypeInfo.As.PROPERTY, - visible = true, - property = "type") -@JsonSubTypes({ - @Type(value = JsonRestSagaRequest.class, name = Operation.TYPE_REST) -}) -public interface JsonSagaRequest<T extends Transport> extends SagaRequest { +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; - JsonSagaRequest with(TransportFactory transportFactory); +public class JacksonSQLTransaction extends JacksonSQLOperation implements Transaction { + + @JsonCreator + public JacksonSQLTransaction( + @JsonProperty("sql") String sql, + @JsonProperty("params") List<String> params) { + super(sql, params); + } } diff --git a/saga-format/src/main/java/org/apache/servicecomb/saga/format/JsonSQLSagaRequest.java b/saga-format/src/main/java/org/apache/servicecomb/saga/format/JsonSQLSagaRequest.java new file mode 100644 index 0000000..e1d9599 --- /dev/null +++ b/saga-format/src/main/java/org/apache/servicecomb/saga/format/JsonSQLSagaRequest.java @@ -0,0 +1,69 @@ +/* + * 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 org.apache.servicecomb.saga.format; + +import static org.apache.servicecomb.saga.format.JacksonFallback.NOP_TRANSPORT_AWARE_FALLBACK; + +import org.apache.servicecomb.saga.core.Fallback; +import org.apache.servicecomb.saga.core.Operation; +import org.apache.servicecomb.saga.core.SagaRequestImpl; +import org.apache.servicecomb.saga.transports.SQLTransport; +import org.apache.servicecomb.saga.transports.TransportFactory; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; + +public class JsonSQLSagaRequest extends SagaRequestImpl implements JsonSagaRequest<SQLTransport> { + + private JacksonSQLTransaction transaction; + private JacksonSQLCompensation compensation; + + @JsonCreator + public JsonSQLSagaRequest( + @JsonProperty("id") String id, + @JsonProperty("datasource") String datasource, + @JsonProperty("type") String type, + @JsonProperty("transaction") JacksonSQLTransaction transaction, + @JsonProperty("compensation") JacksonSQLCompensation compensation, + @JsonProperty("fallback") Fallback fallback, + @JsonProperty("parents") String[] parents, + @JsonProperty("failRetryDelayMilliseconds") int failRetryDelayMilliseconds) { + super(id, datasource, type, transaction, compensation, + fallback == null ? NOP_TRANSPORT_AWARE_FALLBACK : fallback, + parents, failRetryDelayMilliseconds); + + checkNull(transaction, "transaction"); + checkNull(compensation, "compensation"); + + this.transaction = transaction; + this.compensation = compensation; + } + + @Override + public JsonSagaRequest with(TransportFactory transportFactory) { + transaction.with(transportFactory); + compensation.with(transportFactory); + return this; + } + + private void checkNull(Operation operation, String operationName) { + if (operation == null) { + throw new IllegalArgumentException("Invalid request with NO " + operationName + " specified"); + } + } +} diff --git a/saga-format/src/main/java/org/apache/servicecomb/saga/format/JsonSagaRequest.java b/saga-format/src/main/java/org/apache/servicecomb/saga/format/JsonSagaRequest.java index a25542f..ed6c6ce 100644 --- a/saga-format/src/main/java/org/apache/servicecomb/saga/format/JsonSagaRequest.java +++ b/saga-format/src/main/java/org/apache/servicecomb/saga/format/JsonSagaRequest.java @@ -32,7 +32,8 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo; visible = true, property = "type") @JsonSubTypes({ - @Type(value = JsonRestSagaRequest.class, name = Operation.TYPE_REST) + @Type(value = JsonRestSagaRequest.class, name = Operation.TYPE_REST), + @Type(value = JsonSQLSagaRequest.class, name = Operation.TYPE_SQL) }) public interface JsonSagaRequest<T extends Transport> extends SagaRequest {