You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by ni...@apache.org on 2018/01/02 15:24:52 UTC

[incubator-servicecomb-saga] 01/02: SCB-154 Update the package to org.apache.servicecomb

This is an automated email from the ASF dual-hosted git repository.

ningjiang pushed a commit to branch SCB-154
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-saga.git

commit d3b7ac7f5a17b340ec3f53a193354f701e262601
Author: Willem Jiang <ji...@huawei.com>
AuthorDate: Tue Jan 2 23:12:27 2018 +0800

    SCB-154 Update the package to org.apache.servicecomb
---
 .../saga/alpha/core/AlphaException.java            |   2 +-
 .../saga/alpha/core/CompositeOmegaCallback.java    |   2 +-
 .../servicecomb/saga/alpha/core/EventType.java     |   2 +-
 .../servicecomb/saga/alpha/core/OmegaCallback.java |   2 +-
 .../saga/alpha/core/PendingTaskRunner.java         |   2 +-
 .../saga/alpha/core/PushBackOmegaCallback.java     |   2 +-
 .../saga/alpha/core/TxConsistentService.java       |  11 +-
 .../servicecomb/saga/alpha/core/TxEvent.java       |   2 +-
 .../saga/alpha/core/TxEventRepository.java         |   2 +-
 .../alpha/core/CompositeOmegaCallbackTest.java     |   9 +-
 .../saga/alpha/core/PendingTaskRunnerTest.java     |   2 +-
 .../saga/alpha/core/PushBackOmegaCallbackTest.java |   4 +-
 .../saga/alpha/core/TxConsistentServiceTest.java   |  28 +-
 .../servicecomb/saga/alpha/core/TxEventMaker.java  |   2 +-
 .../saga/alpha/server/AlphaApplication.java        |   2 +-
 .../servicecomb/saga/alpha/server/AlphaConfig.java |  14 +-
 .../saga/alpha/server/GrpcStartable.java           |   2 +-
 .../saga/alpha/server/GrpcTxEventEndpointImpl.java |  12 +-
 .../saga/alpha/server/ServerStartable.java         |   2 +-
 .../saga/alpha/server/SpringTxEventRepository.java |   6 +-
 .../saga/alpha/server/TxEventEnvelope.java         |   4 +-
 .../alpha/server/TxEventEnvelopeRepository.java    |   4 +-
 .../saga/alpha/server/AlphaIntegrationTest.java    |  37 +--
 .../pack/tests/GreetingApplication.java            |   5 +-
 .../integration/pack/tests/GreetingController.java |   2 +-
 .../integration/pack/tests/GreetingService.java    |   4 +-
 .../saga/integration/pack/tests/PackIT.java        |   8 +-
 .../integration/pack/tests/TxEventEnvelope.java    |   2 +-
 .../pack/tests/TxEventEnvelopeRepository.java      |   2 +-
 .../connector/grpc/GrpcClientMessageSender.java    |  20 +-
 .../saga/omega/context/IdGenerator.java            |   2 +-
 .../saga/omega/context/OmegaContext.java           |   2 +-
 .../saga/omega/context/ServiceConfig.java          |   2 +-
 .../saga/omega/context/UniqueIdGenerator.java      |   2 +-
 .../saga/omega/context/OmegaContextTest.java       |   2 +-
 .../saga/omega/format/NativeMessageFormat.java     |  10 +-
 .../saga/omega/format/NativeMessageFormatTest.java |   9 +-
 .../servicecomb/saga/omega/spring/EnableOmega.java |   4 +-
 .../saga/omega/spring/OmegaSpringConfig.java       |  17 +-
 .../spring/CompensableAnnotationProcessor.java     |   5 +-
 .../spring/CompensableMethodCheckingCallback.java  |   8 +-
 .../spring/TransactionAspectConfig.java            |  13 +-
 .../spring/CompensableAnnotationCheckingTest.java  |   2 +-
 .../transaction/spring/MisconfiguredService.java   |   5 +-
 .../spring/TransactionInterceptionTest.java        |  22 +-
 .../transaction/spring/TransactionTestMain.java    |   2 +-
 .../spring/TransactionalUserService.java           |   4 +-
 .../saga/omega/transaction/spring/User.java        |   2 +-
 .../omega/transaction/spring/UserRepository.java   |   2 +-
 .../transaction/CompensationMessageHandler.java    |   4 +-
 .../transaction/FailedTransactionInterceptor.java  |   2 +-
 .../omega/transaction/MessageDeserializer.java     |   2 +-
 .../saga/omega/transaction/MessageHandler.java     |   2 +-
 .../saga/omega/transaction/MessageSender.java      |   2 +-
 .../saga/omega/transaction/MessageSerializer.java  |   2 +-
 .../saga/omega/transaction/OmegaException.java     |   2 +-
 .../transaction/PostTransactionInterceptor.java    |   2 +-
 .../transaction/PreTransactionInterceptor.java     |   2 +-
 .../saga/omega/transaction/TransactionAspect.java  |   8 +-
 .../saga/omega/transaction/TxAbortedEvent.java     |   2 +-
 .../saga/omega/transaction/TxCompensatedEvent.java |   2 +-
 .../saga/omega/transaction/TxEndedEvent.java       |   2 +-
 .../saga/omega/transaction/TxEvent.java            |   2 +-
 .../saga/omega/transaction/TxStartedEvent.java     |   2 +-
 .../omega/transaction/annotations/Compensable.java |   2 +-
 .../CompensationMessageHandlerTest.java            |   5 +-
 .../PostTransactionInterceptorTest.java            |   2 +-
 .../transaction/PreTransactionInterceptorTest.java |   2 +-
 .../transport/resttemplate/RestTemplateConfig.java |   4 +-
 .../TransactionClientHttpRequestInterceptor.java   |  12 +-
 .../TransactionHandlerInterceptor.java             |  14 +-
 .../omega/transport/resttemplate/WebConfig.java    |   5 +-
 .../src/main/resources/META-INF/spring.factories   |   4 +-
 ...ransactionClientHttpRequestInterceptorTest.java |  19 +-
 .../TransactionHandlerInterceptorTest.java         |  17 +-
 .../resttemplate/UniqueIdGeneratorTest.java        |   7 +-
 .../src/main/proto/GrpcTxEvent.proto               |   2 +-
 .../servicecomb/saga/core/BackwardRecovery.java    |   2 +-
 .../servicecomb/saga/core/Compensation.java        |   2 +-
 .../saga/core/CompensationTaskConsumer.java        |   5 +-
 .../servicecomb/saga/core/CompositeSagaLog.java    |   2 +-
 .../saga/core/CompositeSagaResponse.java           |   2 +-
 .../apache}/servicecomb/saga/core/Descriptive.java |   2 +-
 .../servicecomb/saga/core/EventContext.java        |   2 +-
 .../servicecomb/saga/core/EventEnvelope.java       |   2 +-
 .../apache}/servicecomb/saga/core/EventStore.java  |   2 +-
 .../servicecomb/saga/core/FailedSagaResponse.java  |   2 +-
 .../apache}/servicecomb/saga/core/Fallback.java    |   2 +-
 .../servicecomb/saga/core/FallbackPolicy.java      |   2 +-
 .../servicecomb/saga/core/ForwardRecovery.java     |   2 +-
 .../servicecomb/saga/core/GraphBasedSaga.java      |  12 +-
 .../apache}/servicecomb/saga/core/IdGenerator.java |   2 +-
 .../saga/core/LoggingRecoveryPolicy.java           |   2 +-
 .../servicecomb/saga/core/LongIdGenerator.java     |   2 +-
 .../servicecomb/saga/core/NoOpSagaRequest.java     |  18 +-
 .../apache}/servicecomb/saga/core/Operation.java   |   2 +-
 .../servicecomb/saga/core/PersistentLog.java       |   2 +-
 .../servicecomb/saga/core/PersistentStore.java     |   2 +-
 .../servicecomb/saga/core/RecoveryPolicy.java      |   2 +-
 .../servicecomb/saga/core/RequestProcessTask.java  |   2 +-
 .../servicecomb/saga/core/RestOperation.java       |   4 +-
 .../apache}/servicecomb/saga/core/Saga.java        |   2 +-
 .../apache}/servicecomb/saga/core/SagaContext.java |   2 +-
 .../servicecomb/saga/core/SagaContextImpl.java     |  11 +-
 .../servicecomb/saga/core/SagaDefinition.java      |   2 +-
 .../apache}/servicecomb/saga/core/SagaEndTask.java |   6 +-
 .../servicecomb/saga/core/SagaEndedEvent.java      |   2 +-
 .../apache}/servicecomb/saga/core/SagaEvent.java   |   2 +-
 .../servicecomb/saga/core/SagaException.java       |   2 +-
 .../apache}/servicecomb/saga/core/SagaLog.java     |   2 +-
 .../apache}/servicecomb/saga/core/SagaRequest.java |   4 +-
 .../servicecomb/saga/core/SagaRequestImpl.java     |   7 +-
 .../servicecomb/saga/core/SagaResponse.java        |   2 +-
 .../saga/core/SagaStartFailedException.java        |   2 +-
 .../servicecomb/saga/core/SagaStartTask.java       |   6 +-
 .../servicecomb/saga/core/SagaStartedEvent.java    |   2 +-
 .../apache}/servicecomb/saga/core/SagaState.java   |   2 +-
 .../apache}/servicecomb/saga/core/SagaTask.java    |   2 +-
 .../servicecomb/saga/core/SagaTaskFactory.java     |  12 +-
 .../saga/core/SuccessfulSagaResponse.java          |   2 +-
 .../servicecomb/saga/core/TaskConsumer.java        |   4 +-
 .../apache}/servicecomb/saga/core/TaskRunner.java  |   6 +-
 .../servicecomb/saga/core/ToJsonFormat.java        |   2 +-
 .../apache}/servicecomb/saga/core/Transaction.java |   2 +-
 .../saga/core/TransactionAbortedEvent.java         |   2 +-
 .../saga/core/TransactionCompensatedEvent.java     |   2 +-
 .../saga/core/TransactionEndedEvent.java           |   2 +-
 .../saga/core/TransactionFailedException.java      |   2 +-
 .../saga/core/TransactionStartedEvent.java         |   2 +-
 .../saga/core/TransactionTaskConsumer.java         |   5 +-
 .../apache}/servicecomb/saga/core/Transport.java   |   2 +-
 .../saga/core/TransportFailedException.java        |   2 +-
 .../saga/core/actors/ActorBasedSaga.java           |  21 +-
 .../saga/core/actors/ActorBasedSagaFactory.java    |  20 +-
 .../saga/core/actors/CompletionCallbackActor.java  |  17 +-
 .../saga/core/actors/EventContextImpl.java         |  16 +-
 .../servicecomb/saga/core/actors/RequestActor.java |  38 +--
 .../saga/core/actors/RequestActorBuilder.java      |  30 +-
 .../saga/core/actors/RequestActorContext.java      |   8 +-
 .../saga/core/actors/messages/AbortMessage.java    |   6 +-
 .../core/actors/messages/AbortRecoveryMessage.java |   4 +-
 .../core/actors/messages/CompensateMessage.java    |   4 +-
 .../messages/CompensationRecoveryMessage.java      |   2 +-
 .../saga/core/actors/messages/FailMessage.java     |   6 +-
 .../saga/core/actors/messages/Message.java         |   2 +-
 .../saga/core/actors/messages/TransactMessage.java |   6 +-
 .../messages/TransactionRecoveryMessage.java       |   4 +-
 .../core/application/SagaExecutionComponent.java   |  22 +-
 .../saga/core/application/SagaFactory.java         |   8 +-
 .../application/interpreter/FromJsonFormat.java    |   2 +-
 .../interpreter/RestRequestChecker.java            |   2 +-
 .../saga/core/dag/ByLevelTraveller.java            |   2 +-
 .../saga/core/dag/FromLeafTraversalDirection.java  |   2 +-
 .../saga/core/dag/FromRootTraversalDirection.java  |   2 +-
 .../saga/core/dag/GraphBasedSagaFactory.java       |  24 +-
 .../servicecomb/saga/core/dag/GraphBuilder.java    |   9 +-
 .../saga/core/dag/GraphCycleDetector.java          |   2 +-
 .../saga/core/dag/GraphCycleDetectorImpl.java      |   2 +-
 .../apache}/servicecomb/saga/core/dag/Node.java    |   2 +-
 .../core/dag/SingleLeafDirectedAcyclicGraph.java   |   2 +-
 .../servicecomb/saga/core/dag/Traveller.java       |   2 +-
 .../saga/core/dag/TraversalDirection.java          |   2 +-
 .../infrastructure/ContextAwareEventStore.java     |  10 +-
 .../saga/infrastructure/EmbeddedEventStore.java    |   9 +-
 .../servicecomb/saga/transports/RestTransport.java |   6 +-
 .../saga/transports/TransportFactory.java          |   2 +-
 .../saga/core/BackwardRecoveryTest.java            |   2 +-
 .../servicecomb/saga/core/CompensationImpl.java    |   2 +-
 .../saga/core/CompositeSagaLogTest.java            |   2 +-
 .../saga/core/CompositeSagaResponseTest.java       |   2 +-
 .../apache}/servicecomb/saga/core/DummyEvent.java  |   2 +-
 .../servicecomb/saga/core/FallbackPolicyTest.java  |   2 +-
 .../servicecomb/saga/core/ForwardRecoveryTest.java |   2 +-
 .../servicecomb/saga/core/LongIdGeneratorTest.java |   2 +-
 .../servicecomb/saga/core/RestOperationTest.java   |   2 +-
 .../servicecomb/saga/core/RetrySagaLogTest.java    |   4 +-
 .../servicecomb/saga/core/SagaEndTaskTest.java     |   2 +-
 .../servicecomb/saga/core/SagaEventMatcher.java    |   2 +-
 .../saga/core/SagaExecutionComponentTestBase.java  |  44 ++-
 .../servicecomb/saga/core/SagaIntegrationTest.java |  50 ++-
 .../servicecomb/saga/core/SagaStartTaskTest.java   |   2 +-
 .../servicecomb/saga/core/TransactionImpl.java     |   2 +-
 .../ActorBasedSagaExecutionComponentTest.java      |   8 +-
 .../core/actors/ActorBasedSagaIntegrationTest.java | 361 +++++++++++----------
 .../core/actors/CompletionCallbackActorTest.java   |  18 +-
 .../saga/core/actors/EventContextImplTest.java     |  12 +-
 .../saga/core/actors/RequestActorBuilderTest.java  |  60 ++--
 .../saga/core/actors/RequestActorTest.java         |  77 +++--
 .../dag/DirectedAcyclicGraphTraversalTest.java     |   2 +-
 .../dag/GraphBasedSagaExecutionComponentTest.java  |   8 +-
 .../saga/core/dag/GraphBuilderTest.java            |  22 +-
 .../saga/core/dag/GraphCycleDetectorTest.java      |   2 +-
 .../servicecomb/saga/core/dag/NodeTest.java        |   2 +-
 .../infrastructure/ContextAwareEventStoreTest.java |   8 +-
 .../saga/demo/tests/ConditionalTransactionIT.java  |   2 +-
 .../inventory/InventoryApplication.java            |   2 +-
 .../transaction/inventory/InventoryController.java |   2 +-
 .../inventory/InventoryControllerTest.java         |   2 +-
 .../membership/MembershipApplication.java          |   2 +-
 .../membership/MembershipController.java           |   2 +-
 .../transaction/payment/PaymentApplication.java    |   2 +-
 .../transaction/payment/PaymentController.java     |   2 +-
 .../transaction/payment/PaymentControllerTest.java |   2 +-
 .../transaction/supplier/SupplierApplication.java  |   2 +-
 .../transaction/supplier/SupplierController.java   |   2 +-
 .../saga/demo/car/rental/CarRentalApplication.java |   2 +-
 .../saga/demo/car/rental/CarRentalController.java  |   2 +-
 .../servicecomb/saga/demo/tests/DemoIT.java        |   2 +-
 .../flight/booking/FlightBookingApplication.java   |   2 +-
 .../flight/booking/FlightBookingController.java    |   2 +-
 .../reservation/HotelReservationApplication.java   |   2 +-
 .../reservation/HotelReservationController.java    |   2 +-
 .../saga/demo/payment/PaymentApplication.java      |   2 +-
 .../saga/demo/payment/PaymentController.java       |   2 +-
 .../center/ServiceCenterDiscoveryConfig.java       |   8 +-
 .../src/main/resources/META-INF/spring.factories   |   2 +-
 .../discovery/service/center/DummyController.java  |   2 +-
 .../center/ServiceCenterDiscoveryApplication.java  |   2 +-
 .../ServiceCenterDiscoveryRestTransportTest.java   |  14 +-
 .../saga/core/FailedSagaRequestContext.java        |   8 +-
 .../servicecomb/saga/core/JacksonToJsonFormat.java |   2 +-
 .../servicecomb/saga/core/SagaRequestContext.java  |   2 +-
 .../saga/core/SuccessfulSagaRequestContext.java    |   6 +-
 .../servicecomb/saga/format/ChildrenExtractor.java |   7 +-
 .../servicecomb/saga/format/JacksonFallback.java   |  16 +-
 .../saga/format/JacksonFromJsonFormat.java         |  12 +-
 .../saga/format/JacksonRestCompensation.java       |   4 +-
 .../saga/format/JacksonRestFallback.java           |   2 +-
 .../saga/format/JacksonRestOperation.java          |  11 +-
 .../saga/format/JacksonRestTransaction.java        |   4 +-
 .../saga/format/JacksonSagaEventFormat.java        |  33 +-
 .../saga/format/JsonFailedSagaResponse.java        |   4 +-
 .../saga/format/JsonRestSagaRequest.java           |  11 +-
 .../saga/format/JsonSagaDefinition.java            |  18 +-
 .../servicecomb/saga/format/JsonSagaRequest.java   |  11 +-
 .../saga/format/JsonSuccessfulSagaResponse.java    |   4 +-
 .../servicecomb/saga/format/SagaEventFormat.java   |   4 +-
 .../servicecomb/saga/format/TransportAware.java    |   6 +-
 .../saga/format/ChildrenExtractorTest.java         |   8 +-
 .../saga/format/JacksonFromJsonFormatTest.java     |  27 +-
 .../saga/format/JacksonRestOperationTest.java      |  20 +-
 .../saga/format/JsonRestSagaRequestTest.java       |  10 +-
 .../saga/format/JsonSagaDefinitionTest.java        |   5 +-
 .../saga/format/SagaEventFormatTest.java           |  36 +-
 .../saga/spring/JpaPersistentStore.java            |  13 +-
 .../servicecomb/saga/spring/SagaController.java    |   8 +-
 .../servicecomb/saga/spring/SagaEventEntity.java   |   2 +-
 .../servicecomb/saga/spring/SagaEventRepo.java     |   2 +-
 .../saga/spring/SagaExecutionQueryService.java     |  31 +-
 .../saga/spring/SagaRecoveryListener.java          |   5 +-
 .../saga/spring/SagaShutdownListener.java          |   4 +-
 .../saga/spring/SagaSpringApplication.java         |   2 +-
 .../servicecomb/saga/spring/SagaSpringConfig.java  |  32 +-
 saga-spring/src/main/resources/META-INF/aop.xml    |   2 +-
 .../src/main/resources/META-INF/spring.factories   |   4 +-
 .../ActorBasedSagaSpringApplicationTest.java       |   2 +-
 .../GraphBasedSagaSpringApplicationTest.java       |   2 +-
 .../saga/spring/GreetingController.java            |   2 +-
 .../servicecomb/saga/spring/SagaRecoveryTest.java  |  40 +--
 .../saga/spring/SagaServiceDiscoveryTest.java      |   4 +-
 .../saga/spring/SagaSpringApplicationTestBase.java |   6 +-
 .../servicecomb/saga/web/SagaWebApplication.java   |   2 +-
 .../saga/transports/HttpClientTransportConfig.java |   5 +-
 .../src/main/resources/META-INF/spring.factories   |   2 +-
 .../saga/transports/RestTransportTest.java         |   6 +-
 .../transports/httpclient/HttpClientTransport.java |  10 +-
 .../httpclient/HttpClientTransportTest.java        |   8 +-
 .../resttemplate/RestTemplateTransport.java        |  25 +-
 268 files changed, 1069 insertions(+), 1119 deletions(-)

diff --git a/alpha/alpha-core/src/main/java/io/servicecomb/saga/alpha/core/AlphaException.java b/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/AlphaException.java
similarity index 95%
rename from alpha/alpha-core/src/main/java/io/servicecomb/saga/alpha/core/AlphaException.java
rename to alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/AlphaException.java
index a5eb3c4..a7bb756 100644
--- a/alpha/alpha-core/src/main/java/io/servicecomb/saga/alpha/core/AlphaException.java
+++ b/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/AlphaException.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.alpha.core;
+package org.apache.servicecomb.saga.alpha.core;
 
 public class AlphaException extends RuntimeException {
   public AlphaException(String cause) {
diff --git a/alpha/alpha-core/src/main/java/io/servicecomb/saga/alpha/core/CompositeOmegaCallback.java b/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/CompositeOmegaCallback.java
similarity index 97%
rename from alpha/alpha-core/src/main/java/io/servicecomb/saga/alpha/core/CompositeOmegaCallback.java
rename to alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/CompositeOmegaCallback.java
index e5c4b12..86f5839 100644
--- a/alpha/alpha-core/src/main/java/io/servicecomb/saga/alpha/core/CompositeOmegaCallback.java
+++ b/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/CompositeOmegaCallback.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.alpha.core;
+package org.apache.servicecomb.saga.alpha.core;
 
 import java.util.Map;
 
diff --git a/alpha/alpha-core/src/main/java/io/servicecomb/saga/alpha/core/EventType.java b/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/EventType.java
similarity index 95%
rename from alpha/alpha-core/src/main/java/io/servicecomb/saga/alpha/core/EventType.java
rename to alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/EventType.java
index dee34a6..3406294 100644
--- a/alpha/alpha-core/src/main/java/io/servicecomb/saga/alpha/core/EventType.java
+++ b/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/EventType.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.alpha.core;
+package org.apache.servicecomb.saga.alpha.core;
 
 public enum EventType {
   SagaStartedEvent,
diff --git a/alpha/alpha-core/src/main/java/io/servicecomb/saga/alpha/core/OmegaCallback.java b/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/OmegaCallback.java
similarity index 94%
rename from alpha/alpha-core/src/main/java/io/servicecomb/saga/alpha/core/OmegaCallback.java
rename to alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/OmegaCallback.java
index 166994d..bc51238 100644
--- a/alpha/alpha-core/src/main/java/io/servicecomb/saga/alpha/core/OmegaCallback.java
+++ b/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/OmegaCallback.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.alpha.core;
+package org.apache.servicecomb.saga.alpha.core;
 
 public interface OmegaCallback {
   void compensate(TxEvent event);
diff --git a/alpha/alpha-core/src/main/java/io/servicecomb/saga/alpha/core/PendingTaskRunner.java b/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/PendingTaskRunner.java
similarity index 97%
rename from alpha/alpha-core/src/main/java/io/servicecomb/saga/alpha/core/PendingTaskRunner.java
rename to alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/PendingTaskRunner.java
index c9a06fa..aafa42f 100644
--- a/alpha/alpha-core/src/main/java/io/servicecomb/saga/alpha/core/PendingTaskRunner.java
+++ b/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/PendingTaskRunner.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.alpha.core;
+package org.apache.servicecomb.saga.alpha.core;
 
 import static java.util.concurrent.TimeUnit.MILLISECONDS;
 
diff --git a/alpha/alpha-core/src/main/java/io/servicecomb/saga/alpha/core/PushBackOmegaCallback.java b/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/PushBackOmegaCallback.java
similarity index 97%
rename from alpha/alpha-core/src/main/java/io/servicecomb/saga/alpha/core/PushBackOmegaCallback.java
rename to alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/PushBackOmegaCallback.java
index 8403af0..3b27c14 100644
--- a/alpha/alpha-core/src/main/java/io/servicecomb/saga/alpha/core/PushBackOmegaCallback.java
+++ b/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/PushBackOmegaCallback.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.alpha.core;
+package org.apache.servicecomb.saga.alpha.core;
 
 import java.lang.invoke.MethodHandles;
 import java.util.concurrent.BlockingQueue;
diff --git a/alpha/alpha-core/src/main/java/io/servicecomb/saga/alpha/core/TxConsistentService.java b/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/TxConsistentService.java
similarity index 84%
rename from alpha/alpha-core/src/main/java/io/servicecomb/saga/alpha/core/TxConsistentService.java
rename to alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/TxConsistentService.java
index 6fd9193..7e7839f 100644
--- a/alpha/alpha-core/src/main/java/io/servicecomb/saga/alpha/core/TxConsistentService.java
+++ b/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/TxConsistentService.java
@@ -15,10 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.alpha.core;
-
-import static io.servicecomb.saga.alpha.core.EventType.TxAbortedEvent;
-import static io.servicecomb.saga.alpha.core.EventType.TxStartedEvent;
+package org.apache.servicecomb.saga.alpha.core;
 
 import java.util.HashMap;
 import java.util.List;
@@ -32,8 +29,8 @@ public class TxConsistentService {
   private final TxEventRepository eventRepository;
   private final OmegaCallback omegaCallback;
   private final Map<String, Consumer<TxEvent>> eventCallbacks = new HashMap<String, Consumer<TxEvent>>() {{
-    put(TxStartedEvent.name(), DO_NOTHING_CONSUMER);
-    put(TxAbortedEvent.name(), (event) -> compensate(event));
+    put(EventType.TxStartedEvent.name(), DO_NOTHING_CONSUMER);
+    put(EventType.TxAbortedEvent.name(), (event) -> compensate(event));
   }};
 
   public TxConsistentService(TxEventRepository eventRepository, OmegaCallback omegaCallback) {
@@ -47,7 +44,7 @@ public class TxConsistentService {
   }
 
   private void compensate(TxEvent event) {
-    List<TxEvent> events = eventRepository.findStartedTransactions(event.globalTxId(), TxStartedEvent.name());
+    List<TxEvent> events = eventRepository.findStartedTransactions(event.globalTxId(), EventType.TxStartedEvent.name());
     events.forEach(omegaCallback::compensate);
   }
 }
diff --git a/alpha/alpha-core/src/main/java/io/servicecomb/saga/alpha/core/TxEvent.java b/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/TxEvent.java
similarity index 97%
rename from alpha/alpha-core/src/main/java/io/servicecomb/saga/alpha/core/TxEvent.java
rename to alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/TxEvent.java
index 6781cb5..9a2cea4 100644
--- a/alpha/alpha-core/src/main/java/io/servicecomb/saga/alpha/core/TxEvent.java
+++ b/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/TxEvent.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.alpha.core;
+package org.apache.servicecomb.saga.alpha.core;
 
 import java.util.Date;
 
diff --git a/alpha/alpha-core/src/main/java/io/servicecomb/saga/alpha/core/TxEventRepository.java b/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/TxEventRepository.java
similarity index 95%
rename from alpha/alpha-core/src/main/java/io/servicecomb/saga/alpha/core/TxEventRepository.java
rename to alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/TxEventRepository.java
index 9eed4ea..3a90e02 100644
--- a/alpha/alpha-core/src/main/java/io/servicecomb/saga/alpha/core/TxEventRepository.java
+++ b/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/TxEventRepository.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.alpha.core;
+package org.apache.servicecomb.saga.alpha.core;
 
 import java.util.List;
 
diff --git a/alpha/alpha-core/src/test/java/io/servicecomb/saga/alpha/core/CompositeOmegaCallbackTest.java b/alpha/alpha-core/src/test/java/org/apache/servicecomb/saga/alpha/core/CompositeOmegaCallbackTest.java
similarity index 92%
rename from alpha/alpha-core/src/test/java/io/servicecomb/saga/alpha/core/CompositeOmegaCallbackTest.java
rename to alpha/alpha-core/src/test/java/org/apache/servicecomb/saga/alpha/core/CompositeOmegaCallbackTest.java
index 38e04a3..0c24549 100644
--- a/alpha/alpha-core/src/test/java/io/servicecomb/saga/alpha/core/CompositeOmegaCallbackTest.java
+++ b/alpha/alpha-core/src/test/java/org/apache/servicecomb/saga/alpha/core/CompositeOmegaCallbackTest.java
@@ -15,11 +15,10 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.alpha.core;
+package org.apache.servicecomb.saga.alpha.core;
 
 import static com.seanyinx.github.unit.scaffolding.AssertUtils.expectFailing;
 import static com.seanyinx.github.unit.scaffolding.Randomness.uniquify;
-import static io.servicecomb.saga.alpha.core.EventType.TxStartedEvent;
 import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertThat;
 import static org.mockito.Mockito.never;
@@ -66,7 +65,7 @@ public class CompositeOmegaCallbackTest {
 
   @Test
   public void compensateCorrespondingOmegaInstanceOnly() throws Exception {
-    TxEvent event = eventOf(serviceName2, instanceId2One, TxStartedEvent);
+    TxEvent event = eventOf(serviceName2, instanceId2One, EventType.TxStartedEvent);
 
     compositeOmegaCallback.compensate(event);
 
@@ -79,7 +78,7 @@ public class CompositeOmegaCallbackTest {
   @Test
   public void compensateOtherOmegaInstance_IfTheRequestedIsUnreachable() throws Exception {
     callbacks.get(serviceName2).remove(instanceId2One);
-    TxEvent event = eventOf(serviceName2, instanceId2One, TxStartedEvent);
+    TxEvent event = eventOf(serviceName2, instanceId2One, EventType.TxStartedEvent);
 
     compositeOmegaCallback.compensate(event);
 
@@ -92,7 +91,7 @@ public class CompositeOmegaCallbackTest {
   @Test
   public void blowsUpIfNoSuchServiceIsReachable() throws Exception {
     callbacks.get(serviceName2).clear();
-    TxEvent event = eventOf(serviceName2, instanceId2One, TxStartedEvent);
+    TxEvent event = eventOf(serviceName2, instanceId2One, EventType.TxStartedEvent);
 
     try {
       compositeOmegaCallback.compensate(event);
diff --git a/alpha/alpha-core/src/test/java/io/servicecomb/saga/alpha/core/PendingTaskRunnerTest.java b/alpha/alpha-core/src/test/java/org/apache/servicecomb/saga/alpha/core/PendingTaskRunnerTest.java
similarity index 97%
rename from alpha/alpha-core/src/test/java/io/servicecomb/saga/alpha/core/PendingTaskRunnerTest.java
rename to alpha/alpha-core/src/test/java/org/apache/servicecomb/saga/alpha/core/PendingTaskRunnerTest.java
index d806eec..7c3e7ba 100644
--- a/alpha/alpha-core/src/test/java/io/servicecomb/saga/alpha/core/PendingTaskRunnerTest.java
+++ b/alpha/alpha-core/src/test/java/org/apache/servicecomb/saga/alpha/core/PendingTaskRunnerTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.alpha.core;
+package org.apache.servicecomb.saga.alpha.core;
 
 import static java.util.concurrent.TimeUnit.MILLISECONDS;
 import static org.awaitility.Awaitility.await;
diff --git a/alpha/alpha-core/src/test/java/io/servicecomb/saga/alpha/core/PushBackOmegaCallbackTest.java b/alpha/alpha-core/src/test/java/org/apache/servicecomb/saga/alpha/core/PushBackOmegaCallbackTest.java
similarity index 94%
rename from alpha/alpha-core/src/test/java/io/servicecomb/saga/alpha/core/PushBackOmegaCallbackTest.java
rename to alpha/alpha-core/src/test/java/org/apache/servicecomb/saga/alpha/core/PushBackOmegaCallbackTest.java
index f53624c..521232c 100644
--- a/alpha/alpha-core/src/test/java/io/servicecomb/saga/alpha/core/PushBackOmegaCallbackTest.java
+++ b/alpha/alpha-core/src/test/java/org/apache/servicecomb/saga/alpha/core/PushBackOmegaCallbackTest.java
@@ -15,9 +15,9 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.alpha.core;
+package org.apache.servicecomb.saga.alpha.core;
 
-import static io.servicecomb.saga.alpha.core.TxEventMaker.someEvent;
+import static org.apache.servicecomb.saga.alpha.core.TxEventMaker.someEvent;
 import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertThat;
 import static org.mockito.Mockito.doThrow;
diff --git a/alpha/alpha-core/src/test/java/io/servicecomb/saga/alpha/core/TxConsistentServiceTest.java b/alpha/alpha-core/src/test/java/org/apache/servicecomb/saga/alpha/core/TxConsistentServiceTest.java
similarity index 84%
rename from alpha/alpha-core/src/test/java/io/servicecomb/saga/alpha/core/TxConsistentServiceTest.java
rename to alpha/alpha-core/src/test/java/org/apache/servicecomb/saga/alpha/core/TxConsistentServiceTest.java
index 76b3099..6443997 100644
--- a/alpha/alpha-core/src/test/java/io/servicecomb/saga/alpha/core/TxConsistentServiceTest.java
+++ b/alpha/alpha-core/src/test/java/org/apache/servicecomb/saga/alpha/core/TxConsistentServiceTest.java
@@ -15,15 +15,9 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.alpha.core;
+package org.apache.servicecomb.saga.alpha.core;
 
 import static com.seanyinx.github.unit.scaffolding.Randomness.uniquify;
-import static io.servicecomb.saga.alpha.core.EventType.SagaEndedEvent;
-import static io.servicecomb.saga.alpha.core.EventType.SagaStartedEvent;
-import static io.servicecomb.saga.alpha.core.EventType.TxAbortedEvent;
-import static io.servicecomb.saga.alpha.core.EventType.TxCompensatedEvent;
-import static io.servicecomb.saga.alpha.core.EventType.TxEndedEvent;
-import static io.servicecomb.saga.alpha.core.EventType.TxStartedEvent;
 import static java.util.concurrent.TimeUnit.SECONDS;
 import static org.awaitility.Awaitility.await;
 import static org.hamcrest.Matchers.contains;
@@ -74,11 +68,11 @@ public class TxConsistentServiceTest {
   @Test
   public void persistEventOnArrival() throws Exception {
     TxEvent[] events = {
-        newEvent(SagaStartedEvent),
-        newEvent(TxStartedEvent),
-        newEvent(TxEndedEvent),
-        newEvent(TxCompensatedEvent),
-        newEvent(SagaEndedEvent)};
+        newEvent(EventType.SagaStartedEvent),
+        newEvent(EventType.TxStartedEvent),
+        newEvent(EventType.TxEndedEvent),
+        newEvent(EventType.TxCompensatedEvent),
+        newEvent(EventType.SagaEndedEvent)};
 
     for (TxEvent event : events) {
       consistentService.handle(event);
@@ -91,14 +85,14 @@ public class TxConsistentServiceTest {
   @Test
   public void compensateGlobalTx_OnAnyLocalTxFailure() throws Exception {
     String localTxId1 = UUID.randomUUID().toString();
-    events.add(eventOf(TxStartedEvent, "service a".getBytes(), localTxId1, "method a"));
-    events.add(eventOf(TxEndedEvent, new byte[0], localTxId1, "method a"));
+    events.add(eventOf(EventType.TxStartedEvent, "service a".getBytes(), localTxId1, "method a"));
+    events.add(eventOf(EventType.TxEndedEvent, new byte[0], localTxId1, "method a"));
 
     String localTxId2 = UUID.randomUUID().toString();
-    events.add(eventOf(TxStartedEvent, "service b".getBytes(), localTxId2, "method b"));
-    events.add(eventOf(TxEndedEvent, new byte[0], localTxId2, "method b"));
+    events.add(eventOf(EventType.TxStartedEvent, "service b".getBytes(), localTxId2, "method b"));
+    events.add(eventOf(EventType.TxEndedEvent, new byte[0], localTxId2, "method b"));
 
-    TxEvent abortEvent = newEvent(TxAbortedEvent);
+    TxEvent abortEvent = newEvent(EventType.TxAbortedEvent);
 
     consistentService.handle(abortEvent);
 
diff --git a/alpha/alpha-core/src/test/java/io/servicecomb/saga/alpha/core/TxEventMaker.java b/alpha/alpha-core/src/test/java/org/apache/servicecomb/saga/alpha/core/TxEventMaker.java
similarity index 91%
rename from alpha/alpha-core/src/test/java/io/servicecomb/saga/alpha/core/TxEventMaker.java
rename to alpha/alpha-core/src/test/java/org/apache/servicecomb/saga/alpha/core/TxEventMaker.java
index 77ef920..21a0867 100644
--- a/alpha/alpha-core/src/test/java/io/servicecomb/saga/alpha/core/TxEventMaker.java
+++ b/alpha/alpha-core/src/test/java/org/apache/servicecomb/saga/alpha/core/TxEventMaker.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.alpha.core;import static com.seanyinx.github.unit.scaffolding.Randomness.uniquify;
+package org.apache.servicecomb.saga.alpha.core;import static com.seanyinx.github.unit.scaffolding.Randomness.uniquify;
 
 import java.util.Date;
 import java.util.UUID;
diff --git a/alpha/alpha-server/src/main/java/io/servicecomb/saga/alpha/server/AlphaApplication.java b/alpha/alpha-server/src/main/java/org/apache/servicecomb/saga/alpha/server/AlphaApplication.java
similarity index 95%
rename from alpha/alpha-server/src/main/java/io/servicecomb/saga/alpha/server/AlphaApplication.java
rename to alpha/alpha-server/src/main/java/org/apache/servicecomb/saga/alpha/server/AlphaApplication.java
index c7cb79c..6967872 100644
--- a/alpha/alpha-server/src/main/java/io/servicecomb/saga/alpha/server/AlphaApplication.java
+++ b/alpha/alpha-server/src/main/java/org/apache/servicecomb/saga/alpha/server/AlphaApplication.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.alpha.server;
+package org.apache.servicecomb.saga.alpha.server;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
diff --git a/alpha/alpha-server/src/main/java/io/servicecomb/saga/alpha/server/AlphaConfig.java b/alpha/alpha-server/src/main/java/org/apache/servicecomb/saga/alpha/server/AlphaConfig.java
similarity index 85%
rename from alpha/alpha-server/src/main/java/io/servicecomb/saga/alpha/server/AlphaConfig.java
rename to alpha/alpha-server/src/main/java/org/apache/servicecomb/saga/alpha/server/AlphaConfig.java
index 3685894..7bd855e 100644
--- a/alpha/alpha-server/src/main/java/io/servicecomb/saga/alpha/server/AlphaConfig.java
+++ b/alpha/alpha-server/src/main/java/org/apache/servicecomb/saga/alpha/server/AlphaConfig.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.alpha.server;
+package org.apache.servicecomb.saga.alpha.server;
 
 import java.util.Map;
 import java.util.concurrent.BlockingQueue;
@@ -28,12 +28,12 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
-import io.servicecomb.saga.alpha.core.CompositeOmegaCallback;
-import io.servicecomb.saga.alpha.core.OmegaCallback;
-import io.servicecomb.saga.alpha.core.PendingTaskRunner;
-import io.servicecomb.saga.alpha.core.PushBackOmegaCallback;
-import io.servicecomb.saga.alpha.core.TxConsistentService;
-import io.servicecomb.saga.alpha.core.TxEventRepository;
+import org.apache.servicecomb.saga.alpha.core.CompositeOmegaCallback;
+import org.apache.servicecomb.saga.alpha.core.OmegaCallback;
+import org.apache.servicecomb.saga.alpha.core.PendingTaskRunner;
+import org.apache.servicecomb.saga.alpha.core.PushBackOmegaCallback;
+import org.apache.servicecomb.saga.alpha.core.TxConsistentService;
+import org.apache.servicecomb.saga.alpha.core.TxEventRepository;
 
 @Configuration
 class AlphaConfig {
diff --git a/alpha/alpha-server/src/main/java/io/servicecomb/saga/alpha/server/GrpcStartable.java b/alpha/alpha-server/src/main/java/org/apache/servicecomb/saga/alpha/server/GrpcStartable.java
similarity index 97%
rename from alpha/alpha-server/src/main/java/io/servicecomb/saga/alpha/server/GrpcStartable.java
rename to alpha/alpha-server/src/main/java/org/apache/servicecomb/saga/alpha/server/GrpcStartable.java
index 663de71..2eefeb7 100644
--- a/alpha/alpha-server/src/main/java/io/servicecomb/saga/alpha/server/GrpcStartable.java
+++ b/alpha/alpha-server/src/main/java/org/apache/servicecomb/saga/alpha/server/GrpcStartable.java
@@ -18,7 +18,7 @@
  *
  */
 
-package io.servicecomb.saga.alpha.server;
+package org.apache.servicecomb.saga.alpha.server;
 
 import java.io.IOException;
 import java.lang.invoke.MethodHandles;
diff --git a/alpha/alpha-server/src/main/java/io/servicecomb/saga/alpha/server/GrpcTxEventEndpointImpl.java b/alpha/alpha-server/src/main/java/org/apache/servicecomb/saga/alpha/server/GrpcTxEventEndpointImpl.java
similarity index 81%
rename from alpha/alpha-server/src/main/java/io/servicecomb/saga/alpha/server/GrpcTxEventEndpointImpl.java
rename to alpha/alpha-server/src/main/java/org/apache/servicecomb/saga/alpha/server/GrpcTxEventEndpointImpl.java
index 3c23a79..cba9f0c 100644
--- a/alpha/alpha-server/src/main/java/io/servicecomb/saga/alpha/server/GrpcTxEventEndpointImpl.java
+++ b/alpha/alpha-server/src/main/java/org/apache/servicecomb/saga/alpha/server/GrpcTxEventEndpointImpl.java
@@ -18,16 +18,16 @@
  *
  */
 
-package io.servicecomb.saga.alpha.server;
+package org.apache.servicecomb.saga.alpha.server;
 
 import java.util.Date;
 
 import io.grpc.stub.StreamObserver;
-import io.servicecomb.saga.alpha.core.TxConsistentService;
-import io.servicecomb.saga.alpha.core.TxEvent;
-import io.servicecomb.saga.pack.contract.grpc.GrpcEmpty;
-import io.servicecomb.saga.pack.contract.grpc.GrpcTxEvent;
-import io.servicecomb.saga.pack.contract.grpc.TxEventServiceGrpc.TxEventServiceImplBase;
+import org.apache.servicecomb.saga.alpha.core.TxConsistentService;
+import org.apache.servicecomb.saga.alpha.core.TxEvent;
+import org.apache.servicecomb.saga.pack.contract.grpc.GrpcEmpty;
+import org.apache.servicecomb.saga.pack.contract.grpc.GrpcTxEvent;
+import org.apache.servicecomb.saga.pack.contract.grpc.TxEventServiceGrpc.TxEventServiceImplBase;
 
 class GrpcTxEventEndpointImpl extends TxEventServiceImplBase {
 
diff --git a/alpha/alpha-server/src/main/java/io/servicecomb/saga/alpha/server/ServerStartable.java b/alpha/alpha-server/src/main/java/org/apache/servicecomb/saga/alpha/server/ServerStartable.java
similarity index 94%
rename from alpha/alpha-server/src/main/java/io/servicecomb/saga/alpha/server/ServerStartable.java
rename to alpha/alpha-server/src/main/java/org/apache/servicecomb/saga/alpha/server/ServerStartable.java
index 4657cec..33d39df 100644
--- a/alpha/alpha-server/src/main/java/io/servicecomb/saga/alpha/server/ServerStartable.java
+++ b/alpha/alpha-server/src/main/java/org/apache/servicecomb/saga/alpha/server/ServerStartable.java
@@ -18,7 +18,7 @@
  *
  */
 
-package io.servicecomb.saga.alpha.server;
+package org.apache.servicecomb.saga.alpha.server;
 
 interface ServerStartable {
   void start();
diff --git a/alpha/alpha-server/src/main/java/io/servicecomb/saga/alpha/server/SpringTxEventRepository.java b/alpha/alpha-server/src/main/java/org/apache/servicecomb/saga/alpha/server/SpringTxEventRepository.java
similarity index 89%
rename from alpha/alpha-server/src/main/java/io/servicecomb/saga/alpha/server/SpringTxEventRepository.java
rename to alpha/alpha-server/src/main/java/org/apache/servicecomb/saga/alpha/server/SpringTxEventRepository.java
index e8c8058..a8058e9 100644
--- a/alpha/alpha-server/src/main/java/io/servicecomb/saga/alpha/server/SpringTxEventRepository.java
+++ b/alpha/alpha-server/src/main/java/org/apache/servicecomb/saga/alpha/server/SpringTxEventRepository.java
@@ -15,13 +15,13 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.alpha.server;
+package org.apache.servicecomb.saga.alpha.server;
 
 import java.util.List;
 import java.util.stream.Collectors;
 
-import io.servicecomb.saga.alpha.core.TxEvent;
-import io.servicecomb.saga.alpha.core.TxEventRepository;
+import org.apache.servicecomb.saga.alpha.core.TxEvent;
+import org.apache.servicecomb.saga.alpha.core.TxEventRepository;
 
 class SpringTxEventRepository implements TxEventRepository {
   private final TxEventEnvelopeRepository eventRepo;
diff --git a/alpha/alpha-server/src/main/java/io/servicecomb/saga/alpha/server/TxEventEnvelope.java b/alpha/alpha-server/src/main/java/org/apache/servicecomb/saga/alpha/server/TxEventEnvelope.java
similarity index 95%
rename from alpha/alpha-server/src/main/java/io/servicecomb/saga/alpha/server/TxEventEnvelope.java
rename to alpha/alpha-server/src/main/java/org/apache/servicecomb/saga/alpha/server/TxEventEnvelope.java
index 06a44dc..f4b4c66 100644
--- a/alpha/alpha-server/src/main/java/io/servicecomb/saga/alpha/server/TxEventEnvelope.java
+++ b/alpha/alpha-server/src/main/java/org/apache/servicecomb/saga/alpha/server/TxEventEnvelope.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.alpha.server;
+package org.apache.servicecomb.saga.alpha.server;
 
 import java.util.Date;
 
@@ -24,7 +24,7 @@ import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
 import javax.persistence.Id;
 
-import io.servicecomb.saga.alpha.core.TxEvent;
+import org.apache.servicecomb.saga.alpha.core.TxEvent;
 
 @Entity
 class TxEventEnvelope {
diff --git a/alpha/alpha-server/src/main/java/io/servicecomb/saga/alpha/server/TxEventEnvelopeRepository.java b/alpha/alpha-server/src/main/java/org/apache/servicecomb/saga/alpha/server/TxEventEnvelopeRepository.java
similarity index 91%
rename from alpha/alpha-server/src/main/java/io/servicecomb/saga/alpha/server/TxEventEnvelopeRepository.java
rename to alpha/alpha-server/src/main/java/org/apache/servicecomb/saga/alpha/server/TxEventEnvelopeRepository.java
index 3c35cba..fe05c1e 100644
--- a/alpha/alpha-server/src/main/java/io/servicecomb/saga/alpha/server/TxEventEnvelopeRepository.java
+++ b/alpha/alpha-server/src/main/java/org/apache/servicecomb/saga/alpha/server/TxEventEnvelopeRepository.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.alpha.server;
+package org.apache.servicecomb.saga.alpha.server;
 
 import java.util.List;
 
@@ -25,7 +25,7 @@ import org.springframework.data.repository.CrudRepository;
 interface TxEventEnvelopeRepository extends CrudRepository<TxEventEnvelope, Long> {
   TxEventEnvelope findByEventGlobalTxId(String globalTxId);
 
-  @Query("SELECT DISTINCT new io.servicecomb.saga.alpha.server.TxEventEnvelope("
+  @Query("SELECT DISTINCT new org.apache.servicecomb.saga.alpha.server.TxEventEnvelope("
       + "t.event.serviceName, t.event.instanceId, t.event.globalTxId, t.event.localTxId, t.event.parentTxId, t.event.type, t.event.compensationMethod, t.event.payloads"
       + ") FROM TxEventEnvelope t "
       + "WHERE t.event.globalTxId = ?1 AND t.event.type = ?2")
diff --git a/alpha/alpha-server/src/test/java/io/servicecomb/saga/alpha/server/AlphaIntegrationTest.java b/alpha/alpha-server/src/test/java/org/apache/servicecomb/saga/alpha/server/AlphaIntegrationTest.java
similarity index 83%
rename from alpha/alpha-server/src/test/java/io/servicecomb/saga/alpha/server/AlphaIntegrationTest.java
rename to alpha/alpha-server/src/test/java/org/apache/servicecomb/saga/alpha/server/AlphaIntegrationTest.java
index 2b83b97..221c5b0 100644
--- a/alpha/alpha-server/src/test/java/io/servicecomb/saga/alpha/server/AlphaIntegrationTest.java
+++ b/alpha/alpha-server/src/test/java/org/apache/servicecomb/saga/alpha/server/AlphaIntegrationTest.java
@@ -15,12 +15,9 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.alpha.server;
+package org.apache.servicecomb.saga.alpha.server;
 
 import static com.seanyinx.github.unit.scaffolding.Randomness.uniquify;
-import static io.servicecomb.saga.alpha.core.EventType.TxAbortedEvent;
-import static io.servicecomb.saga.alpha.core.EventType.TxEndedEvent;
-import static io.servicecomb.saga.alpha.core.EventType.TxStartedEvent;
 import static java.util.concurrent.TimeUnit.SECONDS;
 import static org.awaitility.Awaitility.await;
 import static org.hamcrest.Matchers.containsInAnyOrder;
@@ -34,6 +31,10 @@ import java.util.List;
 import java.util.Objects;
 import java.util.UUID;
 
+import org.apache.servicecomb.saga.alpha.core.EventType;
+import org.apache.servicecomb.saga.alpha.core.OmegaCallback;
+import org.apache.servicecomb.saga.alpha.core.TxEvent;
+import org.hamcrest.core.Is;
 import org.junit.AfterClass;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -47,13 +48,11 @@ import com.google.protobuf.ByteString;
 
 import io.grpc.ManagedChannel;
 import io.grpc.ManagedChannelBuilder;
-import io.servicecomb.saga.alpha.core.EventType;
-import io.servicecomb.saga.alpha.core.OmegaCallback;
-import io.servicecomb.saga.alpha.core.TxEvent;
-import io.servicecomb.saga.alpha.server.AlphaIntegrationTest.OmegaCallbackConfig;
-import io.servicecomb.saga.pack.contract.grpc.GrpcTxEvent;
-import io.servicecomb.saga.pack.contract.grpc.TxEventServiceGrpc;
-import io.servicecomb.saga.pack.contract.grpc.TxEventServiceGrpc.TxEventServiceBlockingStub;
+
+import org.apache.servicecomb.saga.alpha.server.AlphaIntegrationTest.OmegaCallbackConfig;
+import org.apache.servicecomb.saga.pack.contract.grpc.GrpcTxEvent;
+import org.apache.servicecomb.saga.pack.contract.grpc.TxEventServiceGrpc;
+import org.apache.servicecomb.saga.pack.contract.grpc.TxEventServiceGrpc.TxEventServiceBlockingStub;
 
 @RunWith(SpringRunner.class)
 @SpringBootTest(classes = {AlphaApplication.class, OmegaCallbackConfig.class}, properties = "alpha.server.port=8090")
@@ -87,7 +86,7 @@ public class AlphaIntegrationTest {
 
   @Test
   public void persistsEvent() throws Exception {
-    stub.reportEvent(someGrpcEvent(TxStartedEvent));
+    stub.reportEvent(someGrpcEvent(EventType.TxStartedEvent));
 
     TxEventEnvelope envelope = eventRepo.findByEventGlobalTxId(globalTxId);
 
@@ -96,7 +95,7 @@ public class AlphaIntegrationTest {
     assertThat(envelope.globalTxId(), is(globalTxId));
     assertThat(envelope.localTxId(), is(localTxId));
     assertThat(envelope.parentTxId(), is(parentTxId));
-    assertThat(envelope.type(), is(TxStartedEvent.name()));
+    assertThat(envelope.type(), Is.is(EventType.TxStartedEvent.name()));
     assertThat(envelope.compensationMethod(), is(compensationMethod));
     assertThat(envelope.payloads(), is(payload.getBytes()));
   }
@@ -104,15 +103,15 @@ public class AlphaIntegrationTest {
   @Test
   public void doNotCompensateDuplicateTxOnFailure() throws Exception {
     // duplicate events with same content but different timestamp
-    eventRepo.save(eventEnvelopeOf(TxStartedEvent, localTxId, parentTxId, "service a".getBytes(), "method a"));
-    eventRepo.save(eventEnvelopeOf(TxStartedEvent, localTxId, parentTxId, "service a".getBytes(), "method a"));
-    eventRepo.save(eventEnvelopeOf(TxEndedEvent, new byte[0], "method a"));
+    eventRepo.save(eventEnvelopeOf(EventType.TxStartedEvent, localTxId, parentTxId, "service a".getBytes(), "method a"));
+    eventRepo.save(eventEnvelopeOf(EventType.TxStartedEvent, localTxId, parentTxId, "service a".getBytes(), "method a"));
+    eventRepo.save(eventEnvelopeOf(EventType.TxEndedEvent, new byte[0], "method a"));
 
     String localTxId1 = UUID.randomUUID().toString();
-    eventRepo.save(eventEnvelopeOf(TxStartedEvent, localTxId1, UUID.randomUUID().toString(), "service b".getBytes(), "method b"));
-    eventRepo.save(eventEnvelopeOf(TxEndedEvent, new byte[0], "method b"));
+    eventRepo.save(eventEnvelopeOf(EventType.TxStartedEvent, localTxId1, UUID.randomUUID().toString(), "service b".getBytes(), "method b"));
+    eventRepo.save(eventEnvelopeOf(EventType.TxEndedEvent, new byte[0], "method b"));
 
-    stub.reportEvent(someGrpcEvent(TxAbortedEvent));
+    stub.reportEvent(someGrpcEvent(EventType.TxAbortedEvent));
 
     await().atMost(1, SECONDS).until(() -> compensationContexts.size() > 1);
     assertThat(compensationContexts, containsInAnyOrder(
diff --git a/integration-tests/pack-tests/src/test/java/io/servicecomb/saga/integration/pack/tests/GreetingApplication.java b/integration-tests/pack-tests/src/test/java/org/apache/servicecomb/saga/integration/pack/tests/GreetingApplication.java
similarity index 90%
rename from integration-tests/pack-tests/src/test/java/io/servicecomb/saga/integration/pack/tests/GreetingApplication.java
rename to integration-tests/pack-tests/src/test/java/org/apache/servicecomb/saga/integration/pack/tests/GreetingApplication.java
index 24bce7a..a9461dd 100644
--- a/integration-tests/pack-tests/src/test/java/io/servicecomb/saga/integration/pack/tests/GreetingApplication.java
+++ b/integration-tests/pack-tests/src/test/java/org/apache/servicecomb/saga/integration/pack/tests/GreetingApplication.java
@@ -15,13 +15,12 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.integration.pack.tests;
+package org.apache.servicecomb.saga.integration.pack.tests;
 
+import org.apache.servicecomb.saga.omega.spring.EnableOmega;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 
-import io.servicecomb.saga.omega.spring.EnableOmega;
-
 @EnableOmega
 @SpringBootApplication
 public class GreetingApplication {
diff --git a/integration-tests/pack-tests/src/test/java/io/servicecomb/saga/integration/pack/tests/GreetingController.java b/integration-tests/pack-tests/src/test/java/org/apache/servicecomb/saga/integration/pack/tests/GreetingController.java
similarity index 97%
rename from integration-tests/pack-tests/src/test/java/io/servicecomb/saga/integration/pack/tests/GreetingController.java
rename to integration-tests/pack-tests/src/test/java/org/apache/servicecomb/saga/integration/pack/tests/GreetingController.java
index e7c6c25..90fd4ac 100644
--- a/integration-tests/pack-tests/src/test/java/io/servicecomb/saga/integration/pack/tests/GreetingController.java
+++ b/integration-tests/pack-tests/src/test/java/org/apache/servicecomb/saga/integration/pack/tests/GreetingController.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.integration.pack.tests;
+package org.apache.servicecomb.saga.integration.pack.tests;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
diff --git a/integration-tests/pack-tests/src/test/java/io/servicecomb/saga/integration/pack/tests/GreetingService.java b/integration-tests/pack-tests/src/test/java/org/apache/servicecomb/saga/integration/pack/tests/GreetingService.java
similarity index 90%
rename from integration-tests/pack-tests/src/test/java/io/servicecomb/saga/integration/pack/tests/GreetingService.java
rename to integration-tests/pack-tests/src/test/java/org/apache/servicecomb/saga/integration/pack/tests/GreetingService.java
index fe0f16a..ef8519f 100644
--- a/integration-tests/pack-tests/src/test/java/io/servicecomb/saga/integration/pack/tests/GreetingService.java
+++ b/integration-tests/pack-tests/src/test/java/org/apache/servicecomb/saga/integration/pack/tests/GreetingService.java
@@ -15,11 +15,11 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.integration.pack.tests;
+package org.apache.servicecomb.saga.integration.pack.tests;
 
 import org.springframework.stereotype.Service;
 
-import io.servicecomb.saga.omega.transaction.annotations.Compensable;
+import org.apache.servicecomb.saga.omega.transaction.annotations.Compensable;
 
 @Service
 public class GreetingService {
diff --git a/integration-tests/pack-tests/src/test/java/io/servicecomb/saga/integration/pack/tests/PackIT.java b/integration-tests/pack-tests/src/test/java/org/apache/servicecomb/saga/integration/pack/tests/PackIT.java
similarity index 94%
rename from integration-tests/pack-tests/src/test/java/io/servicecomb/saga/integration/pack/tests/PackIT.java
rename to integration-tests/pack-tests/src/test/java/org/apache/servicecomb/saga/integration/pack/tests/PackIT.java
index fb330c8..50bbd4e 100644
--- a/integration-tests/pack-tests/src/test/java/io/servicecomb/saga/integration/pack/tests/PackIT.java
+++ b/integration-tests/pack-tests/src/test/java/org/apache/servicecomb/saga/integration/pack/tests/PackIT.java
@@ -15,9 +15,8 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.integration.pack.tests;
+package org.apache.servicecomb.saga.integration.pack.tests;
 
-import static io.servicecomb.saga.omega.context.OmegaContext.GLOBAL_TX_ID_KEY;
 import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.hamcrest.CoreMatchers.nullValue;
 import static org.hamcrest.core.Is.is;
@@ -28,6 +27,7 @@ import static org.springframework.http.HttpStatus.OK;
 import java.util.List;
 import java.util.UUID;
 
+import org.apache.servicecomb.saga.omega.context.OmegaContext;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -39,8 +39,6 @@ import org.springframework.http.HttpHeaders;
 import org.springframework.http.ResponseEntity;
 import org.springframework.test.context.junit4.SpringRunner;
 
-import io.servicecomb.saga.omega.context.OmegaContext;
-
 @RunWith(SpringRunner.class)
 @SpringBootTest(classes = GreetingApplication.class, webEnvironment = WebEnvironment.DEFINED_PORT,
     properties = {"server.port=8080", "spring.application.name=greeting-service"})
@@ -61,7 +59,7 @@ public class PackIT {
   public void updatesTxStateToAlpha() throws Exception {
     HttpHeaders headers = new HttpHeaders();
 
-    headers.set(GLOBAL_TX_ID_KEY, globalTxId);
+    headers.set(OmegaContext.GLOBAL_TX_ID_KEY, globalTxId);
 
     ResponseEntity<String> entity = restTemplate.exchange("/greet?name={name}",
         GET,
diff --git a/integration-tests/pack-tests/src/test/java/io/servicecomb/saga/integration/pack/tests/TxEventEnvelope.java b/integration-tests/pack-tests/src/test/java/org/apache/servicecomb/saga/integration/pack/tests/TxEventEnvelope.java
similarity index 96%
rename from integration-tests/pack-tests/src/test/java/io/servicecomb/saga/integration/pack/tests/TxEventEnvelope.java
rename to integration-tests/pack-tests/src/test/java/org/apache/servicecomb/saga/integration/pack/tests/TxEventEnvelope.java
index 206088d..25ef1e3 100644
--- a/integration-tests/pack-tests/src/test/java/io/servicecomb/saga/integration/pack/tests/TxEventEnvelope.java
+++ b/integration-tests/pack-tests/src/test/java/org/apache/servicecomb/saga/integration/pack/tests/TxEventEnvelope.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.integration.pack.tests;
+package org.apache.servicecomb.saga.integration.pack.tests;
 
 import java.util.Date;
 
diff --git a/integration-tests/pack-tests/src/test/java/io/servicecomb/saga/integration/pack/tests/TxEventEnvelopeRepository.java b/integration-tests/pack-tests/src/test/java/org/apache/servicecomb/saga/integration/pack/tests/TxEventEnvelopeRepository.java
similarity index 94%
rename from integration-tests/pack-tests/src/test/java/io/servicecomb/saga/integration/pack/tests/TxEventEnvelopeRepository.java
rename to integration-tests/pack-tests/src/test/java/org/apache/servicecomb/saga/integration/pack/tests/TxEventEnvelopeRepository.java
index 7c88c2b..7e4b7e9 100644
--- a/integration-tests/pack-tests/src/test/java/io/servicecomb/saga/integration/pack/tests/TxEventEnvelopeRepository.java
+++ b/integration-tests/pack-tests/src/test/java/org/apache/servicecomb/saga/integration/pack/tests/TxEventEnvelopeRepository.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.integration.pack.tests;
+package org.apache.servicecomb.saga.integration.pack.tests;
 
 import java.util.List;
 
diff --git a/omega/omega-connector/omega-connector-grpc/src/main/java/io/servicecomb/saga/omega/connector/grpc/GrpcClientMessageSender.java b/omega/omega-connector/omega-connector-grpc/src/main/java/org/apache/servicecomb/saga/omega/connector/grpc/GrpcClientMessageSender.java
similarity index 76%
rename from omega/omega-connector/omega-connector-grpc/src/main/java/io/servicecomb/saga/omega/connector/grpc/GrpcClientMessageSender.java
rename to omega/omega-connector/omega-connector-grpc/src/main/java/org/apache/servicecomb/saga/omega/connector/grpc/GrpcClientMessageSender.java
index 2c56247..09cbaad 100644
--- a/omega/omega-connector/omega-connector-grpc/src/main/java/io/servicecomb/saga/omega/connector/grpc/GrpcClientMessageSender.java
+++ b/omega/omega-connector/omega-connector-grpc/src/main/java/org/apache/servicecomb/saga/omega/connector/grpc/GrpcClientMessageSender.java
@@ -18,19 +18,21 @@
  *
  */
 
-package io.servicecomb.saga.omega.connector.grpc;
+package org.apache.servicecomb.saga.omega.connector.grpc;
+
+import org.apache.servicecomb.saga.omega.transaction.TxEvent;
 
 import com.google.protobuf.ByteString;
 
 import io.grpc.ManagedChannel;
-import io.servicecomb.saga.omega.context.ServiceConfig;
-import io.servicecomb.saga.omega.transaction.MessageSender;
-import io.servicecomb.saga.omega.transaction.MessageSerializer;
-import io.servicecomb.saga.omega.transaction.TxEvent;
-import io.servicecomb.saga.pack.contract.grpc.GrpcTxEvent;
-import io.servicecomb.saga.pack.contract.grpc.GrpcTxEvent.Builder;
-import io.servicecomb.saga.pack.contract.grpc.TxEventServiceGrpc;
-import io.servicecomb.saga.pack.contract.grpc.TxEventServiceGrpc.TxEventServiceBlockingStub;
+import org.apache.servicecomb.saga.omega.context.ServiceConfig;
+import org.apache.servicecomb.saga.omega.transaction.MessageSender;
+import org.apache.servicecomb.saga.omega.transaction.MessageSerializer;
+
+import org.apache.servicecomb.saga.pack.contract.grpc.GrpcTxEvent;
+import org.apache.servicecomb.saga.pack.contract.grpc.GrpcTxEvent.Builder;
+import org.apache.servicecomb.saga.pack.contract.grpc.TxEventServiceGrpc;
+import org.apache.servicecomb.saga.pack.contract.grpc.TxEventServiceGrpc.TxEventServiceBlockingStub;
 
 public class GrpcClientMessageSender implements MessageSender {
 
diff --git a/omega/omega-context/src/main/java/io/servicecomb/saga/omega/context/IdGenerator.java b/omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/IdGenerator.java
similarity index 94%
rename from omega/omega-context/src/main/java/io/servicecomb/saga/omega/context/IdGenerator.java
rename to omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/IdGenerator.java
index 88de1a4..0917192 100644
--- a/omega/omega-context/src/main/java/io/servicecomb/saga/omega/context/IdGenerator.java
+++ b/omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/IdGenerator.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.omega.context;
+package org.apache.servicecomb.saga.omega.context;
 
 import java.io.Serializable;
 
diff --git a/omega/omega-context/src/main/java/io/servicecomb/saga/omega/context/OmegaContext.java b/omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/OmegaContext.java
similarity index 98%
rename from omega/omega-context/src/main/java/io/servicecomb/saga/omega/context/OmegaContext.java
rename to omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/OmegaContext.java
index 705e74e..6016b53 100644
--- a/omega/omega-context/src/main/java/io/servicecomb/saga/omega/context/OmegaContext.java
+++ b/omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/OmegaContext.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.omega.context;
+package org.apache.servicecomb.saga.omega.context;
 
 import java.lang.invoke.MethodHandles;
 import java.lang.reflect.InvocationTargetException;
diff --git a/omega/omega-context/src/main/java/io/servicecomb/saga/omega/context/ServiceConfig.java b/omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/ServiceConfig.java
similarity index 96%
rename from omega/omega-context/src/main/java/io/servicecomb/saga/omega/context/ServiceConfig.java
rename to omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/ServiceConfig.java
index 53671ad..1e16b62 100644
--- a/omega/omega-context/src/main/java/io/servicecomb/saga/omega/context/ServiceConfig.java
+++ b/omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/ServiceConfig.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.omega.context;
+package org.apache.servicecomb.saga.omega.context;
 
 import java.net.InetAddress;
 import java.net.UnknownHostException;
diff --git a/omega/omega-context/src/main/java/io/servicecomb/saga/omega/context/UniqueIdGenerator.java b/omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/UniqueIdGenerator.java
similarity index 95%
rename from omega/omega-context/src/main/java/io/servicecomb/saga/omega/context/UniqueIdGenerator.java
rename to omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/UniqueIdGenerator.java
index 300b522..36c991a 100644
--- a/omega/omega-context/src/main/java/io/servicecomb/saga/omega/context/UniqueIdGenerator.java
+++ b/omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/UniqueIdGenerator.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.omega.context;
+package org.apache.servicecomb.saga.omega.context;
 
 import java.util.UUID;
 
diff --git a/omega/omega-context/src/test/java/io/servicecomb/saga/omega/context/OmegaContextTest.java b/omega/omega-context/src/test/java/org/apache/servicecomb/saga/omega/context/OmegaContextTest.java
similarity index 98%
rename from omega/omega-context/src/test/java/io/servicecomb/saga/omega/context/OmegaContextTest.java
rename to omega/omega-context/src/test/java/org/apache/servicecomb/saga/omega/context/OmegaContextTest.java
index 752f0b8..3f844d3 100644
--- a/omega/omega-context/src/test/java/io/servicecomb/saga/omega/context/OmegaContextTest.java
+++ b/omega/omega-context/src/test/java/org/apache/servicecomb/saga/omega/context/OmegaContextTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.omega.context;
+package org.apache.servicecomb.saga.omega.context;
 
 import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertThat;
diff --git a/omega/omega-format/src/main/java/io/servicecomb/saga/omega/format/NativeMessageFormat.java b/omega/omega-format/src/main/java/org/apache/servicecomb/saga/omega/format/NativeMessageFormat.java
similarity index 86%
rename from omega/omega-format/src/main/java/io/servicecomb/saga/omega/format/NativeMessageFormat.java
rename to omega/omega-format/src/main/java/org/apache/servicecomb/saga/omega/format/NativeMessageFormat.java
index 60b4a74..a486e1d 100644
--- a/omega/omega-format/src/main/java/io/servicecomb/saga/omega/format/NativeMessageFormat.java
+++ b/omega/omega-format/src/main/java/org/apache/servicecomb/saga/omega/format/NativeMessageFormat.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.omega.format;
+package org.apache.servicecomb.saga.omega.format;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -23,10 +23,10 @@ import java.io.IOException;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
 
-import io.servicecomb.saga.omega.transaction.MessageDeserializer;
-import io.servicecomb.saga.omega.transaction.MessageSerializer;
-import io.servicecomb.saga.omega.transaction.OmegaException;
-import io.servicecomb.saga.omega.transaction.TxEvent;
+import org.apache.servicecomb.saga.omega.transaction.TxEvent;
+import org.apache.servicecomb.saga.omega.transaction.MessageDeserializer;
+import org.apache.servicecomb.saga.omega.transaction.MessageSerializer;
+import org.apache.servicecomb.saga.omega.transaction.OmegaException;
 
 public class NativeMessageFormat implements MessageSerializer, MessageDeserializer {
   @Override
diff --git a/omega/omega-format/src/test/java/io/servicecomb/saga/omega/format/NativeMessageFormatTest.java b/omega/omega-format/src/test/java/org/apache/servicecomb/saga/omega/format/NativeMessageFormatTest.java
similarity index 92%
rename from omega/omega-format/src/test/java/io/servicecomb/saga/omega/format/NativeMessageFormatTest.java
rename to omega/omega-format/src/test/java/org/apache/servicecomb/saga/omega/format/NativeMessageFormatTest.java
index 210aab1..1460fd2 100644
--- a/omega/omega-format/src/test/java/io/servicecomb/saga/omega/format/NativeMessageFormatTest.java
+++ b/omega/omega-format/src/test/java/org/apache/servicecomb/saga/omega/format/NativeMessageFormatTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.omega.format;
+package org.apache.servicecomb.saga.omega.format;
 
 import static com.seanyinx.github.unit.scaffolding.AssertUtils.expectFailing;
 import static java.util.Arrays.asList;
@@ -23,11 +23,10 @@ import static org.hamcrest.Matchers.contains;
 import static org.hamcrest.Matchers.startsWith;
 import static org.junit.Assert.assertThat;
 
+import org.apache.servicecomb.saga.omega.transaction.OmegaException;
+import org.apache.servicecomb.saga.omega.transaction.TxEvent;
 import org.junit.Test;
 
-import io.servicecomb.saga.omega.transaction.OmegaException;
-import io.servicecomb.saga.omega.transaction.TxEvent;
-
 public class NativeMessageFormatTest {
 
   private final NativeMessageFormat format = new NativeMessageFormat();
@@ -67,4 +66,4 @@ public class NativeMessageFormatTest {
 
   private static class NotSerializable {
   }
-}
\ No newline at end of file
+}
diff --git a/omega/omega-spring-starter/src/main/java/io/servicecomb/saga/omega/spring/EnableOmega.java b/omega/omega-spring-starter/src/main/java/org/apache/servicecomb/saga/omega/spring/EnableOmega.java
similarity index 89%
rename from omega/omega-spring-starter/src/main/java/io/servicecomb/saga/omega/spring/EnableOmega.java
rename to omega/omega-spring-starter/src/main/java/org/apache/servicecomb/saga/omega/spring/EnableOmega.java
index 8d5f851..7050d29 100644
--- a/omega/omega-spring-starter/src/main/java/io/servicecomb/saga/omega/spring/EnableOmega.java
+++ b/omega/omega-spring-starter/src/main/java/org/apache/servicecomb/saga/omega/spring/EnableOmega.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.omega.spring;
+package org.apache.servicecomb.saga.omega.spring;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
@@ -24,7 +24,7 @@ import java.lang.annotation.Target;
 
 import org.springframework.context.annotation.Import;
 
-import io.servicecomb.saga.omega.transaction.spring.TransactionAspectConfig;
+import org.apache.servicecomb.saga.omega.transaction.spring.TransactionAspectConfig;
 
 @Target(ElementType.TYPE)
 @Retention(RetentionPolicy.RUNTIME)
diff --git a/omega/omega-spring-starter/src/main/java/io/servicecomb/saga/omega/spring/OmegaSpringConfig.java b/omega/omega-spring-starter/src/main/java/org/apache/servicecomb/saga/omega/spring/OmegaSpringConfig.java
similarity index 84%
rename from omega/omega-spring-starter/src/main/java/io/servicecomb/saga/omega/spring/OmegaSpringConfig.java
rename to omega/omega-spring-starter/src/main/java/org/apache/servicecomb/saga/omega/spring/OmegaSpringConfig.java
index 28181f4..4a454fd 100644
--- a/omega/omega-spring-starter/src/main/java/io/servicecomb/saga/omega/spring/OmegaSpringConfig.java
+++ b/omega/omega-spring-starter/src/main/java/org/apache/servicecomb/saga/omega/spring/OmegaSpringConfig.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.omega.spring;
+package org.apache.servicecomb.saga.omega.spring;
 
 import java.lang.invoke.MethodHandles;
 import java.util.ArrayList;
@@ -24,6 +24,12 @@ import java.util.List;
 
 import javax.annotation.PreDestroy;
 
+import org.apache.servicecomb.saga.omega.connector.grpc.GrpcClientMessageSender;
+import org.apache.servicecomb.saga.omega.context.IdGenerator;
+import org.apache.servicecomb.saga.omega.context.OmegaContext;
+import org.apache.servicecomb.saga.omega.context.UniqueIdGenerator;
+import org.apache.servicecomb.saga.omega.format.NativeMessageFormat;
+import org.apache.servicecomb.saga.omega.transaction.MessageSender;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Value;
@@ -32,13 +38,8 @@ import org.springframework.context.annotation.Configuration;
 
 import io.grpc.ManagedChannel;
 import io.grpc.ManagedChannelBuilder;
-import io.servicecomb.saga.omega.connector.grpc.GrpcClientMessageSender;
-import io.servicecomb.saga.omega.context.IdGenerator;
-import io.servicecomb.saga.omega.context.OmegaContext;
-import io.servicecomb.saga.omega.context.ServiceConfig;
-import io.servicecomb.saga.omega.context.UniqueIdGenerator;
-import io.servicecomb.saga.omega.format.NativeMessageFormat;
-import io.servicecomb.saga.omega.transaction.MessageSender;
+
+import org.apache.servicecomb.saga.omega.context.ServiceConfig;
 
 @Configuration
 class OmegaSpringConfig {
diff --git a/omega/omega-spring-tx/src/main/java/io/servicecomb/saga/omega/transaction/spring/CompensableAnnotationProcessor.java b/omega/omega-spring-tx/src/main/java/org/apache/servicecomb/saga/omega/transaction/spring/CompensableAnnotationProcessor.java
similarity index 92%
rename from omega/omega-spring-tx/src/main/java/io/servicecomb/saga/omega/transaction/spring/CompensableAnnotationProcessor.java
rename to omega/omega-spring-tx/src/main/java/org/apache/servicecomb/saga/omega/transaction/spring/CompensableAnnotationProcessor.java
index e97d4d3..9cb5b27 100644
--- a/omega/omega-spring-tx/src/main/java/io/servicecomb/saga/omega/transaction/spring/CompensableAnnotationProcessor.java
+++ b/omega/omega-spring-tx/src/main/java/org/apache/servicecomb/saga/omega/transaction/spring/CompensableAnnotationProcessor.java
@@ -15,14 +15,13 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.omega.transaction.spring;
+package org.apache.servicecomb.saga.omega.transaction.spring;
 
+import org.apache.servicecomb.saga.omega.context.OmegaContext;
 import org.springframework.beans.BeansException;
 import org.springframework.beans.factory.config.BeanPostProcessor;
 import org.springframework.util.ReflectionUtils;
 
-import io.servicecomb.saga.omega.context.OmegaContext;
-
 class CompensableAnnotationProcessor implements BeanPostProcessor {
 
   private final OmegaContext omegaContext;
diff --git a/omega/omega-spring-tx/src/main/java/io/servicecomb/saga/omega/transaction/spring/CompensableMethodCheckingCallback.java b/omega/omega-spring-tx/src/main/java/org/apache/servicecomb/saga/omega/transaction/spring/CompensableMethodCheckingCallback.java
similarity index 88%
rename from omega/omega-spring-tx/src/main/java/io/servicecomb/saga/omega/transaction/spring/CompensableMethodCheckingCallback.java
rename to omega/omega-spring-tx/src/main/java/org/apache/servicecomb/saga/omega/transaction/spring/CompensableMethodCheckingCallback.java
index 64779d7..2793109 100644
--- a/omega/omega-spring-tx/src/main/java/io/servicecomb/saga/omega/transaction/spring/CompensableMethodCheckingCallback.java
+++ b/omega/omega-spring-tx/src/main/java/org/apache/servicecomb/saga/omega/transaction/spring/CompensableMethodCheckingCallback.java
@@ -15,18 +15,18 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.omega.transaction.spring;
+package org.apache.servicecomb.saga.omega.transaction.spring;
 
 import java.lang.invoke.MethodHandles;
 import java.lang.reflect.Method;
 
+import org.apache.servicecomb.saga.omega.context.OmegaContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.util.ReflectionUtils.MethodCallback;
 
-import io.servicecomb.saga.omega.context.OmegaContext;
-import io.servicecomb.saga.omega.transaction.OmegaException;
-import io.servicecomb.saga.omega.transaction.annotations.Compensable;
+import org.apache.servicecomb.saga.omega.transaction.OmegaException;
+import org.apache.servicecomb.saga.omega.transaction.annotations.Compensable;
 
 class CompensableMethodCheckingCallback implements MethodCallback {
   private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
diff --git a/omega/omega-spring-tx/src/main/java/io/servicecomb/saga/omega/transaction/spring/TransactionAspectConfig.java b/omega/omega-spring-tx/src/main/java/org/apache/servicecomb/saga/omega/transaction/spring/TransactionAspectConfig.java
similarity index 78%
rename from omega/omega-spring-tx/src/main/java/io/servicecomb/saga/omega/transaction/spring/TransactionAspectConfig.java
rename to omega/omega-spring-tx/src/main/java/org/apache/servicecomb/saga/omega/transaction/spring/TransactionAspectConfig.java
index da9f3f8..1d46378 100644
--- a/omega/omega-spring-tx/src/main/java/io/servicecomb/saga/omega/transaction/spring/TransactionAspectConfig.java
+++ b/omega/omega-spring-tx/src/main/java/org/apache/servicecomb/saga/omega/transaction/spring/TransactionAspectConfig.java
@@ -15,18 +15,17 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.omega.transaction.spring;
+package org.apache.servicecomb.saga.omega.transaction.spring;
 
+import org.apache.servicecomb.saga.omega.context.OmegaContext;
+import org.apache.servicecomb.saga.omega.transaction.CompensationMessageHandler;
+import org.apache.servicecomb.saga.omega.transaction.MessageHandler;
+import org.apache.servicecomb.saga.omega.transaction.MessageSender;
+import org.apache.servicecomb.saga.omega.transaction.TransactionAspect;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.EnableAspectJAutoProxy;
 
-import io.servicecomb.saga.omega.context.OmegaContext;
-import io.servicecomb.saga.omega.transaction.CompensationMessageHandler;
-import io.servicecomb.saga.omega.transaction.MessageHandler;
-import io.servicecomb.saga.omega.transaction.MessageSender;
-import io.servicecomb.saga.omega.transaction.TransactionAspect;
-
 @Configuration
 @EnableAspectJAutoProxy
 public class TransactionAspectConfig {
diff --git a/omega/omega-spring-tx/src/test/java/io/servicecomb/saga/omega/transaction/spring/CompensableAnnotationCheckingTest.java b/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/saga/omega/transaction/spring/CompensableAnnotationCheckingTest.java
similarity index 96%
rename from omega/omega-spring-tx/src/test/java/io/servicecomb/saga/omega/transaction/spring/CompensableAnnotationCheckingTest.java
rename to omega/omega-spring-tx/src/test/java/org/apache/servicecomb/saga/omega/transaction/spring/CompensableAnnotationCheckingTest.java
index 29698a0..3b399b9 100644
--- a/omega/omega-spring-tx/src/test/java/io/servicecomb/saga/omega/transaction/spring/CompensableAnnotationCheckingTest.java
+++ b/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/saga/omega/transaction/spring/CompensableAnnotationCheckingTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.omega.transaction.spring;
+package org.apache.servicecomb.saga.omega.transaction.spring;
 
 import static com.seanyinx.github.unit.scaffolding.AssertUtils.expectFailing;
 import static org.hamcrest.CoreMatchers.startsWith;
diff --git a/omega/omega-spring-tx/src/test/java/io/servicecomb/saga/omega/transaction/spring/MisconfiguredService.java b/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/saga/omega/transaction/spring/MisconfiguredService.java
similarity index 88%
rename from omega/omega-spring-tx/src/test/java/io/servicecomb/saga/omega/transaction/spring/MisconfiguredService.java
rename to omega/omega-spring-tx/src/test/java/org/apache/servicecomb/saga/omega/transaction/spring/MisconfiguredService.java
index 854959a..a569d23 100644
--- a/omega/omega-spring-tx/src/test/java/io/servicecomb/saga/omega/transaction/spring/MisconfiguredService.java
+++ b/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/saga/omega/transaction/spring/MisconfiguredService.java
@@ -15,13 +15,12 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.omega.transaction.spring;
+package org.apache.servicecomb.saga.omega.transaction.spring;
 
+import org.apache.servicecomb.saga.omega.transaction.annotations.Compensable;
 import org.springframework.context.annotation.Profile;
 import org.springframework.stereotype.Component;
 
-import io.servicecomb.saga.omega.transaction.annotations.Compensable;
-
 @Profile("annotation-checking")
 @Component
 class MisconfiguredService {
diff --git a/omega/omega-spring-tx/src/test/java/io/servicecomb/saga/omega/transaction/spring/TransactionInterceptionTest.java b/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/saga/omega/transaction/spring/TransactionInterceptionTest.java
similarity index 88%
rename from omega/omega-spring-tx/src/test/java/io/servicecomb/saga/omega/transaction/spring/TransactionInterceptionTest.java
rename to omega/omega-spring-tx/src/test/java/org/apache/servicecomb/saga/omega/transaction/spring/TransactionInterceptionTest.java
index 7efa304..dc23612 100644
--- a/omega/omega-spring-tx/src/test/java/io/servicecomb/saga/omega/transaction/spring/TransactionInterceptionTest.java
+++ b/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/saga/omega/transaction/spring/TransactionInterceptionTest.java
@@ -15,11 +15,11 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.omega.transaction.spring;
+package org.apache.servicecomb.saga.omega.transaction.spring;
 
 import static com.seanyinx.github.unit.scaffolding.AssertUtils.expectFailing;
 import static com.seanyinx.github.unit.scaffolding.Randomness.uniquify;
-import static io.servicecomb.saga.omega.transaction.spring.TransactionalUserService.ILLEGAL_USER;
+import static org.apache.servicecomb.saga.omega.transaction.spring.TransactionalUserService.ILLEGAL_USER;
 import static org.hamcrest.CoreMatchers.nullValue;
 import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertArrayEquals;
@@ -40,15 +40,15 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.test.context.junit4.SpringRunner;
 
-import io.servicecomb.saga.omega.context.OmegaContext;
-import io.servicecomb.saga.omega.context.UniqueIdGenerator;
-import io.servicecomb.saga.omega.transaction.MessageHandler;
-import io.servicecomb.saga.omega.transaction.MessageSender;
-import io.servicecomb.saga.omega.transaction.TxAbortedEvent;
-import io.servicecomb.saga.omega.transaction.TxCompensatedEvent;
-import io.servicecomb.saga.omega.transaction.TxEndedEvent;
-import io.servicecomb.saga.omega.transaction.TxStartedEvent;
-import io.servicecomb.saga.omega.transaction.spring.TransactionInterceptionTest.MessageConfig;
+import org.apache.servicecomb.saga.omega.context.OmegaContext;
+import org.apache.servicecomb.saga.omega.context.UniqueIdGenerator;
+import org.apache.servicecomb.saga.omega.transaction.MessageHandler;
+import org.apache.servicecomb.saga.omega.transaction.MessageSender;
+import org.apache.servicecomb.saga.omega.transaction.TxAbortedEvent;
+import org.apache.servicecomb.saga.omega.transaction.TxCompensatedEvent;
+import org.apache.servicecomb.saga.omega.transaction.TxEndedEvent;
+import org.apache.servicecomb.saga.omega.transaction.TxStartedEvent;
+import org.apache.servicecomb.saga.omega.transaction.spring.TransactionInterceptionTest.MessageConfig;
 
 @RunWith(SpringRunner.class)
 @SpringBootTest(classes = {TransactionTestMain.class, MessageConfig.class})
diff --git a/omega/omega-spring-tx/src/test/java/io/servicecomb/saga/omega/transaction/spring/TransactionTestMain.java b/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/saga/omega/transaction/spring/TransactionTestMain.java
similarity index 94%
rename from omega/omega-spring-tx/src/test/java/io/servicecomb/saga/omega/transaction/spring/TransactionTestMain.java
rename to omega/omega-spring-tx/src/test/java/org/apache/servicecomb/saga/omega/transaction/spring/TransactionTestMain.java
index 7632eb3..ab9bb7e 100644
--- a/omega/omega-spring-tx/src/test/java/io/servicecomb/saga/omega/transaction/spring/TransactionTestMain.java
+++ b/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/saga/omega/transaction/spring/TransactionTestMain.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.omega.transaction.spring;
+package org.apache.servicecomb.saga.omega.transaction.spring;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
diff --git a/omega/omega-spring-tx/src/test/java/io/servicecomb/saga/omega/transaction/spring/TransactionalUserService.java b/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/saga/omega/transaction/spring/TransactionalUserService.java
similarity index 91%
rename from omega/omega-spring-tx/src/test/java/io/servicecomb/saga/omega/transaction/spring/TransactionalUserService.java
rename to omega/omega-spring-tx/src/test/java/org/apache/servicecomb/saga/omega/transaction/spring/TransactionalUserService.java
index 7538253..0a8cdfd 100644
--- a/omega/omega-spring-tx/src/test/java/io/servicecomb/saga/omega/transaction/spring/TransactionalUserService.java
+++ b/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/saga/omega/transaction/spring/TransactionalUserService.java
@@ -15,12 +15,12 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.omega.transaction.spring;
+package org.apache.servicecomb.saga.omega.transaction.spring;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
-import io.servicecomb.saga.omega.transaction.annotations.Compensable;
+import org.apache.servicecomb.saga.omega.transaction.annotations.Compensable;
 
 @Component
 class TransactionalUserService {
diff --git a/omega/omega-spring-tx/src/test/java/io/servicecomb/saga/omega/transaction/spring/User.java b/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/saga/omega/transaction/spring/User.java
similarity index 96%
rename from omega/omega-spring-tx/src/test/java/io/servicecomb/saga/omega/transaction/spring/User.java
rename to omega/omega-spring-tx/src/test/java/org/apache/servicecomb/saga/omega/transaction/spring/User.java
index 5af25e4..9b7f474 100644
--- a/omega/omega-spring-tx/src/test/java/io/servicecomb/saga/omega/transaction/spring/User.java
+++ b/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/saga/omega/transaction/spring/User.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.omega.transaction.spring;
+package org.apache.servicecomb.saga.omega.transaction.spring;
 
 import java.util.Objects;
 
diff --git a/omega/omega-spring-tx/src/test/java/io/servicecomb/saga/omega/transaction/spring/UserRepository.java b/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/saga/omega/transaction/spring/UserRepository.java
similarity index 93%
rename from omega/omega-spring-tx/src/test/java/io/servicecomb/saga/omega/transaction/spring/UserRepository.java
rename to omega/omega-spring-tx/src/test/java/org/apache/servicecomb/saga/omega/transaction/spring/UserRepository.java
index 14f9e95..bcf3e14 100644
--- a/omega/omega-spring-tx/src/test/java/io/servicecomb/saga/omega/transaction/spring/UserRepository.java
+++ b/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/saga/omega/transaction/spring/UserRepository.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.omega.transaction.spring;
+package org.apache.servicecomb.saga.omega.transaction.spring;
 
 import org.springframework.data.repository.CrudRepository;
 
diff --git a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/CompensationMessageHandler.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/CompensationMessageHandler.java
similarity index 92%
rename from omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/CompensationMessageHandler.java
rename to omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/CompensationMessageHandler.java
index edc3243..2e0836e 100644
--- a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/CompensationMessageHandler.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/CompensationMessageHandler.java
@@ -15,9 +15,9 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.omega.transaction;
+package org.apache.servicecomb.saga.omega.transaction;
 
-import io.servicecomb.saga.omega.context.OmegaContext;
+import org.apache.servicecomb.saga.omega.context.OmegaContext;
 
 public class CompensationMessageHandler implements MessageHandler {
   private final MessageSender sender;
diff --git a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/FailedTransactionInterceptor.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/FailedTransactionInterceptor.java
similarity index 95%
rename from omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/FailedTransactionInterceptor.java
rename to omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/FailedTransactionInterceptor.java
index 9c164dd..862efc9 100644
--- a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/FailedTransactionInterceptor.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/FailedTransactionInterceptor.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.omega.transaction;
+package org.apache.servicecomb.saga.omega.transaction;
 
 class FailedTransactionInterceptor {
   private final MessageSender sender;
diff --git a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/MessageDeserializer.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/MessageDeserializer.java
similarity index 94%
rename from omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/MessageDeserializer.java
rename to omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/MessageDeserializer.java
index e5348f4..23f1126 100644
--- a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/MessageDeserializer.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/MessageDeserializer.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.omega.transaction;
+package org.apache.servicecomb.saga.omega.transaction;
 
 public interface MessageDeserializer {
   Object[] deserialize(byte[] message);
diff --git a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/MessageHandler.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/MessageHandler.java
similarity index 94%
rename from omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/MessageHandler.java
rename to omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/MessageHandler.java
index d867085..ada064e 100644
--- a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/MessageHandler.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/MessageHandler.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.omega.transaction;
+package org.apache.servicecomb.saga.omega.transaction;
 
 public interface MessageHandler {
   void onReceive(String globalTxId, String localTxId, String parentTxId, String compensationMethod, Object... payloads);
diff --git a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/MessageSender.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/MessageSender.java
similarity index 94%
rename from omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/MessageSender.java
rename to omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/MessageSender.java
index 1cb8362..641fe52 100644
--- a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/MessageSender.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/MessageSender.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.omega.transaction;
+package org.apache.servicecomb.saga.omega.transaction;
 
 public interface MessageSender {
   void send(TxEvent event);
diff --git a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/MessageSerializer.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/MessageSerializer.java
similarity index 94%
rename from omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/MessageSerializer.java
rename to omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/MessageSerializer.java
index 2148eb6..7dfe0ca 100644
--- a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/MessageSerializer.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/MessageSerializer.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.omega.transaction;
+package org.apache.servicecomb.saga.omega.transaction;
 
 public interface MessageSerializer {
   byte[] serialize(TxEvent event);
diff --git a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/OmegaException.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/OmegaException.java
similarity index 94%
rename from omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/OmegaException.java
rename to omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/OmegaException.java
index a67b2ce..89eb67f 100644
--- a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/OmegaException.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/OmegaException.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.omega.transaction;
+package org.apache.servicecomb.saga.omega.transaction;
 
 public class OmegaException extends RuntimeException {
 
diff --git a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/PostTransactionInterceptor.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/PostTransactionInterceptor.java
similarity index 95%
rename from omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/PostTransactionInterceptor.java
rename to omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/PostTransactionInterceptor.java
index 9ea4191..4197560 100644
--- a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/PostTransactionInterceptor.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/PostTransactionInterceptor.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.omega.transaction;
+package org.apache.servicecomb.saga.omega.transaction;
 
 class PostTransactionInterceptor {
   private final MessageSender sender;
diff --git a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/PreTransactionInterceptor.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/PreTransactionInterceptor.java
similarity index 95%
rename from omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/PreTransactionInterceptor.java
rename to omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/PreTransactionInterceptor.java
index a2ea5b0..3280d11 100644
--- a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/PreTransactionInterceptor.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/PreTransactionInterceptor.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.omega.transaction;
+package org.apache.servicecomb.saga.omega.transaction;
 
 class PreTransactionInterceptor {
   private final MessageSender sender;
diff --git a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TransactionAspect.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/TransactionAspect.java
similarity index 91%
rename from omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TransactionAspect.java
rename to omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/TransactionAspect.java
index 6390bc7..2b68da5 100644
--- a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TransactionAspect.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/TransactionAspect.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.omega.transaction;
+package org.apache.servicecomb.saga.omega.transaction;
 
 import java.lang.invoke.MethodHandles;
 import java.lang.reflect.Method;
@@ -27,8 +27,8 @@ import org.aspectj.lang.reflect.MethodSignature;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import io.servicecomb.saga.omega.context.OmegaContext;
-import io.servicecomb.saga.omega.transaction.annotations.Compensable;
+import org.apache.servicecomb.saga.omega.context.OmegaContext;
+import org.apache.servicecomb.saga.omega.transaction.annotations.Compensable;
 
 @Aspect
 public class TransactionAspect {
@@ -45,7 +45,7 @@ public class TransactionAspect {
     this.failedTransactionInterceptor = new FailedTransactionInterceptor(sender);
   }
 
-  @Around("execution(@io.servicecomb.saga.omega.transaction.annotations.Compensable * *(..)) && @annotation(compensable)")
+  @Around("execution(@org.apache.servicecomb.saga.omega.transaction.annotations.Compensable * *(..)) && @annotation(compensable)")
   Object advise(ProceedingJoinPoint joinPoint, Compensable compensable) throws Throwable {
     Method method = ((MethodSignature) joinPoint.getSignature()).getMethod();
     LOG.debug("Intercepting compensable method {} with context {}", method.toString(), context);
diff --git a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxAbortedEvent.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/TxAbortedEvent.java
similarity index 95%
rename from omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxAbortedEvent.java
rename to omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/TxAbortedEvent.java
index 0d7e5ba..0bba8a1 100644
--- a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxAbortedEvent.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/TxAbortedEvent.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.omega.transaction;
+package org.apache.servicecomb.saga.omega.transaction;
 
 import java.io.PrintWriter;
 import java.io.StringWriter;
diff --git a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxCompensatedEvent.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/TxCompensatedEvent.java
similarity index 94%
rename from omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxCompensatedEvent.java
rename to omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/TxCompensatedEvent.java
index 8d518d6..733e060 100644
--- a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxCompensatedEvent.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/TxCompensatedEvent.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.omega.transaction;
+package org.apache.servicecomb.saga.omega.transaction;
 
 public class TxCompensatedEvent extends TxEvent {
   public TxCompensatedEvent(String globalTxId, String localTxId, String parentTxId, String compensationMethod) {
diff --git a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxEndedEvent.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/TxEndedEvent.java
similarity index 94%
rename from omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxEndedEvent.java
rename to omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/TxEndedEvent.java
index 6922f29..b08932c 100644
--- a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxEndedEvent.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/TxEndedEvent.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.omega.transaction;
+package org.apache.servicecomb.saga.omega.transaction;
 
 public class TxEndedEvent extends TxEvent {
   public TxEndedEvent(String globalTxId, String localTxId, String parentTxId, String compensationMethod) {
diff --git a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxEvent.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/TxEvent.java
similarity index 97%
rename from omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxEvent.java
rename to omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/TxEvent.java
index a11a9ad..725ef08 100644
--- a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxEvent.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/TxEvent.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.omega.transaction;
+package org.apache.servicecomb.saga.omega.transaction;
 
 import java.util.Arrays;
 
diff --git a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxStartedEvent.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/TxStartedEvent.java
similarity index 95%
rename from omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxStartedEvent.java
rename to omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/TxStartedEvent.java
index 13534ac..d54b061 100644
--- a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/TxStartedEvent.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/TxStartedEvent.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.omega.transaction;
+package org.apache.servicecomb.saga.omega.transaction;
 
 public class TxStartedEvent extends TxEvent {
 
diff --git a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/annotations/Compensable.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/annotations/Compensable.java
similarity index 94%
rename from omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/annotations/Compensable.java
rename to omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/annotations/Compensable.java
index bb86666..0777ce4 100644
--- a/omega/omega-transaction/src/main/java/io/servicecomb/saga/omega/transaction/annotations/Compensable.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/annotations/Compensable.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.omega.transaction.annotations;
+package org.apache.servicecomb.saga.omega.transaction.annotations;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
diff --git a/omega/omega-transaction/src/test/java/io/servicecomb/saga/omega/transaction/CompensationMessageHandlerTest.java b/omega/omega-transaction/src/test/java/org/apache/servicecomb/saga/omega/transaction/CompensationMessageHandlerTest.java
similarity index 95%
rename from omega/omega-transaction/src/test/java/io/servicecomb/saga/omega/transaction/CompensationMessageHandlerTest.java
rename to omega/omega-transaction/src/test/java/org/apache/servicecomb/saga/omega/transaction/CompensationMessageHandlerTest.java
index 1070e59..2ecd82f 100644
--- a/omega/omega-transaction/src/test/java/io/servicecomb/saga/omega/transaction/CompensationMessageHandlerTest.java
+++ b/omega/omega-transaction/src/test/java/org/apache/servicecomb/saga/omega/transaction/CompensationMessageHandlerTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.omega.transaction;
+package org.apache.servicecomb.saga.omega.transaction;
 
 import static com.seanyinx.github.unit.scaffolding.Randomness.uniquify;
 import static org.hamcrest.core.Is.is;
@@ -26,10 +26,9 @@ import static org.mockito.Mockito.verify;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.servicecomb.saga.omega.context.OmegaContext;
 import org.junit.Test;
 
-import io.servicecomb.saga.omega.context.OmegaContext;
-
 public class CompensationMessageHandlerTest {
 
   private final List<TxEvent> events = new ArrayList<>();
diff --git a/omega/omega-transaction/src/test/java/io/servicecomb/saga/omega/transaction/PostTransactionInterceptorTest.java b/omega/omega-transaction/src/test/java/org/apache/servicecomb/saga/omega/transaction/PostTransactionInterceptorTest.java
similarity index 97%
rename from omega/omega-transaction/src/test/java/io/servicecomb/saga/omega/transaction/PostTransactionInterceptorTest.java
rename to omega/omega-transaction/src/test/java/org/apache/servicecomb/saga/omega/transaction/PostTransactionInterceptorTest.java
index b2e18ab..50a9cae 100644
--- a/omega/omega-transaction/src/test/java/io/servicecomb/saga/omega/transaction/PostTransactionInterceptorTest.java
+++ b/omega/omega-transaction/src/test/java/org/apache/servicecomb/saga/omega/transaction/PostTransactionInterceptorTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.omega.transaction;
+package org.apache.servicecomb.saga.omega.transaction;
 
 import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertThat;
diff --git a/omega/omega-transaction/src/test/java/io/servicecomb/saga/omega/transaction/PreTransactionInterceptorTest.java b/omega/omega-transaction/src/test/java/org/apache/servicecomb/saga/omega/transaction/PreTransactionInterceptorTest.java
similarity index 97%
rename from omega/omega-transaction/src/test/java/io/servicecomb/saga/omega/transaction/PreTransactionInterceptorTest.java
rename to omega/omega-transaction/src/test/java/org/apache/servicecomb/saga/omega/transaction/PreTransactionInterceptorTest.java
index 5d5d832..0a54e26 100644
--- a/omega/omega-transaction/src/test/java/io/servicecomb/saga/omega/transaction/PreTransactionInterceptorTest.java
+++ b/omega/omega-transaction/src/test/java/org/apache/servicecomb/saga/omega/transaction/PreTransactionInterceptorTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.omega.transaction;
+package org.apache.servicecomb.saga.omega.transaction;
 
 import static com.seanyinx.github.unit.scaffolding.Randomness.uniquify;
 import static java.util.Arrays.asList;
diff --git a/omega/omega-transport/omega-transport-resttemplate/src/main/java/io/servicecomb/saga/omega/transport/resttemplate/RestTemplateConfig.java b/omega/omega-transport/omega-transport-resttemplate/src/main/java/org/apache/servicecomb/saga/omega/transport/resttemplate/RestTemplateConfig.java
similarity index 91%
rename from omega/omega-transport/omega-transport-resttemplate/src/main/java/io/servicecomb/saga/omega/transport/resttemplate/RestTemplateConfig.java
rename to omega/omega-transport/omega-transport-resttemplate/src/main/java/org/apache/servicecomb/saga/omega/transport/resttemplate/RestTemplateConfig.java
index 053e3ff..e9aac31 100644
--- a/omega/omega-transport/omega-transport-resttemplate/src/main/java/io/servicecomb/saga/omega/transport/resttemplate/RestTemplateConfig.java
+++ b/omega/omega-transport/omega-transport-resttemplate/src/main/java/org/apache/servicecomb/saga/omega/transport/resttemplate/RestTemplateConfig.java
@@ -16,7 +16,7 @@
  *
  */
 
-package io.servicecomb.saga.omega.transport.resttemplate;
+package org.apache.servicecomb.saga.omega.transport.resttemplate;
 
 import java.util.List;
 
@@ -25,7 +25,7 @@ import org.springframework.context.annotation.Configuration;
 import org.springframework.http.client.ClientHttpRequestInterceptor;
 import org.springframework.web.client.RestTemplate;
 
-import io.servicecomb.saga.omega.context.OmegaContext;
+import org.apache.servicecomb.saga.omega.context.OmegaContext;
 
 @Configuration
 public class RestTemplateConfig {
diff --git a/omega/omega-transport/omega-transport-resttemplate/src/main/java/io/servicecomb/saga/omega/transport/resttemplate/TransactionClientHttpRequestInterceptor.java b/omega/omega-transport/omega-transport-resttemplate/src/main/java/org/apache/servicecomb/saga/omega/transport/resttemplate/TransactionClientHttpRequestInterceptor.java
similarity index 82%
rename from omega/omega-transport/omega-transport-resttemplate/src/main/java/io/servicecomb/saga/omega/transport/resttemplate/TransactionClientHttpRequestInterceptor.java
rename to omega/omega-transport/omega-transport-resttemplate/src/main/java/org/apache/servicecomb/saga/omega/transport/resttemplate/TransactionClientHttpRequestInterceptor.java
index 35bc9d0..5b4ceda 100644
--- a/omega/omega-transport/omega-transport-resttemplate/src/main/java/io/servicecomb/saga/omega/transport/resttemplate/TransactionClientHttpRequestInterceptor.java
+++ b/omega/omega-transport/omega-transport-resttemplate/src/main/java/org/apache/servicecomb/saga/omega/transport/resttemplate/TransactionClientHttpRequestInterceptor.java
@@ -16,20 +16,16 @@
  *
  */
 
-package io.servicecomb.saga.omega.transport.resttemplate;
-
-import static io.servicecomb.saga.omega.context.OmegaContext.GLOBAL_TX_ID_KEY;
-import static io.servicecomb.saga.omega.context.OmegaContext.LOCAL_TX_ID_KEY;
+package org.apache.servicecomb.saga.omega.transport.resttemplate;
 
 import java.io.IOException;
 
+import org.apache.servicecomb.saga.omega.context.OmegaContext;
 import org.springframework.http.HttpRequest;
 import org.springframework.http.client.ClientHttpRequestExecution;
 import org.springframework.http.client.ClientHttpRequestInterceptor;
 import org.springframework.http.client.ClientHttpResponse;
 
-import io.servicecomb.saga.omega.context.OmegaContext;
-
 class TransactionClientHttpRequestInterceptor implements ClientHttpRequestInterceptor {
 
   private final OmegaContext omegaContext;
@@ -42,8 +38,8 @@ class TransactionClientHttpRequestInterceptor implements ClientHttpRequestInterc
   public ClientHttpResponse intercept(HttpRequest request, byte[] body,
       ClientHttpRequestExecution execution) throws IOException {
 
-    request.getHeaders().add(GLOBAL_TX_ID_KEY, globalTxId());
-    request.getHeaders().add(LOCAL_TX_ID_KEY, localTxId());
+    request.getHeaders().add(OmegaContext.GLOBAL_TX_ID_KEY, globalTxId());
+    request.getHeaders().add(OmegaContext.LOCAL_TX_ID_KEY, localTxId());
     return execution.execute(request, body);
   }
 
diff --git a/omega/omega-transport/omega-transport-resttemplate/src/main/java/io/servicecomb/saga/omega/transport/resttemplate/TransactionHandlerInterceptor.java b/omega/omega-transport/omega-transport-resttemplate/src/main/java/org/apache/servicecomb/saga/omega/transport/resttemplate/TransactionHandlerInterceptor.java
similarity index 81%
rename from omega/omega-transport/omega-transport-resttemplate/src/main/java/io/servicecomb/saga/omega/transport/resttemplate/TransactionHandlerInterceptor.java
rename to omega/omega-transport/omega-transport-resttemplate/src/main/java/org/apache/servicecomb/saga/omega/transport/resttemplate/TransactionHandlerInterceptor.java
index d71c558..d83786e 100644
--- a/omega/omega-transport/omega-transport-resttemplate/src/main/java/io/servicecomb/saga/omega/transport/resttemplate/TransactionHandlerInterceptor.java
+++ b/omega/omega-transport/omega-transport-resttemplate/src/main/java/org/apache/servicecomb/saga/omega/transport/resttemplate/TransactionHandlerInterceptor.java
@@ -18,23 +18,19 @@
  *
  */
 
-package io.servicecomb.saga.omega.transport.resttemplate;
-
-import static io.servicecomb.saga.omega.context.OmegaContext.GLOBAL_TX_ID_KEY;
-import static io.servicecomb.saga.omega.context.OmegaContext.LOCAL_TX_ID_KEY;
+package org.apache.servicecomb.saga.omega.transport.resttemplate;
 
 import java.lang.invoke.MethodHandles;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.apache.servicecomb.saga.omega.context.OmegaContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.web.servlet.HandlerInterceptor;
 import org.springframework.web.servlet.ModelAndView;
 
-import io.servicecomb.saga.omega.context.OmegaContext;
-
 class TransactionHandlerInterceptor implements HandlerInterceptor {
 
   private static Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
@@ -47,13 +43,13 @@ class TransactionHandlerInterceptor implements HandlerInterceptor {
 
   @Override
   public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
-    String globalTxId = request.getHeader(GLOBAL_TX_ID_KEY);
+    String globalTxId = request.getHeader(OmegaContext.GLOBAL_TX_ID_KEY);
     if (globalTxId == null) {
-      LOG.debug("no such header: {}", GLOBAL_TX_ID_KEY);
+      LOG.debug("no such header: {}", OmegaContext.GLOBAL_TX_ID_KEY);
     } else {
       omegaContext.setGlobalTxId(globalTxId);
       omegaContext.newLocalTxId();
-      omegaContext.setParentTxId(request.getHeader(LOCAL_TX_ID_KEY));
+      omegaContext.setParentTxId(request.getHeader(OmegaContext.LOCAL_TX_ID_KEY));
     }
     return true;
   }
diff --git a/omega/omega-transport/omega-transport-resttemplate/src/main/java/io/servicecomb/saga/omega/transport/resttemplate/WebConfig.java b/omega/omega-transport/omega-transport-resttemplate/src/main/java/org/apache/servicecomb/saga/omega/transport/resttemplate/WebConfig.java
similarity index 92%
rename from omega/omega-transport/omega-transport-resttemplate/src/main/java/io/servicecomb/saga/omega/transport/resttemplate/WebConfig.java
rename to omega/omega-transport/omega-transport-resttemplate/src/main/java/org/apache/servicecomb/saga/omega/transport/resttemplate/WebConfig.java
index 7650d3c..255d20b 100644
--- a/omega/omega-transport/omega-transport-resttemplate/src/main/java/io/servicecomb/saga/omega/transport/resttemplate/WebConfig.java
+++ b/omega/omega-transport/omega-transport-resttemplate/src/main/java/org/apache/servicecomb/saga/omega/transport/resttemplate/WebConfig.java
@@ -18,16 +18,15 @@
  *
  */
 
-package io.servicecomb.saga.omega.transport.resttemplate;
+package org.apache.servicecomb.saga.omega.transport.resttemplate;
 
+import org.apache.servicecomb.saga.omega.context.OmegaContext;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.web.servlet.config.annotation.EnableWebMvc;
 import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
 
-import io.servicecomb.saga.omega.context.OmegaContext;
-
 @Configuration
 @EnableWebMvc
 public class WebConfig extends WebMvcConfigurerAdapter {
diff --git a/omega/omega-transport/omega-transport-resttemplate/src/main/resources/META-INF/spring.factories b/omega/omega-transport/omega-transport-resttemplate/src/main/resources/META-INF/spring.factories
index 7d03c78..00a5c7c 100644
--- a/omega/omega-transport/omega-transport-resttemplate/src/main/resources/META-INF/spring.factories
+++ b/omega/omega-transport/omega-transport-resttemplate/src/main/resources/META-INF/spring.factories
@@ -15,5 +15,5 @@
 ## limitations under the License.
 ## ---------------------------------------------------------------------------
 org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
-  io.servicecomb.saga.omega.transport.resttemplate.WebConfig,\
-  io.servicecomb.saga.omega.transport.resttemplate.RestTemplateConfig
+  org.apache.servicecomb.saga.omega.transport.resttemplate.WebConfig,\
+  org.apache.servicecomb.saga.omega.transport.resttemplate.RestTemplateConfig
diff --git a/omega/omega-transport/omega-transport-resttemplate/src/test/java/io/servicecomb/saga/omega/transport/resttemplate/TransactionClientHttpRequestInterceptorTest.java b/omega/omega-transport/omega-transport-resttemplate/src/test/java/org/apache/servicecomb/saga/omega/transport/resttemplate/TransactionClientHttpRequestInterceptorTest.java
similarity index 83%
rename from omega/omega-transport/omega-transport-resttemplate/src/test/java/io/servicecomb/saga/omega/transport/resttemplate/TransactionClientHttpRequestInterceptorTest.java
rename to omega/omega-transport/omega-transport-resttemplate/src/test/java/org/apache/servicecomb/saga/omega/transport/resttemplate/TransactionClientHttpRequestInterceptorTest.java
index 223b56c..82e74cf 100644
--- a/omega/omega-transport/omega-transport-resttemplate/src/test/java/io/servicecomb/saga/omega/transport/resttemplate/TransactionClientHttpRequestInterceptorTest.java
+++ b/omega/omega-transport/omega-transport-resttemplate/src/test/java/org/apache/servicecomb/saga/omega/transport/resttemplate/TransactionClientHttpRequestInterceptorTest.java
@@ -16,11 +16,9 @@
  *
  */
 
-package io.servicecomb.saga.omega.transport.resttemplate;
+package org.apache.servicecomb.saga.omega.transport.resttemplate;
 
 import static com.seanyinx.github.unit.scaffolding.Randomness.uniquify;
-import static io.servicecomb.saga.omega.context.OmegaContext.GLOBAL_TX_ID_KEY;
-import static io.servicecomb.saga.omega.context.OmegaContext.LOCAL_TX_ID_KEY;
 import static org.hamcrest.Matchers.contains;
 import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertThat;
@@ -29,6 +27,8 @@ import static org.mockito.Mockito.when;
 
 import java.io.IOException;
 
+import org.apache.servicecomb.saga.omega.context.IdGenerator;
+import org.apache.servicecomb.saga.omega.context.OmegaContext;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -40,9 +40,6 @@ import org.springframework.http.client.ClientHttpRequestExecution;
 import org.springframework.http.client.ClientHttpRequestInterceptor;
 import org.springframework.http.client.ClientHttpResponse;
 
-import io.servicecomb.saga.omega.context.IdGenerator;
-import io.servicecomb.saga.omega.context.OmegaContext;
-
 @SuppressWarnings("unchecked")
 @RunWith(JUnit4.class)
 public class TransactionClientHttpRequestInterceptorTest {
@@ -75,8 +72,8 @@ public class TransactionClientHttpRequestInterceptorTest {
 
     clientHttpRequestInterceptor.intercept(request, null, execution);
 
-    assertThat(request.getHeaders().get(GLOBAL_TX_ID_KEY), contains(globalTxId));
-    assertThat(request.getHeaders().get(LOCAL_TX_ID_KEY), contains(localTxId));
+    assertThat(request.getHeaders().get(OmegaContext.GLOBAL_TX_ID_KEY), contains(globalTxId));
+    assertThat(request.getHeaders().get(OmegaContext.LOCAL_TX_ID_KEY), contains(localTxId));
 
     assertThat(omegaContext.globalTxId(), is(globalTxId));
     assertThat(omegaContext.localTxId(), is(localTxId));
@@ -93,10 +90,10 @@ public class TransactionClientHttpRequestInterceptorTest {
 
     clientHttpRequestInterceptor.intercept(request, null, execution);
 
-    assertThat(request.getHeaders().get(GLOBAL_TX_ID_KEY), contains(globalTxId));
-    assertThat(request.getHeaders().get(LOCAL_TX_ID_KEY), contains(localTxId));
+    assertThat(request.getHeaders().get(OmegaContext.GLOBAL_TX_ID_KEY), contains(globalTxId));
+    assertThat(request.getHeaders().get(OmegaContext.LOCAL_TX_ID_KEY), contains(localTxId));
 
     assertThat(omegaContext.globalTxId(), is(globalTxId));
     assertThat(omegaContext.localTxId(), is(localTxId));
   }
-}
\ No newline at end of file
+}
diff --git a/omega/omega-transport/omega-transport-resttemplate/src/test/java/io/servicecomb/saga/omega/transport/resttemplate/TransactionHandlerInterceptorTest.java b/omega/omega-transport/omega-transport-resttemplate/src/test/java/org/apache/servicecomb/saga/omega/transport/resttemplate/TransactionHandlerInterceptorTest.java
similarity index 82%
rename from omega/omega-transport/omega-transport-resttemplate/src/test/java/io/servicecomb/saga/omega/transport/resttemplate/TransactionHandlerInterceptorTest.java
rename to omega/omega-transport/omega-transport-resttemplate/src/test/java/org/apache/servicecomb/saga/omega/transport/resttemplate/TransactionHandlerInterceptorTest.java
index 4aabddd..6ee816b 100644
--- a/omega/omega-transport/omega-transport-resttemplate/src/test/java/io/servicecomb/saga/omega/transport/resttemplate/TransactionHandlerInterceptorTest.java
+++ b/omega/omega-transport/omega-transport-resttemplate/src/test/java/org/apache/servicecomb/saga/omega/transport/resttemplate/TransactionHandlerInterceptorTest.java
@@ -16,10 +16,8 @@
  *
  */
 
-package io.servicecomb.saga.omega.transport.resttemplate;
+package org.apache.servicecomb.saga.omega.transport.resttemplate;
 
-import static io.servicecomb.saga.omega.context.OmegaContext.GLOBAL_TX_ID_KEY;
-import static io.servicecomb.saga.omega.context.OmegaContext.LOCAL_TX_ID_KEY;
 import static org.hamcrest.Matchers.is;
 import static org.hamcrest.Matchers.notNullValue;
 import static org.hamcrest.Matchers.nullValue;
@@ -32,12 +30,11 @@ import java.util.UUID;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.apache.servicecomb.saga.omega.context.OmegaContext;
 import org.junit.Before;
 import org.junit.Test;
 import org.springframework.web.servlet.HandlerInterceptor;
 
-import io.servicecomb.saga.omega.context.OmegaContext;
-
 public class TransactionHandlerInterceptorTest {
 
   private static final String globalTxId = UUID.randomUUID().toString();
@@ -61,8 +58,8 @@ public class TransactionHandlerInterceptorTest {
 
   @Test
   public void setUpOmegaContextInTransactionRequest() throws Exception {
-    when(request.getHeader(GLOBAL_TX_ID_KEY)).thenReturn(globalTxId);
-    when(request.getHeader(LOCAL_TX_ID_KEY)).thenReturn(localTxId);
+    when(request.getHeader(OmegaContext.GLOBAL_TX_ID_KEY)).thenReturn(globalTxId);
+    when(request.getHeader(OmegaContext.LOCAL_TX_ID_KEY)).thenReturn(localTxId);
 
     requestInterceptor.preHandle(request, response, null);
 
@@ -73,8 +70,8 @@ public class TransactionHandlerInterceptorTest {
 
   @Test
   public void doNothingInNonTransactionRequest() throws Exception {
-    when(request.getHeader(GLOBAL_TX_ID_KEY)).thenReturn(null);
-    when(request.getHeader(LOCAL_TX_ID_KEY)).thenReturn(null);
+    when(request.getHeader(OmegaContext.GLOBAL_TX_ID_KEY)).thenReturn(null);
+    when(request.getHeader(OmegaContext.LOCAL_TX_ID_KEY)).thenReturn(null);
 
     requestInterceptor.preHandle(request, response, null);
 
@@ -82,4 +79,4 @@ public class TransactionHandlerInterceptorTest {
     assertThat(omegaContext.parentTxId(), is(nullValue()));
     assertThat(omegaContext.localTxId(), is(nullValue()));
   }
-}
\ No newline at end of file
+}
diff --git a/omega/omega-transport/omega-transport-resttemplate/src/test/java/io/servicecomb/saga/omega/transport/resttemplate/UniqueIdGeneratorTest.java b/omega/omega-transport/omega-transport-resttemplate/src/test/java/org/apache/servicecomb/saga/omega/transport/resttemplate/UniqueIdGeneratorTest.java
similarity index 93%
rename from omega/omega-transport/omega-transport-resttemplate/src/test/java/io/servicecomb/saga/omega/transport/resttemplate/UniqueIdGeneratorTest.java
rename to omega/omega-transport/omega-transport-resttemplate/src/test/java/org/apache/servicecomb/saga/omega/transport/resttemplate/UniqueIdGeneratorTest.java
index 720eb0b..88ffac2 100644
--- a/omega/omega-transport/omega-transport-resttemplate/src/test/java/io/servicecomb/saga/omega/transport/resttemplate/UniqueIdGeneratorTest.java
+++ b/omega/omega-transport/omega-transport-resttemplate/src/test/java/org/apache/servicecomb/saga/omega/transport/resttemplate/UniqueIdGeneratorTest.java
@@ -16,7 +16,7 @@
  *
  */
 
-package io.servicecomb.saga.omega.transport.resttemplate;
+package org.apache.servicecomb.saga.omega.transport.resttemplate;
 
 import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertThat;
@@ -32,10 +32,9 @@ import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
 
+import org.apache.servicecomb.saga.omega.context.UniqueIdGenerator;
 import org.junit.Test;
 
-import io.servicecomb.saga.omega.context.UniqueIdGenerator;
-
 public class UniqueIdGeneratorTest {
 
   private final UniqueIdGenerator idGenerator = new UniqueIdGenerator();
@@ -59,4 +58,4 @@ public class UniqueIdGeneratorTest {
     }
     assertThat(ids.size(), is(nThreads));
   }
-}
\ No newline at end of file
+}
diff --git a/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTxEvent.proto b/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTxEvent.proto
index 743df4d..0679637 100644
--- a/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTxEvent.proto
+++ b/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTxEvent.proto
@@ -18,7 +18,7 @@
 syntax = "proto3";
 
 option java_multiple_files = true;
-option java_package = "io.servicecomb.saga.pack.contract.grpc";
+option java_package = "org.apache.servicecomb.saga.pack.contract.grpc";
 option java_outer_classname = "TxEventProto";
 
 service TxEventService {
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/BackwardRecovery.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/BackwardRecovery.java
similarity index 97%
rename from saga-core/src/main/java/io/servicecomb/saga/core/BackwardRecovery.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/BackwardRecovery.java
index 587e4c3..e46de2f 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/BackwardRecovery.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/BackwardRecovery.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 import java.lang.invoke.MethodHandles;
 import kamon.annotation.EnableKamon;
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/Compensation.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/Compensation.java
similarity index 96%
rename from saga-core/src/main/java/io/servicecomb/saga/core/Compensation.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/Compensation.java
index 68c9caf..f642011 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/Compensation.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/Compensation.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 public interface Compensation extends Operation {
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/CompensationTaskConsumer.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/CompensationTaskConsumer.java
similarity index 96%
rename from saga-core/src/main/java/io/servicecomb/saga/core/CompensationTaskConsumer.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/CompensationTaskConsumer.java
index c9375df..736c34d 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/CompensationTaskConsumer.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/CompensationTaskConsumer.java
@@ -15,18 +15,17 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 import java.lang.invoke.MethodHandles;
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.Map;
 
+import org.apache.servicecomb.saga.core.dag.Node;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import io.servicecomb.saga.core.dag.Node;
-
 class CompensationTaskConsumer implements TaskConsumer {
 
   private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/CompositeSagaLog.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/CompositeSagaLog.java
similarity index 96%
rename from saga-core/src/main/java/io/servicecomb/saga/core/CompositeSagaLog.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/CompositeSagaLog.java
index 6d5d1b0..017129a 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/CompositeSagaLog.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/CompositeSagaLog.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 import kamon.annotation.EnableKamon;
 import kamon.annotation.Segment;
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/CompositeSagaResponse.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/CompositeSagaResponse.java
similarity index 97%
rename from saga-core/src/main/java/io/servicecomb/saga/core/CompositeSagaResponse.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/CompositeSagaResponse.java
index 851f826..02ab48c 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/CompositeSagaResponse.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/CompositeSagaResponse.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 import java.util.Collection;
 import java.util.Optional;
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/Descriptive.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/Descriptive.java
similarity index 95%
rename from saga-core/src/main/java/io/servicecomb/saga/core/Descriptive.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/Descriptive.java
index 2f6adb8..bd367af 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/Descriptive.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/Descriptive.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 interface Descriptive {
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/EventContext.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/EventContext.java
similarity index 96%
rename from saga-core/src/main/java/io/servicecomb/saga/core/EventContext.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/EventContext.java
index e785255..79b0c3e 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/EventContext.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/EventContext.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 public interface EventContext {
   void beginTransaction(SagaRequest request);
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/EventEnvelope.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/EventEnvelope.java
similarity index 97%
rename from saga-core/src/main/java/io/servicecomb/saga/core/EventEnvelope.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/EventEnvelope.java
index 0910591..9283b33 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/EventEnvelope.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/EventEnvelope.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 public class EventEnvelope {
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/EventStore.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/EventStore.java
similarity index 95%
rename from saga-core/src/main/java/io/servicecomb/saga/core/EventStore.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/EventStore.java
index 9ad1206..7b7e6e2 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/EventStore.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/EventStore.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 public interface EventStore extends SagaLog, Iterable<SagaEvent> {
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/FailedSagaResponse.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/FailedSagaResponse.java
similarity index 97%
rename from saga-core/src/main/java/io/servicecomb/saga/core/FailedSagaResponse.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/FailedSagaResponse.java
index ba025ea..15d1701 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/FailedSagaResponse.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/FailedSagaResponse.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 import java.io.PrintWriter;
 import java.io.StringWriter;
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/Fallback.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/Fallback.java
similarity index 95%
rename from saga-core/src/main/java/io/servicecomb/saga/core/Fallback.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/Fallback.java
index a614242..fca68a0 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/Fallback.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/Fallback.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 public interface Fallback extends Operation {
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/FallbackPolicy.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/FallbackPolicy.java
similarity index 98%
rename from saga-core/src/main/java/io/servicecomb/saga/core/FallbackPolicy.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/FallbackPolicy.java
index 7257268..48ad67d 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/FallbackPolicy.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/FallbackPolicy.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 import java.lang.invoke.MethodHandles;
 import org.slf4j.Logger;
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/ForwardRecovery.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/ForwardRecovery.java
similarity index 97%
rename from saga-core/src/main/java/io/servicecomb/saga/core/ForwardRecovery.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/ForwardRecovery.java
index a61e905..c783990 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/ForwardRecovery.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/ForwardRecovery.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 import java.lang.invoke.MethodHandles;
 import org.slf4j.Logger;
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/GraphBasedSaga.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/GraphBasedSaga.java
similarity index 91%
rename from saga-core/src/main/java/io/servicecomb/saga/core/GraphBasedSaga.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/GraphBasedSaga.java
index 8e17fa9..f4544e3 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/GraphBasedSaga.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/GraphBasedSaga.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 import java.lang.invoke.MethodHandles;
 import java.util.Map;
@@ -26,11 +26,11 @@ import java.util.concurrent.Executors;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import io.servicecomb.saga.core.dag.ByLevelTraveller;
-import io.servicecomb.saga.core.dag.FromLeafTraversalDirection;
-import io.servicecomb.saga.core.dag.FromRootTraversalDirection;
-import io.servicecomb.saga.core.dag.SingleLeafDirectedAcyclicGraph;
-import io.servicecomb.saga.core.dag.TraversalDirection;
+import org.apache.servicecomb.saga.core.dag.ByLevelTraveller;
+import org.apache.servicecomb.saga.core.dag.FromLeafTraversalDirection;
+import org.apache.servicecomb.saga.core.dag.FromRootTraversalDirection;
+import org.apache.servicecomb.saga.core.dag.SingleLeafDirectedAcyclicGraph;
+import org.apache.servicecomb.saga.core.dag.TraversalDirection;
 import kamon.annotation.EnableKamon;
 import kamon.annotation.Segment;
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/IdGenerator.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/IdGenerator.java
similarity index 95%
rename from saga-core/src/main/java/io/servicecomb/saga/core/IdGenerator.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/IdGenerator.java
index 1119e42..2add260 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/IdGenerator.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/IdGenerator.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 import java.io.Serializable;
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/LoggingRecoveryPolicy.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/LoggingRecoveryPolicy.java
similarity index 97%
rename from saga-core/src/main/java/io/servicecomb/saga/core/LoggingRecoveryPolicy.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/LoggingRecoveryPolicy.java
index 684b5e7..9173eca 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/LoggingRecoveryPolicy.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/LoggingRecoveryPolicy.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 import java.lang.invoke.MethodHandles;
 import kamon.annotation.EnableKamon;
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/LongIdGenerator.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/LongIdGenerator.java
similarity index 96%
rename from saga-core/src/main/java/io/servicecomb/saga/core/LongIdGenerator.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/LongIdGenerator.java
index eaeedf6..6b16075 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/LongIdGenerator.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/LongIdGenerator.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 import java.util.concurrent.atomic.AtomicLong;
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/NoOpSagaRequest.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/NoOpSagaRequest.java
similarity index 80%
rename from saga-core/src/main/java/io/servicecomb/saga/core/NoOpSagaRequest.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/NoOpSagaRequest.java
index 954effc..56ad05e 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/NoOpSagaRequest.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/NoOpSagaRequest.java
@@ -15,15 +15,15 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
-
-import static io.servicecomb.saga.core.Compensation.SAGA_END_COMPENSATION;
-import static io.servicecomb.saga.core.Compensation.SAGA_START_COMPENSATION;
-import static io.servicecomb.saga.core.Operation.TYPE_NOP;
-import static io.servicecomb.saga.core.SagaTask.SAGA_END_TASK;
-import static io.servicecomb.saga.core.SagaTask.SAGA_START_TASK;
-import static io.servicecomb.saga.core.Transaction.SAGA_END_TRANSACTION;
-import static io.servicecomb.saga.core.Transaction.SAGA_START_TRANSACTION;
+package org.apache.servicecomb.saga.core;
+
+import static org.apache.servicecomb.saga.core.Compensation.SAGA_END_COMPENSATION;
+import static org.apache.servicecomb.saga.core.Compensation.SAGA_START_COMPENSATION;
+import static org.apache.servicecomb.saga.core.Operation.TYPE_NOP;
+import static org.apache.servicecomb.saga.core.SagaTask.SAGA_END_TASK;
+import static org.apache.servicecomb.saga.core.SagaTask.SAGA_START_TASK;
+import static org.apache.servicecomb.saga.core.Transaction.SAGA_END_TRANSACTION;
+import static org.apache.servicecomb.saga.core.Transaction.SAGA_START_TRANSACTION;
 
 import java.util.Arrays;
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/Operation.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/Operation.java
similarity index 96%
rename from saga-core/src/main/java/io/servicecomb/saga/core/Operation.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/Operation.java
index 78f953e..13b6f8a 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/Operation.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/Operation.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 public interface Operation {
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/PersistentLog.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/PersistentLog.java
similarity index 95%
rename from saga-core/src/main/java/io/servicecomb/saga/core/PersistentLog.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/PersistentLog.java
index fac559a..26ec4bc 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/PersistentLog.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/PersistentLog.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 public interface PersistentLog {
   void offer(SagaEvent sagaEvent);
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/PersistentStore.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/PersistentStore.java
similarity index 95%
rename from saga-core/src/main/java/io/servicecomb/saga/core/PersistentStore.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/PersistentStore.java
index bf4831f..a7620b3 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/PersistentStore.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/PersistentStore.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 import java.util.List;
 import java.util.Map;
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/RecoveryPolicy.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/RecoveryPolicy.java
similarity index 96%
rename from saga-core/src/main/java/io/servicecomb/saga/core/RecoveryPolicy.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/RecoveryPolicy.java
index d9a9920..c67d640 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/RecoveryPolicy.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/RecoveryPolicy.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 public interface RecoveryPolicy extends Descriptive {
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/RequestProcessTask.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/RequestProcessTask.java
similarity index 98%
rename from saga-core/src/main/java/io/servicecomb/saga/core/RequestProcessTask.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/RequestProcessTask.java
index 0cfaed5..e19c7bf 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/RequestProcessTask.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/RequestProcessTask.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 import kamon.annotation.EnableKamon;
 import kamon.annotation.Segment;
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/RestOperation.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/RestOperation.java
similarity index 92%
rename from saga-core/src/main/java/io/servicecomb/saga/core/RestOperation.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/RestOperation.java
index 415f859..5cce22d 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/RestOperation.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/RestOperation.java
@@ -15,11 +15,11 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 import static java.util.Collections.emptyMap;
 
-import io.servicecomb.saga.core.application.interpreter.RestRequestChecker;
+import org.apache.servicecomb.saga.core.application.interpreter.RestRequestChecker;
 import java.util.Map;
 
 public class RestOperation implements Operation {
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/Saga.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/Saga.java
similarity index 95%
rename from saga-core/src/main/java/io/servicecomb/saga/core/Saga.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/Saga.java
index bc470a8..44f62ea 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/Saga.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/Saga.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 import kamon.annotation.Segment;
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/SagaContext.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaContext.java
similarity index 96%
rename from saga-core/src/main/java/io/servicecomb/saga/core/SagaContext.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaContext.java
index 1e78cf5..309be44 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/SagaContext.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaContext.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 import java.util.function.Consumer;
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/SagaContextImpl.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaContextImpl.java
similarity index 92%
rename from saga-core/src/main/java/io/servicecomb/saga/core/SagaContextImpl.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaContextImpl.java
index 9798478..610ae27 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/SagaContextImpl.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaContextImpl.java
@@ -15,10 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
-
-import static io.servicecomb.saga.core.SagaResponse.EMPTY_RESPONSE;
-import static io.servicecomb.saga.core.SagaResponse.NONE_RESPONSE;
+package org.apache.servicecomb.saga.core;
 
 import java.util.Arrays;
 import java.util.HashMap;
@@ -31,7 +28,7 @@ import java.util.concurrent.ConcurrentSkipListSet;
 import java.util.function.Consumer;
 import java.util.stream.Collectors;
 
-import io.servicecomb.saga.core.application.interpreter.FromJsonFormat;
+import org.apache.servicecomb.saga.core.application.interpreter.FromJsonFormat;
 
 public class SagaContextImpl implements SagaContext {
 
@@ -97,7 +94,7 @@ public class SagaContextImpl implements SagaContext {
 
   @Override
   public SagaResponse responseOf(String requestId) {
-    return completedTransactions.getOrDefault(requestId, NONE_RESPONSE);
+    return completedTransactions.getOrDefault(requestId, SagaResponse.NONE_RESPONSE);
   }
 
   private List<SagaResponse> responsesOf(String[] parentRequestIds) {
@@ -111,7 +108,7 @@ public class SagaContextImpl implements SagaContext {
     List<SagaResponse> responses = responsesOf(parentRequestIds);
 
     if (responses.isEmpty()) {
-      return EMPTY_RESPONSE;
+      return SagaResponse.EMPTY_RESPONSE;
     }
 
     if (responses.size() == 1) {
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/SagaDefinition.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaDefinition.java
similarity index 95%
rename from saga-core/src/main/java/io/servicecomb/saga/core/SagaDefinition.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaDefinition.java
index d266217..406c8df 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/SagaDefinition.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaDefinition.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 public interface SagaDefinition {
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/SagaEndTask.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaEndTask.java
similarity index 91%
rename from saga-core/src/main/java/io/servicecomb/saga/core/SagaEndTask.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaEndTask.java
index 4cb44d3..69daba7 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/SagaEndTask.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaEndTask.java
@@ -15,9 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
-
-import static io.servicecomb.saga.core.SagaResponse.EMPTY_RESPONSE;
+package org.apache.servicecomb.saga.core;
 
 import kamon.annotation.EnableKamon;
 import kamon.annotation.Segment;
@@ -37,7 +35,7 @@ public class SagaEndTask implements SagaTask {
   @Override
   public SagaResponse commit(SagaRequest request, SagaResponse parentResponse) {
     sagaLog.offer(new SagaEndedEvent(sagaId, request));
-    return EMPTY_RESPONSE;
+    return SagaResponse.EMPTY_RESPONSE;
   }
 
   @Override
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/SagaEndedEvent.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaEndedEvent.java
similarity index 96%
rename from saga-core/src/main/java/io/servicecomb/saga/core/SagaEndedEvent.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaEndedEvent.java
index 19847d2..c6f4f9f 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/SagaEndedEvent.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaEndedEvent.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 public class SagaEndedEvent extends SagaEvent {
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/SagaEvent.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaEvent.java
similarity index 96%
rename from saga-core/src/main/java/io/servicecomb/saga/core/SagaEvent.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaEvent.java
index bd7480e..ceb0ebe 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/SagaEvent.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaEvent.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 public abstract class SagaEvent implements Descriptive {
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/SagaException.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaException.java
similarity index 95%
rename from saga-core/src/main/java/io/servicecomb/saga/core/SagaException.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaException.java
index 7149ff2..49ce989 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/SagaException.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaException.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 public class SagaException extends RuntimeException {
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/SagaLog.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaLog.java
similarity index 95%
rename from saga-core/src/main/java/io/servicecomb/saga/core/SagaLog.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaLog.java
index a17bebd..2e07b9f 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/SagaLog.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaLog.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 public interface SagaLog extends PersistentLog {
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/SagaRequest.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaRequest.java
similarity index 91%
rename from saga-core/src/main/java/io/servicecomb/saga/core/SagaRequest.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaRequest.java
index a84d1fd..337abdd 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/SagaRequest.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaRequest.java
@@ -15,9 +15,9 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
-import static io.servicecomb.saga.core.Fallback.NOP_FALLBACK;
+import static org.apache.servicecomb.saga.core.Fallback.NOP_FALLBACK;
 
 public interface SagaRequest {
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/SagaRequestImpl.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaRequestImpl.java
similarity index 95%
rename from saga-core/src/main/java/io/servicecomb/saga/core/SagaRequestImpl.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaRequestImpl.java
index 667be1b..cbb7a23 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/SagaRequestImpl.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaRequestImpl.java
@@ -15,10 +15,9 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
-import static io.servicecomb.saga.core.Fallback.NOP_FALLBACK;
-import static io.servicecomb.saga.core.SagaTask.SAGA_REQUEST_TASK;
+import static org.apache.servicecomb.saga.core.Fallback.NOP_FALLBACK;
 
 import java.util.Arrays;
 
@@ -126,7 +125,7 @@ public class SagaRequestImpl implements SagaRequest {
 
   @Override
   public String task() {
-    return SAGA_REQUEST_TASK;
+    return SagaTask.SAGA_REQUEST_TASK;
   }
 
   @Override
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/SagaResponse.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaResponse.java
similarity index 97%
rename from saga-core/src/main/java/io/servicecomb/saga/core/SagaResponse.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaResponse.java
index 060323e..ecdfe4a 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/SagaResponse.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaResponse.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 public interface SagaResponse {
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/SagaStartFailedException.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaStartFailedException.java
similarity index 95%
rename from saga-core/src/main/java/io/servicecomb/saga/core/SagaStartFailedException.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaStartFailedException.java
index 595a6d9..0de35da 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/SagaStartFailedException.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaStartFailedException.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 public class SagaStartFailedException extends RuntimeException {
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/SagaStartTask.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaStartTask.java
similarity index 93%
rename from saga-core/src/main/java/io/servicecomb/saga/core/SagaStartTask.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaStartTask.java
index bbbf000..d8a6bd1 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/SagaStartTask.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaStartTask.java
@@ -15,9 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
-
-import static io.servicecomb.saga.core.SagaResponse.EMPTY_RESPONSE;
+package org.apache.servicecomb.saga.core;
 
 import kamon.annotation.EnableKamon;
 import kamon.annotation.Segment;
@@ -43,7 +41,7 @@ public class SagaStartTask implements SagaTask {
     } catch (Exception e) {
       throw new SagaStartFailedException("Failed to persist SagaStartedEvent for " + requestJson, e);
     }
-    return EMPTY_RESPONSE;
+    return SagaResponse.EMPTY_RESPONSE;
   }
 
   @Override
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/SagaStartedEvent.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaStartedEvent.java
similarity index 97%
rename from saga-core/src/main/java/io/servicecomb/saga/core/SagaStartedEvent.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaStartedEvent.java
index aaa76b6..0d82fee 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/SagaStartedEvent.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaStartedEvent.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 public class SagaStartedEvent extends SagaEvent {
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/SagaState.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaState.java
similarity index 95%
rename from saga-core/src/main/java/io/servicecomb/saga/core/SagaState.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaState.java
index 028cdec..eae3678 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/SagaState.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaState.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 interface SagaState {
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/SagaTask.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaTask.java
similarity index 96%
rename from saga-core/src/main/java/io/servicecomb/saga/core/SagaTask.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaTask.java
index 0acb97c..73efcc0 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/SagaTask.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaTask.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 public interface SagaTask {
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/SagaTaskFactory.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaTaskFactory.java
similarity index 88%
rename from saga-core/src/main/java/io/servicecomb/saga/core/SagaTaskFactory.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaTaskFactory.java
index 5d69872..0fd2450 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/SagaTaskFactory.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaTaskFactory.java
@@ -15,11 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
-
-import static io.servicecomb.saga.core.SagaTask.SAGA_END_TASK;
-import static io.servicecomb.saga.core.SagaTask.SAGA_REQUEST_TASK;
-import static io.servicecomb.saga.core.SagaTask.SAGA_START_TASK;
+package org.apache.servicecomb.saga.core;
 
 import java.lang.invoke.MethodHandles;
 import java.util.HashMap;
@@ -48,12 +44,12 @@ public class SagaTaskFactory {
     SagaLog compositeSagaLog = compositeSagaLog(sagaLog, persistentStore);
 
     return new HashMap<String, SagaTask>() {{
-      put(SAGA_START_TASK, new SagaStartTask(sagaId, requestJson, compositeSagaLog));
+      put(SagaTask.SAGA_START_TASK, new SagaStartTask(sagaId, requestJson, compositeSagaLog));
 
       SagaLog retrySagaLog = compositeSagaLog(sagaLog, SagaTaskFactory.this.retrySagaLog);
-      put(SAGA_REQUEST_TASK,
+      put(SagaTask.SAGA_REQUEST_TASK,
           new RequestProcessTask(sagaId, retrySagaLog, new LoggingRecoveryPolicy(recoveryPolicy), fallbackPolicy));
-      put(SAGA_END_TASK, new SagaEndTask(sagaId, retrySagaLog));
+      put(SagaTask.SAGA_END_TASK, new SagaEndTask(sagaId, retrySagaLog));
     }};
   }
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/SuccessfulSagaResponse.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SuccessfulSagaResponse.java
similarity index 96%
rename from saga-core/src/main/java/io/servicecomb/saga/core/SuccessfulSagaResponse.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/SuccessfulSagaResponse.java
index 92f1053..d69bdcd 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/SuccessfulSagaResponse.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SuccessfulSagaResponse.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 public class SuccessfulSagaResponse implements SagaResponse {
   private final String body;
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/TaskConsumer.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/TaskConsumer.java
similarity index 91%
rename from saga-core/src/main/java/io/servicecomb/saga/core/TaskConsumer.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/TaskConsumer.java
index bf5292f..5ae7494 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/TaskConsumer.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/TaskConsumer.java
@@ -15,11 +15,11 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 import java.util.Collection;
 
-import io.servicecomb.saga.core.dag.Node;
+import org.apache.servicecomb.saga.core.dag.Node;
 
 interface TaskConsumer {
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/TaskRunner.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/TaskRunner.java
similarity index 93%
rename from saga-core/src/main/java/io/servicecomb/saga/core/TaskRunner.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/TaskRunner.java
index 66da147..c078001 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/TaskRunner.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/TaskRunner.java
@@ -15,10 +15,10 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
-import io.servicecomb.saga.core.dag.Node;
-import io.servicecomb.saga.core.dag.Traveller;
+import org.apache.servicecomb.saga.core.dag.Node;
+import org.apache.servicecomb.saga.core.dag.Traveller;
 
 import java.util.Collection;
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/ToJsonFormat.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/ToJsonFormat.java
similarity index 95%
rename from saga-core/src/main/java/io/servicecomb/saga/core/ToJsonFormat.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/ToJsonFormat.java
index fa74deb..cd6c449 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/ToJsonFormat.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/ToJsonFormat.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 public interface ToJsonFormat {
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/Transaction.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/Transaction.java
similarity index 95%
rename from saga-core/src/main/java/io/servicecomb/saga/core/Transaction.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/Transaction.java
index 73f1881..fafb845 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/Transaction.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/Transaction.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 public interface Transaction extends Operation {
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/TransactionAbortedEvent.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/TransactionAbortedEvent.java
similarity index 97%
rename from saga-core/src/main/java/io/servicecomb/saga/core/TransactionAbortedEvent.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/TransactionAbortedEvent.java
index 92426e6..b117c94 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/TransactionAbortedEvent.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/TransactionAbortedEvent.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 public class TransactionAbortedEvent extends SagaEvent {
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/TransactionCompensatedEvent.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/TransactionCompensatedEvent.java
similarity index 97%
rename from saga-core/src/main/java/io/servicecomb/saga/core/TransactionCompensatedEvent.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/TransactionCompensatedEvent.java
index 51b7718..d6ab298 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/TransactionCompensatedEvent.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/TransactionCompensatedEvent.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 public class TransactionCompensatedEvent extends SagaEvent {
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/TransactionEndedEvent.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/TransactionEndedEvent.java
similarity index 97%
rename from saga-core/src/main/java/io/servicecomb/saga/core/TransactionEndedEvent.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/TransactionEndedEvent.java
index 83c8d34..603c542 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/TransactionEndedEvent.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/TransactionEndedEvent.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 public class TransactionEndedEvent extends SagaEvent {
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/TransactionFailedException.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/TransactionFailedException.java
similarity index 96%
rename from saga-core/src/main/java/io/servicecomb/saga/core/TransactionFailedException.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/TransactionFailedException.java
index f05802d..b55e01a 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/TransactionFailedException.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/TransactionFailedException.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 public class TransactionFailedException extends RuntimeException {
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/TransactionStartedEvent.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/TransactionStartedEvent.java
similarity index 97%
rename from saga-core/src/main/java/io/servicecomb/saga/core/TransactionStartedEvent.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/TransactionStartedEvent.java
index f83a2d5..cc35589 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/TransactionStartedEvent.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/TransactionStartedEvent.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 public class TransactionStartedEvent extends SagaEvent {
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/TransactionTaskConsumer.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/TransactionTaskConsumer.java
similarity index 97%
rename from saga-core/src/main/java/io/servicecomb/saga/core/TransactionTaskConsumer.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/TransactionTaskConsumer.java
index 77021cb..af2dc74 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/TransactionTaskConsumer.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/TransactionTaskConsumer.java
@@ -15,9 +15,9 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
-import io.servicecomb.saga.core.dag.Node;
+import org.apache.servicecomb.saga.core.dag.Node;
 import java.lang.invoke.MethodHandles;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -32,6 +32,7 @@ import java.util.concurrent.Future;
 import kamon.annotation.EnableKamon;
 import kamon.annotation.Segment;
 import kamon.annotation.Trace;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/Transport.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/Transport.java
similarity index 95%
rename from saga-core/src/main/java/io/servicecomb/saga/core/Transport.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/Transport.java
index 20c45a6..5679e0a 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/Transport.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/Transport.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 public interface Transport {
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/TransportFailedException.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/TransportFailedException.java
similarity index 96%
rename from saga-core/src/main/java/io/servicecomb/saga/core/TransportFailedException.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/TransportFailedException.java
index 3b08385..e01a9d5 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/TransportFailedException.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/TransportFailedException.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 public class TransportFailedException extends RuntimeException {
   public TransportFailedException(String cause) {
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/actors/ActorBasedSaga.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/ActorBasedSaga.java
similarity index 75%
rename from saga-core/src/main/java/io/servicecomb/saga/core/actors/ActorBasedSaga.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/ActorBasedSaga.java
index fd2b160..bf60f98 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/actors/ActorBasedSaga.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/ActorBasedSaga.java
@@ -15,19 +15,18 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core.actors;
-
-import static io.servicecomb.saga.core.NoOpSagaRequest.SAGA_START_REQUEST;
-import static io.servicecomb.saga.core.SagaResponse.EMPTY_RESPONSE;
+package org.apache.servicecomb.saga.core.actors;
 
 import java.util.concurrent.CompletableFuture;
 
-import io.servicecomb.saga.core.EventContext;
-import io.servicecomb.saga.core.EventStore;
-import io.servicecomb.saga.core.Saga;
-import io.servicecomb.saga.core.SagaEvent;
-import io.servicecomb.saga.core.SagaResponse;
-import io.servicecomb.saga.core.actors.messages.TransactMessage;
+import org.apache.servicecomb.saga.core.EventContext;
+import org.apache.servicecomb.saga.core.EventStore;
+import org.apache.servicecomb.saga.core.NoOpSagaRequest;
+import org.apache.servicecomb.saga.core.Saga;
+import org.apache.servicecomb.saga.core.SagaResponse;
+import org.apache.servicecomb.saga.core.actors.messages.TransactMessage;
+import org.apache.servicecomb.saga.core.SagaEvent;
+
 import akka.actor.ActorRef;
 
 public class ActorBasedSaga implements Saga {
@@ -48,7 +47,7 @@ public class ActorBasedSaga implements Saga {
 
   @Override
   public SagaResponse run() {
-    root.tell(new TransactMessage(SAGA_START_REQUEST, EMPTY_RESPONSE), completionCallback);
+    root.tell(new TransactMessage(NoOpSagaRequest.SAGA_START_REQUEST, SagaResponse.EMPTY_RESPONSE), completionCallback);
 
     return future.join();
   }
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/actors/ActorBasedSagaFactory.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/ActorBasedSagaFactory.java
similarity index 81%
rename from saga-core/src/main/java/io/servicecomb/saga/core/actors/ActorBasedSagaFactory.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/ActorBasedSagaFactory.java
index 8f8cb7f..8ce22fa 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/actors/ActorBasedSagaFactory.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/ActorBasedSagaFactory.java
@@ -15,21 +15,21 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core.actors;
+package org.apache.servicecomb.saga.core.actors;
 
 import static akka.actor.ActorRef.noSender;
-import static io.servicecomb.saga.core.NoOpSagaRequest.SAGA_START_REQUEST;
 
 import java.util.Set;
 import java.util.concurrent.CompletableFuture;
 
-import io.servicecomb.saga.core.EventStore;
-import io.servicecomb.saga.core.PersistentStore;
-import io.servicecomb.saga.core.SagaDefinition;
-import io.servicecomb.saga.core.SagaResponse;
-import io.servicecomb.saga.core.SagaTaskFactory;
-import io.servicecomb.saga.core.application.SagaFactory;
-import io.servicecomb.saga.core.application.interpreter.FromJsonFormat;
+import org.apache.servicecomb.saga.core.EventStore;
+import org.apache.servicecomb.saga.core.NoOpSagaRequest;
+import org.apache.servicecomb.saga.core.SagaResponse;
+import org.apache.servicecomb.saga.core.application.SagaFactory;
+import org.apache.servicecomb.saga.core.PersistentStore;
+import org.apache.servicecomb.saga.core.SagaDefinition;
+import org.apache.servicecomb.saga.core.SagaTaskFactory;
+import org.apache.servicecomb.saga.core.application.interpreter.FromJsonFormat;
 import akka.actor.ActorRef;
 import akka.actor.ActorSystem;
 import scala.concurrent.Await;
@@ -64,7 +64,7 @@ public class ActorBasedSagaFactory implements SagaFactory {
 
     completionCallback.tell(context, noSender());
     return new ActorBasedSaga(
-        context.actorOf(SAGA_START_REQUEST.id()),
+        context.actorOf(NoOpSagaRequest.SAGA_START_REQUEST.id()),
         completionCallback,
         future,
         sagaLog,
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/actors/CompletionCallbackActor.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/CompletionCallbackActor.java
similarity index 80%
rename from saga-core/src/main/java/io/servicecomb/saga/core/actors/CompletionCallbackActor.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/CompletionCallbackActor.java
index dfda23e..7cee4d3 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/actors/CompletionCallbackActor.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/CompletionCallbackActor.java
@@ -15,17 +15,16 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core.actors;
-
-import static io.servicecomb.saga.core.NoOpSagaRequest.SAGA_END_REQUEST;
+package org.apache.servicecomb.saga.core.actors;
 
 import java.util.concurrent.CompletableFuture;
 
-import io.servicecomb.saga.core.SagaResponse;
-import io.servicecomb.saga.core.actors.messages.AbortMessage;
-import io.servicecomb.saga.core.actors.messages.CompensateMessage;
-import io.servicecomb.saga.core.actors.messages.FailMessage;
-import io.servicecomb.saga.core.actors.messages.TransactMessage;
+import org.apache.servicecomb.saga.core.NoOpSagaRequest;
+import org.apache.servicecomb.saga.core.SagaResponse;
+import org.apache.servicecomb.saga.core.actors.messages.AbortMessage;
+import org.apache.servicecomb.saga.core.actors.messages.CompensateMessage;
+import org.apache.servicecomb.saga.core.actors.messages.FailMessage;
+import org.apache.servicecomb.saga.core.actors.messages.TransactMessage;
 import akka.actor.AbstractLoggingActor;
 import akka.actor.Props;
 
@@ -58,7 +57,7 @@ class CompletionCallbackActor extends AbstractLoggingActor {
 
   private void onAbort(RequestActorContext context, AbortMessage message) {
     log().info("saga actor: received abort message of {}", message.response());
-    context.actorOf(SAGA_END_REQUEST.id()).tell(new CompensateMessage(message.response()), self());
+    context.actorOf(NoOpSagaRequest.SAGA_END_REQUEST.id()).tell(new CompensateMessage(message.response()), self());
   }
 
   private void end(RequestActorContext context, SagaResponse response) {
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/actors/EventContextImpl.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/EventContextImpl.java
similarity index 76%
rename from saga-core/src/main/java/io/servicecomb/saga/core/actors/EventContextImpl.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/EventContextImpl.java
index 8a1562d..21a2928 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/actors/EventContextImpl.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/EventContextImpl.java
@@ -15,17 +15,17 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core.actors;
+package org.apache.servicecomb.saga.core.actors;
 
 import static akka.actor.ActorRef.noSender;
 
-import io.servicecomb.saga.core.EventContext;
-import io.servicecomb.saga.core.SagaRequest;
-import io.servicecomb.saga.core.SagaResponse;
-import io.servicecomb.saga.core.actors.messages.AbortRecoveryMessage;
-import io.servicecomb.saga.core.actors.messages.CompensationRecoveryMessage;
-import io.servicecomb.saga.core.actors.messages.Message;
-import io.servicecomb.saga.core.actors.messages.TransactionRecoveryMessage;
+import org.apache.servicecomb.saga.core.EventContext;
+import org.apache.servicecomb.saga.core.SagaRequest;
+import org.apache.servicecomb.saga.core.SagaResponse;
+import org.apache.servicecomb.saga.core.actors.messages.AbortRecoveryMessage;
+import org.apache.servicecomb.saga.core.actors.messages.CompensationRecoveryMessage;
+import org.apache.servicecomb.saga.core.actors.messages.TransactionRecoveryMessage;
+import org.apache.servicecomb.saga.core.actors.messages.Message;
 
 public class EventContextImpl implements EventContext {
   private final RequestActorContext context;
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/actors/RequestActor.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/RequestActor.java
similarity index 85%
rename from saga-core/src/main/java/io/servicecomb/saga/core/actors/RequestActor.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/RequestActor.java
index f46e929..055174e 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/actors/RequestActor.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/RequestActor.java
@@ -15,10 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core.actors;
-
-import static io.servicecomb.saga.core.SagaResponse.EMPTY_RESPONSE;
-import static io.servicecomb.saga.core.SagaResponse.NONE_RESPONSE;
+package org.apache.servicecomb.saga.core.actors;
 
 import java.util.ArrayList;
 import java.util.LinkedList;
@@ -26,20 +23,21 @@ import java.util.List;
 import java.util.function.Consumer;
 import java.util.function.Supplier;
 
-import io.servicecomb.saga.core.CompositeSagaResponse;
-import io.servicecomb.saga.core.SagaRequest;
-import io.servicecomb.saga.core.SagaResponse;
-import io.servicecomb.saga.core.SagaStartFailedException;
-import io.servicecomb.saga.core.SagaTask;
-import io.servicecomb.saga.core.TransactionFailedException;
-import io.servicecomb.saga.core.actors.messages.AbortMessage;
-import io.servicecomb.saga.core.actors.messages.AbortRecoveryMessage;
-import io.servicecomb.saga.core.actors.messages.CompensateMessage;
-import io.servicecomb.saga.core.actors.messages.CompensationRecoveryMessage;
-import io.servicecomb.saga.core.actors.messages.FailMessage;
-import io.servicecomb.saga.core.actors.messages.Message;
-import io.servicecomb.saga.core.actors.messages.TransactMessage;
-import io.servicecomb.saga.core.actors.messages.TransactionRecoveryMessage;
+import org.apache.servicecomb.saga.core.CompositeSagaResponse;
+import org.apache.servicecomb.saga.core.SagaRequest;
+import org.apache.servicecomb.saga.core.SagaResponse;
+import org.apache.servicecomb.saga.core.SagaStartFailedException;
+import org.apache.servicecomb.saga.core.SagaTask;
+import org.apache.servicecomb.saga.core.TransactionFailedException;
+import org.apache.servicecomb.saga.core.actors.messages.AbortMessage;
+import org.apache.servicecomb.saga.core.actors.messages.AbortRecoveryMessage;
+import org.apache.servicecomb.saga.core.actors.messages.CompensationRecoveryMessage;
+import org.apache.servicecomb.saga.core.actors.messages.FailMessage;
+import org.apache.servicecomb.saga.core.actors.messages.Message;
+import org.apache.servicecomb.saga.core.actors.messages.TransactMessage;
+import org.apache.servicecomb.saga.core.actors.messages.TransactionRecoveryMessage;
+import org.apache.servicecomb.saga.core.actors.messages.CompensateMessage;
+
 import akka.actor.AbstractLoggingActor;
 import akka.actor.ActorRef;
 import akka.actor.Props;
@@ -151,7 +149,7 @@ public class RequestActor extends AbstractLoggingActor {
         sendToChildren(new TransactMessage(request, sagaResponse));
         getContext().become(transacted);
       } else {
-        sendToChildren(new TransactMessage(request, NONE_RESPONSE));
+        sendToChildren(new TransactMessage(request, SagaResponse.NONE_RESPONSE));
         getContext().become(aborted);
       }
     } catch (SagaStartFailedException e) {
@@ -182,7 +180,7 @@ public class RequestActor extends AbstractLoggingActor {
 
   private SagaResponse responseOf(List<SagaResponse> responseContexts) {
     if (responseContexts.isEmpty()) {
-      return EMPTY_RESPONSE;
+      return SagaResponse.EMPTY_RESPONSE;
     }
 
     if (responseContexts.size() == 1) {
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/actors/RequestActorBuilder.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/RequestActorBuilder.java
similarity index 75%
rename from saga-core/src/main/java/io/servicecomb/saga/core/actors/RequestActorBuilder.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/RequestActorBuilder.java
index 807f8c1..5004b4e 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/actors/RequestActorBuilder.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/RequestActorBuilder.java
@@ -15,17 +15,15 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core.actors;
-
-import static io.servicecomb.saga.core.NoOpSagaRequest.SAGA_END_REQUEST;
-import static io.servicecomb.saga.core.NoOpSagaRequest.SAGA_START_REQUEST;
+package org.apache.servicecomb.saga.core.actors;
 
 import java.util.Map;
 import java.util.Set;
 
-import io.servicecomb.saga.core.SagaRequest;
-import io.servicecomb.saga.core.SagaTask;
-import io.servicecomb.saga.core.application.interpreter.FromJsonFormat;
+import org.apache.servicecomb.saga.core.NoOpSagaRequest;
+import org.apache.servicecomb.saga.core.SagaRequest;
+import org.apache.servicecomb.saga.core.SagaTask;
+import org.apache.servicecomb.saga.core.application.interpreter.FromJsonFormat;
 import akka.actor.ActorRef;
 import akka.actor.ActorSystem;
 import akka.actor.Props;
@@ -53,8 +51,8 @@ public class RequestActorBuilder {
     linkActorsById(rootActor, requests, context);
     addLeafToChildless(leafActor, requests, context);
 
-    context.addParent(SAGA_START_REQUEST.id(), sagaActor);
-    context.addChild(SAGA_END_REQUEST.id(), sagaActor);
+    context.addParent(NoOpSagaRequest.SAGA_START_REQUEST.id(), sagaActor);
+    context.addChild(NoOpSagaRequest.SAGA_END_REQUEST.id(), sagaActor);
     return context;
   }
 
@@ -62,7 +60,7 @@ public class RequestActorBuilder {
     for (SagaRequest request : requests) {
       if (isOrphan(request)) {
         context.addParent(request.id(), rootActor);
-        context.addChild(SAGA_START_REQUEST.id(), context.actorOf(request.id()));
+        context.addChild(NoOpSagaRequest.SAGA_START_REQUEST.id(), context.actorOf(request.id()));
       } else {
         for (String parent : request.parents()) {
           context.addParent(request.id(), context.actorOf(parent));
@@ -86,23 +84,25 @@ public class RequestActorBuilder {
   private void addLeafToChildless(ActorRef leafActor, SagaRequest[] requests, RequestActorContext context) {
     for (SagaRequest request : requests) {
       if (context.childrenOf(request).isEmpty()) {
-        context.addParent(SAGA_END_REQUEST.id(), context.actorOf(request.id()));
+        context.addParent(NoOpSagaRequest.SAGA_END_REQUEST.id(), context.actorOf(request.id()));
         context.addChild(request.id(), leafActor);
       }
     }
   }
 
   private ActorRef rootActor(RequestActorContext context, Map<String, SagaTask> tasks) {
-    Props root = RequestActor.props(context, tasks.get(SAGA_START_REQUEST.task()), SAGA_START_REQUEST);
+    Props root = RequestActor.props(context, tasks.get(
+        NoOpSagaRequest.SAGA_START_REQUEST.task()), NoOpSagaRequest.SAGA_START_REQUEST);
     ActorRef actor = actorSystem.actorOf(root);
-    context.addActor(SAGA_START_REQUEST.id(), actor);
+    context.addActor(NoOpSagaRequest.SAGA_START_REQUEST.id(), actor);
     return actor;
   }
 
   private ActorRef leafActor(RequestActorContext context, Map<String, SagaTask> tasks) {
-    Props leaf = RequestActor.props(context, tasks.get(SAGA_END_REQUEST.task()), SAGA_END_REQUEST);
+    Props leaf = RequestActor.props(context, tasks.get(
+        NoOpSagaRequest.SAGA_END_REQUEST.task()), NoOpSagaRequest.SAGA_END_REQUEST);
     ActorRef actor = actorSystem.actorOf(leaf);
-    context.addActor(SAGA_END_REQUEST.id(), actor);
+    context.addActor(NoOpSagaRequest.SAGA_END_REQUEST.id(), actor);
     return actor;
   }
 }
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/actors/RequestActorContext.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/RequestActorContext.java
similarity index 91%
rename from saga-core/src/main/java/io/servicecomb/saga/core/actors/RequestActorContext.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/RequestActorContext.java
index ee561c6..2e3149d 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/actors/RequestActorContext.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/RequestActorContext.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core.actors;
+package org.apache.servicecomb.saga.core.actors;
 
 import static java.util.Collections.emptyList;
 
@@ -27,9 +27,9 @@ import java.util.Map;
 import java.util.Set;
 import java.util.function.Consumer;
 
-import io.servicecomb.saga.core.SagaRequest;
-import io.servicecomb.saga.core.SagaResponse;
-import io.servicecomb.saga.core.application.interpreter.FromJsonFormat;
+import org.apache.servicecomb.saga.core.SagaRequest;
+import org.apache.servicecomb.saga.core.SagaResponse;
+import org.apache.servicecomb.saga.core.application.interpreter.FromJsonFormat;
 import akka.actor.ActorRef;
 
 class RequestActorContext {
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/actors/messages/AbortMessage.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/messages/AbortMessage.java
similarity index 86%
rename from saga-core/src/main/java/io/servicecomb/saga/core/actors/messages/AbortMessage.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/messages/AbortMessage.java
index 206683f..f23a079 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/actors/messages/AbortMessage.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/messages/AbortMessage.java
@@ -15,10 +15,10 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core.actors.messages;
+package org.apache.servicecomb.saga.core.actors.messages;
 
-import io.servicecomb.saga.core.FailedSagaResponse;
-import io.servicecomb.saga.core.SagaResponse;
+import org.apache.servicecomb.saga.core.FailedSagaResponse;
+import org.apache.servicecomb.saga.core.SagaResponse;
 
 public class AbortMessage implements Message {
   private final SagaResponse response;
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/actors/messages/AbortRecoveryMessage.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/messages/AbortRecoveryMessage.java
similarity index 90%
rename from saga-core/src/main/java/io/servicecomb/saga/core/actors/messages/AbortRecoveryMessage.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/messages/AbortRecoveryMessage.java
index ab0c991..951157d 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/actors/messages/AbortRecoveryMessage.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/messages/AbortRecoveryMessage.java
@@ -15,9 +15,9 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core.actors.messages;
+package org.apache.servicecomb.saga.core.actors.messages;
 
-import io.servicecomb.saga.core.SagaResponse;
+import org.apache.servicecomb.saga.core.SagaResponse;
 
 public class AbortRecoveryMessage implements Message {
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/actors/messages/CompensateMessage.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/messages/CompensateMessage.java
similarity index 90%
rename from saga-core/src/main/java/io/servicecomb/saga/core/actors/messages/CompensateMessage.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/messages/CompensateMessage.java
index 0baa14a..5fd0701 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/actors/messages/CompensateMessage.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/messages/CompensateMessage.java
@@ -15,9 +15,9 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core.actors.messages;
+package org.apache.servicecomb.saga.core.actors.messages;
 
-import io.servicecomb.saga.core.SagaResponse;
+import org.apache.servicecomb.saga.core.SagaResponse;
 
 public class CompensateMessage implements Message {
   private final SagaResponse response;
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/actors/messages/CompensationRecoveryMessage.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/messages/CompensationRecoveryMessage.java
similarity index 93%
rename from saga-core/src/main/java/io/servicecomb/saga/core/actors/messages/CompensationRecoveryMessage.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/messages/CompensationRecoveryMessage.java
index 5cc4c32..421a092 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/actors/messages/CompensationRecoveryMessage.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/messages/CompensationRecoveryMessage.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core.actors.messages;
+package org.apache.servicecomb.saga.core.actors.messages;
 
 public class CompensationRecoveryMessage implements Message {
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/actors/messages/FailMessage.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/messages/FailMessage.java
similarity index 85%
rename from saga-core/src/main/java/io/servicecomb/saga/core/actors/messages/FailMessage.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/messages/FailMessage.java
index e26d477..7a80ecb 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/actors/messages/FailMessage.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/messages/FailMessage.java
@@ -15,10 +15,10 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core.actors.messages;
+package org.apache.servicecomb.saga.core.actors.messages;
 
-import io.servicecomb.saga.core.FailedSagaResponse;
-import io.servicecomb.saga.core.SagaResponse;
+import org.apache.servicecomb.saga.core.FailedSagaResponse;
+import org.apache.servicecomb.saga.core.SagaResponse;
 
 public class FailMessage implements Message {
   private final SagaResponse response;
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/actors/messages/Message.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/messages/Message.java
similarity index 93%
rename from saga-core/src/main/java/io/servicecomb/saga/core/actors/messages/Message.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/messages/Message.java
index 319e394..3ed8187 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/actors/messages/Message.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/messages/Message.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core.actors.messages;
+package org.apache.servicecomb.saga.core.actors.messages;
 
 public interface Message {
 }
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/actors/messages/TransactMessage.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/messages/TransactMessage.java
similarity index 87%
rename from saga-core/src/main/java/io/servicecomb/saga/core/actors/messages/TransactMessage.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/messages/TransactMessage.java
index 7fdf718..e4c57a2 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/actors/messages/TransactMessage.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/messages/TransactMessage.java
@@ -15,10 +15,10 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core.actors.messages;
+package org.apache.servicecomb.saga.core.actors.messages;
 
-import io.servicecomb.saga.core.SagaRequest;
-import io.servicecomb.saga.core.SagaResponse;
+import org.apache.servicecomb.saga.core.SagaRequest;
+import org.apache.servicecomb.saga.core.SagaResponse;
 
 public class TransactMessage implements Message {
   private final SagaRequest request;
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/actors/messages/TransactionRecoveryMessage.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/messages/TransactionRecoveryMessage.java
similarity index 90%
rename from saga-core/src/main/java/io/servicecomb/saga/core/actors/messages/TransactionRecoveryMessage.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/messages/TransactionRecoveryMessage.java
index 99007b0..26ba05b 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/actors/messages/TransactionRecoveryMessage.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/actors/messages/TransactionRecoveryMessage.java
@@ -15,9 +15,9 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core.actors.messages;
+package org.apache.servicecomb.saga.core.actors.messages;
 
-import io.servicecomb.saga.core.SagaResponse;
+import org.apache.servicecomb.saga.core.SagaResponse;
 
 public class TransactionRecoveryMessage implements Message {
   private final SagaResponse response;
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/application/SagaExecutionComponent.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/application/SagaExecutionComponent.java
similarity index 81%
rename from saga-core/src/main/java/io/servicecomb/saga/core/application/SagaExecutionComponent.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/application/SagaExecutionComponent.java
index 9289c0e..7a600d7 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/application/SagaExecutionComponent.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/application/SagaExecutionComponent.java
@@ -15,23 +15,23 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core.application;
+package org.apache.servicecomb.saga.core.application;
 
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.UUID;
 
-import io.servicecomb.saga.core.EventEnvelope;
-import io.servicecomb.saga.core.EventStore;
-import io.servicecomb.saga.core.PersistentStore;
-import io.servicecomb.saga.core.Saga;
-import io.servicecomb.saga.core.SagaDefinition;
-import io.servicecomb.saga.core.SagaEvent;
-import io.servicecomb.saga.core.SagaResponse;
-import io.servicecomb.saga.core.ToJsonFormat;
-import io.servicecomb.saga.core.application.interpreter.FromJsonFormat;
-import io.servicecomb.saga.infrastructure.EmbeddedEventStore;
+import org.apache.servicecomb.saga.core.EventEnvelope;
+import org.apache.servicecomb.saga.core.EventStore;
+import org.apache.servicecomb.saga.core.Saga;
+import org.apache.servicecomb.saga.core.SagaResponse;
+import org.apache.servicecomb.saga.core.ToJsonFormat;
+import org.apache.servicecomb.saga.core.PersistentStore;
+import org.apache.servicecomb.saga.core.SagaDefinition;
+import org.apache.servicecomb.saga.core.SagaEvent;
+import org.apache.servicecomb.saga.core.application.interpreter.FromJsonFormat;
+import org.apache.servicecomb.saga.infrastructure.EmbeddedEventStore;
 import kamon.annotation.EnableKamon;
 import kamon.annotation.Segment;
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/application/SagaFactory.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/application/SagaFactory.java
similarity index 82%
rename from saga-core/src/main/java/io/servicecomb/saga/core/application/SagaFactory.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/application/SagaFactory.java
index b9e9958..b60b5e7 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/application/SagaFactory.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/application/SagaFactory.java
@@ -15,11 +15,11 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core.application;
+package org.apache.servicecomb.saga.core.application;
 
-import io.servicecomb.saga.core.EventStore;
-import io.servicecomb.saga.core.Saga;
-import io.servicecomb.saga.core.SagaDefinition;
+import org.apache.servicecomb.saga.core.EventStore;
+import org.apache.servicecomb.saga.core.Saga;
+import org.apache.servicecomb.saga.core.SagaDefinition;
 
 public interface SagaFactory {
   Saga createSaga(String requestJson, String sagaId, EventStore sagaLog, SagaDefinition definition);
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/application/interpreter/FromJsonFormat.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/application/interpreter/FromJsonFormat.java
similarity index 93%
rename from saga-core/src/main/java/io/servicecomb/saga/core/application/interpreter/FromJsonFormat.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/application/interpreter/FromJsonFormat.java
index dfff332..ccfb408 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/application/interpreter/FromJsonFormat.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/application/interpreter/FromJsonFormat.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core.application.interpreter;
+package org.apache.servicecomb.saga.core.application.interpreter;
 
 public interface FromJsonFormat<T> {
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/application/interpreter/RestRequestChecker.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/application/interpreter/RestRequestChecker.java
similarity index 96%
rename from saga-core/src/main/java/io/servicecomb/saga/core/application/interpreter/RestRequestChecker.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/application/interpreter/RestRequestChecker.java
index 01ae422..7a65e48 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/application/interpreter/RestRequestChecker.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/application/interpreter/RestRequestChecker.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core.application.interpreter;
+package org.apache.servicecomb.saga.core.application.interpreter;
 
 import static java.util.Arrays.asList;
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/dag/ByLevelTraveller.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/ByLevelTraveller.java
similarity index 98%
rename from saga-core/src/main/java/io/servicecomb/saga/core/dag/ByLevelTraveller.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/ByLevelTraveller.java
index e31a5a2..22bc874 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/dag/ByLevelTraveller.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/ByLevelTraveller.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core.dag;
+package org.apache.servicecomb.saga.core.dag;
 
 import java.util.Collection;
 import java.util.HashMap;
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/dag/FromLeafTraversalDirection.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/FromLeafTraversalDirection.java
similarity index 96%
rename from saga-core/src/main/java/io/servicecomb/saga/core/dag/FromLeafTraversalDirection.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/FromLeafTraversalDirection.java
index 691f889..d97c40f 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/dag/FromLeafTraversalDirection.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/FromLeafTraversalDirection.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core.dag;
+package org.apache.servicecomb.saga.core.dag;
 
 import java.util.Set;
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/dag/FromRootTraversalDirection.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/FromRootTraversalDirection.java
similarity index 96%
rename from saga-core/src/main/java/io/servicecomb/saga/core/dag/FromRootTraversalDirection.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/FromRootTraversalDirection.java
index adf1bea..8c664ac 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/dag/FromRootTraversalDirection.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/FromRootTraversalDirection.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core.dag;
+package org.apache.servicecomb.saga.core.dag;
 
 import java.util.Set;
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/dag/GraphBasedSagaFactory.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/GraphBasedSagaFactory.java
similarity index 77%
rename from saga-core/src/main/java/io/servicecomb/saga/core/dag/GraphBasedSagaFactory.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/GraphBasedSagaFactory.java
index fa31973..2048383 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/dag/GraphBasedSagaFactory.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/GraphBasedSagaFactory.java
@@ -15,24 +15,24 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core.dag;
+package org.apache.servicecomb.saga.core.dag;
 
 import java.util.Set;
 import java.util.concurrent.Executor;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.atomic.AtomicBoolean;
 
-import io.servicecomb.saga.core.EventStore;
-import io.servicecomb.saga.core.GraphBasedSaga;
-import io.servicecomb.saga.core.PersistentStore;
-import io.servicecomb.saga.core.Saga;
-import io.servicecomb.saga.core.SagaContext;
-import io.servicecomb.saga.core.SagaContextImpl;
-import io.servicecomb.saga.core.SagaDefinition;
-import io.servicecomb.saga.core.SagaTaskFactory;
-import io.servicecomb.saga.core.application.SagaFactory;
-import io.servicecomb.saga.core.application.interpreter.FromJsonFormat;
-import io.servicecomb.saga.infrastructure.ContextAwareEventStore;
+import org.apache.servicecomb.saga.core.EventStore;
+import org.apache.servicecomb.saga.core.GraphBasedSaga;
+import org.apache.servicecomb.saga.core.Saga;
+import org.apache.servicecomb.saga.core.SagaContext;
+import org.apache.servicecomb.saga.core.SagaContextImpl;
+import org.apache.servicecomb.saga.core.application.SagaFactory;
+import org.apache.servicecomb.saga.infrastructure.ContextAwareEventStore;
+import org.apache.servicecomb.saga.core.PersistentStore;
+import org.apache.servicecomb.saga.core.SagaDefinition;
+import org.apache.servicecomb.saga.core.SagaTaskFactory;
+import org.apache.servicecomb.saga.core.application.interpreter.FromJsonFormat;
 
 public class GraphBasedSagaFactory implements SagaFactory {
   private final AtomicBoolean isRunning = new AtomicBoolean(true);
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/dag/GraphBuilder.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/GraphBuilder.java
similarity index 94%
rename from saga-core/src/main/java/io/servicecomb/saga/core/dag/GraphBuilder.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/GraphBuilder.java
index 64e8a90..578cbb9 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/dag/GraphBuilder.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/GraphBuilder.java
@@ -15,15 +15,16 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core.dag;
+package org.apache.servicecomb.saga.core.dag;
 
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
 
-import io.servicecomb.saga.core.NoOpSagaRequest;
-import io.servicecomb.saga.core.SagaException;
-import io.servicecomb.saga.core.SagaRequest;
+import org.apache.servicecomb.saga.core.NoOpSagaRequest;
+import org.apache.servicecomb.saga.core.SagaException;
+import org.apache.servicecomb.saga.core.SagaRequest;
+
 import kamon.annotation.EnableKamon;
 import kamon.annotation.Segment;
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/dag/GraphCycleDetector.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/GraphCycleDetector.java
similarity index 95%
rename from saga-core/src/main/java/io/servicecomb/saga/core/dag/GraphCycleDetector.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/GraphCycleDetector.java
index b52d719..9b12bc8 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/dag/GraphCycleDetector.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/GraphCycleDetector.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core.dag;
+package org.apache.servicecomb.saga.core.dag;
 
 import java.util.Set;
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/dag/GraphCycleDetectorImpl.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/GraphCycleDetectorImpl.java
similarity index 98%
rename from saga-core/src/main/java/io/servicecomb/saga/core/dag/GraphCycleDetectorImpl.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/GraphCycleDetectorImpl.java
index d9a7cde..6011a98 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/dag/GraphCycleDetectorImpl.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/GraphCycleDetectorImpl.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core.dag;
+package org.apache.servicecomb.saga.core.dag;
 
 import java.util.HashMap;
 import java.util.HashSet;
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/dag/Node.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/Node.java
similarity index 97%
rename from saga-core/src/main/java/io/servicecomb/saga/core/dag/Node.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/Node.java
index 65bd586..0b3be0a 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/dag/Node.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/Node.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core.dag;
+package org.apache.servicecomb.saga.core.dag;
 
 import java.util.Collection;
 import java.util.HashSet;
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/dag/SingleLeafDirectedAcyclicGraph.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/SingleLeafDirectedAcyclicGraph.java
similarity index 96%
rename from saga-core/src/main/java/io/servicecomb/saga/core/dag/SingleLeafDirectedAcyclicGraph.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/SingleLeafDirectedAcyclicGraph.java
index 375892e..cf0d19b 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/dag/SingleLeafDirectedAcyclicGraph.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/SingleLeafDirectedAcyclicGraph.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core.dag;
+package org.apache.servicecomb.saga.core.dag;
 
 public class SingleLeafDirectedAcyclicGraph<T> {
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/dag/Traveller.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/Traveller.java
similarity index 95%
rename from saga-core/src/main/java/io/servicecomb/saga/core/dag/Traveller.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/Traveller.java
index a501993..e44848b 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/dag/Traveller.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/Traveller.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core.dag;
+package org.apache.servicecomb.saga.core.dag;
 
 import java.util.Collection;
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/core/dag/TraversalDirection.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/TraversalDirection.java
similarity index 95%
rename from saga-core/src/main/java/io/servicecomb/saga/core/dag/TraversalDirection.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/TraversalDirection.java
index de4c123..22f7343 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/core/dag/TraversalDirection.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/TraversalDirection.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core.dag;
+package org.apache.servicecomb.saga.core.dag;
 
 import java.util.Set;
 
diff --git a/saga-core/src/main/java/io/servicecomb/saga/infrastructure/ContextAwareEventStore.java b/saga-core/src/main/java/org/apache/servicecomb/saga/infrastructure/ContextAwareEventStore.java
similarity index 85%
rename from saga-core/src/main/java/io/servicecomb/saga/infrastructure/ContextAwareEventStore.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/infrastructure/ContextAwareEventStore.java
index 2c5a1e2..40fa71d 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/infrastructure/ContextAwareEventStore.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/infrastructure/ContextAwareEventStore.java
@@ -15,14 +15,14 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.infrastructure;
+package org.apache.servicecomb.saga.infrastructure;
 
 import java.util.Iterator;
 
-import io.servicecomb.saga.core.EventEnvelope;
-import io.servicecomb.saga.core.EventStore;
-import io.servicecomb.saga.core.SagaContext;
-import io.servicecomb.saga.core.SagaEvent;
+import org.apache.servicecomb.saga.core.EventEnvelope;
+import org.apache.servicecomb.saga.core.EventStore;
+import org.apache.servicecomb.saga.core.SagaContext;
+import org.apache.servicecomb.saga.core.SagaEvent;
 
 public class ContextAwareEventStore implements EventStore {
   private final EventStore eventStore;
diff --git a/saga-core/src/main/java/io/servicecomb/saga/infrastructure/EmbeddedEventStore.java b/saga-core/src/main/java/org/apache/servicecomb/saga/infrastructure/EmbeddedEventStore.java
similarity index 89%
rename from saga-core/src/main/java/io/servicecomb/saga/infrastructure/EmbeddedEventStore.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/infrastructure/EmbeddedEventStore.java
index f217df4..d342264 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/infrastructure/EmbeddedEventStore.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/infrastructure/EmbeddedEventStore.java
@@ -15,20 +15,19 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.infrastructure;
+package org.apache.servicecomb.saga.infrastructure;
 
 import java.lang.invoke.MethodHandles;
 import java.util.Iterator;
 import java.util.Queue;
 import java.util.concurrent.LinkedBlockingQueue;
 
+import org.apache.servicecomb.saga.core.EventEnvelope;
+import org.apache.servicecomb.saga.core.EventStore;
+import org.apache.servicecomb.saga.core.SagaEvent;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import io.servicecomb.saga.core.EventEnvelope;
-import io.servicecomb.saga.core.EventStore;
-import io.servicecomb.saga.core.SagaEvent;
-
 public class EmbeddedEventStore implements EventStore {
   private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
   private final Queue<SagaEvent> events = new LinkedBlockingQueue<>();
diff --git a/saga-core/src/main/java/io/servicecomb/saga/transports/RestTransport.java b/saga-core/src/main/java/org/apache/servicecomb/saga/transports/RestTransport.java
similarity index 86%
rename from saga-core/src/main/java/io/servicecomb/saga/transports/RestTransport.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/transports/RestTransport.java
index 77aa844..3d5bda3 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/transports/RestTransport.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/transports/RestTransport.java
@@ -15,10 +15,10 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.transports;
+package org.apache.servicecomb.saga.transports;
 
-import io.servicecomb.saga.core.SagaResponse;
-import io.servicecomb.saga.core.Transport;
+import org.apache.servicecomb.saga.core.SagaResponse;
+import org.apache.servicecomb.saga.core.Transport;
 import java.util.Map;
 
 public interface RestTransport extends Transport {
diff --git a/saga-core/src/main/java/io/servicecomb/saga/transports/TransportFactory.java b/saga-core/src/main/java/org/apache/servicecomb/saga/transports/TransportFactory.java
similarity index 94%
rename from saga-core/src/main/java/io/servicecomb/saga/transports/TransportFactory.java
rename to saga-core/src/main/java/org/apache/servicecomb/saga/transports/TransportFactory.java
index c4a6843..b34b5bd 100644
--- a/saga-core/src/main/java/io/servicecomb/saga/transports/TransportFactory.java
+++ b/saga-core/src/main/java/org/apache/servicecomb/saga/transports/TransportFactory.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.transports;
+package org.apache.servicecomb.saga.transports;
 
 public interface TransportFactory {
 
diff --git a/saga-core/src/test/java/io/servicecomb/saga/core/BackwardRecoveryTest.java b/saga-core/src/test/java/org/apache/servicecomb/saga/core/BackwardRecoveryTest.java
similarity index 98%
rename from saga-core/src/test/java/io/servicecomb/saga/core/BackwardRecoveryTest.java
rename to saga-core/src/test/java/org/apache/servicecomb/saga/core/BackwardRecoveryTest.java
index d5c22c7..4f03992 100644
--- a/saga-core/src/test/java/io/servicecomb/saga/core/BackwardRecoveryTest.java
+++ b/saga-core/src/test/java/org/apache/servicecomb/saga/core/BackwardRecoveryTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 import static com.seanyinx.github.unit.scaffolding.AssertUtils.expectFailing;
 import static org.mockito.Mockito.doThrow;
diff --git a/saga-core/src/test/java/io/servicecomb/saga/core/CompensationImpl.java b/saga-core/src/test/java/org/apache/servicecomb/saga/core/CompensationImpl.java
similarity index 96%
rename from saga-core/src/test/java/io/servicecomb/saga/core/CompensationImpl.java
rename to saga-core/src/test/java/org/apache/servicecomb/saga/core/CompensationImpl.java
index 00ed195..c974bc4 100644
--- a/saga-core/src/test/java/io/servicecomb/saga/core/CompensationImpl.java
+++ b/saga-core/src/test/java/org/apache/servicecomb/saga/core/CompensationImpl.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 import java.util.Map;
 
diff --git a/saga-core/src/test/java/io/servicecomb/saga/core/CompositeSagaLogTest.java b/saga-core/src/test/java/org/apache/servicecomb/saga/core/CompositeSagaLogTest.java
similarity index 97%
rename from saga-core/src/test/java/io/servicecomb/saga/core/CompositeSagaLogTest.java
rename to saga-core/src/test/java/org/apache/servicecomb/saga/core/CompositeSagaLogTest.java
index 8e8e2ae..c7dea51 100644
--- a/saga-core/src/test/java/io/servicecomb/saga/core/CompositeSagaLogTest.java
+++ b/saga-core/src/test/java/org/apache/servicecomb/saga/core/CompositeSagaLogTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 import static com.seanyinx.github.unit.scaffolding.AssertUtils.expectFailing;
 import static org.mockito.Mockito.doThrow;
diff --git a/saga-core/src/test/java/io/servicecomb/saga/core/CompositeSagaResponseTest.java b/saga-core/src/test/java/org/apache/servicecomb/saga/core/CompositeSagaResponseTest.java
similarity index 98%
rename from saga-core/src/test/java/io/servicecomb/saga/core/CompositeSagaResponseTest.java
rename to saga-core/src/test/java/org/apache/servicecomb/saga/core/CompositeSagaResponseTest.java
index 9a019db..885224f 100644
--- a/saga-core/src/test/java/io/servicecomb/saga/core/CompositeSagaResponseTest.java
+++ b/saga-core/src/test/java/org/apache/servicecomb/saga/core/CompositeSagaResponseTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 import static java.util.Arrays.asList;
 import static org.hamcrest.core.Is.is;
diff --git a/saga-core/src/test/java/io/servicecomb/saga/core/DummyEvent.java b/saga-core/src/test/java/org/apache/servicecomb/saga/core/DummyEvent.java
similarity index 95%
rename from saga-core/src/test/java/io/servicecomb/saga/core/DummyEvent.java
rename to saga-core/src/test/java/org/apache/servicecomb/saga/core/DummyEvent.java
index 1ae7777..c775afe 100644
--- a/saga-core/src/test/java/io/servicecomb/saga/core/DummyEvent.java
+++ b/saga-core/src/test/java/org/apache/servicecomb/saga/core/DummyEvent.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 public class DummyEvent extends SagaEvent {
 
diff --git a/saga-core/src/test/java/io/servicecomb/saga/core/FallbackPolicyTest.java b/saga-core/src/test/java/org/apache/servicecomb/saga/core/FallbackPolicyTest.java
similarity index 98%
rename from saga-core/src/test/java/io/servicecomb/saga/core/FallbackPolicyTest.java
rename to saga-core/src/test/java/org/apache/servicecomb/saga/core/FallbackPolicyTest.java
index cbf5cb2..a2d1f32 100644
--- a/saga-core/src/test/java/io/servicecomb/saga/core/FallbackPolicyTest.java
+++ b/saga-core/src/test/java/org/apache/servicecomb/saga/core/FallbackPolicyTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 import static com.seanyinx.github.unit.scaffolding.Randomness.uniquify;
 import static org.hamcrest.core.Is.is;
diff --git a/saga-core/src/test/java/io/servicecomb/saga/core/ForwardRecoveryTest.java b/saga-core/src/test/java/org/apache/servicecomb/saga/core/ForwardRecoveryTest.java
similarity index 98%
rename from saga-core/src/test/java/io/servicecomb/saga/core/ForwardRecoveryTest.java
rename to saga-core/src/test/java/org/apache/servicecomb/saga/core/ForwardRecoveryTest.java
index 4f507ca..e765170 100644
--- a/saga-core/src/test/java/io/servicecomb/saga/core/ForwardRecoveryTest.java
+++ b/saga-core/src/test/java/org/apache/servicecomb/saga/core/ForwardRecoveryTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.mock;
diff --git a/saga-core/src/test/java/io/servicecomb/saga/core/LongIdGeneratorTest.java b/saga-core/src/test/java/org/apache/servicecomb/saga/core/LongIdGeneratorTest.java
similarity index 96%
rename from saga-core/src/test/java/io/servicecomb/saga/core/LongIdGeneratorTest.java
rename to saga-core/src/test/java/org/apache/servicecomb/saga/core/LongIdGeneratorTest.java
index 588e57c..775866b 100644
--- a/saga-core/src/test/java/io/servicecomb/saga/core/LongIdGeneratorTest.java
+++ b/saga-core/src/test/java/org/apache/servicecomb/saga/core/LongIdGeneratorTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertThat;
diff --git a/saga-core/src/test/java/io/servicecomb/saga/core/RestOperationTest.java b/saga-core/src/test/java/org/apache/servicecomb/saga/core/RestOperationTest.java
similarity index 98%
rename from saga-core/src/test/java/io/servicecomb/saga/core/RestOperationTest.java
rename to saga-core/src/test/java/org/apache/servicecomb/saga/core/RestOperationTest.java
index 100fcb2..7f1990d 100644
--- a/saga-core/src/test/java/io/servicecomb/saga/core/RestOperationTest.java
+++ b/saga-core/src/test/java/org/apache/servicecomb/saga/core/RestOperationTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 import static com.seanyinx.github.unit.scaffolding.AssertUtils.expectFailing;
 import static java.util.Collections.emptyMap;
diff --git a/saga-core/src/test/java/io/servicecomb/saga/core/RetrySagaLogTest.java b/saga-core/src/test/java/org/apache/servicecomb/saga/core/RetrySagaLogTest.java
similarity index 95%
rename from saga-core/src/test/java/io/servicecomb/saga/core/RetrySagaLogTest.java
rename to saga-core/src/test/java/org/apache/servicecomb/saga/core/RetrySagaLogTest.java
index d5e6b4f..6da8f16 100644
--- a/saga-core/src/test/java/io/servicecomb/saga/core/RetrySagaLogTest.java
+++ b/saga-core/src/test/java/org/apache/servicecomb/saga/core/RetrySagaLogTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 
 import static org.awaitility.Awaitility.await;
@@ -33,7 +33,7 @@ import java.util.concurrent.TimeUnit;
 
 import org.junit.Test;
 
-import io.servicecomb.saga.core.SagaTaskFactory.RetrySagaLog;
+import org.apache.servicecomb.saga.core.SagaTaskFactory.RetrySagaLog;
 
 public class RetrySagaLogTest {
 
diff --git a/saga-core/src/test/java/io/servicecomb/saga/core/SagaEndTaskTest.java b/saga-core/src/test/java/org/apache/servicecomb/saga/core/SagaEndTaskTest.java
similarity index 97%
rename from saga-core/src/test/java/io/servicecomb/saga/core/SagaEndTaskTest.java
rename to saga-core/src/test/java/org/apache/servicecomb/saga/core/SagaEndTaskTest.java
index 9f8dffa..22f5fa1 100644
--- a/saga-core/src/test/java/io/servicecomb/saga/core/SagaEndTaskTest.java
+++ b/saga-core/src/test/java/org/apache/servicecomb/saga/core/SagaEndTaskTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
diff --git a/saga-core/src/test/java/io/servicecomb/saga/core/SagaEventMatcher.java b/saga-core/src/test/java/org/apache/servicecomb/saga/core/SagaEventMatcher.java
similarity index 98%
rename from saga-core/src/test/java/io/servicecomb/saga/core/SagaEventMatcher.java
rename to saga-core/src/test/java/org/apache/servicecomb/saga/core/SagaEventMatcher.java
index 4c25c01..7e8289c 100644
--- a/saga-core/src/test/java/io/servicecomb/saga/core/SagaEventMatcher.java
+++ b/saga-core/src/test/java/org/apache/servicecomb/saga/core/SagaEventMatcher.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 import java.util.Objects;
 
diff --git a/saga-core/src/test/java/io/servicecomb/saga/core/SagaExecutionComponentTestBase.java b/saga-core/src/test/java/org/apache/servicecomb/saga/core/SagaExecutionComponentTestBase.java
similarity index 82%
rename from saga-core/src/test/java/io/servicecomb/saga/core/SagaExecutionComponentTestBase.java
rename to saga-core/src/test/java/org/apache/servicecomb/saga/core/SagaExecutionComponentTestBase.java
index 47b1f2d..b9e893f 100644
--- a/saga-core/src/test/java/io/servicecomb/saga/core/SagaExecutionComponentTestBase.java
+++ b/saga-core/src/test/java/org/apache/servicecomb/saga/core/SagaExecutionComponentTestBase.java
@@ -15,11 +15,9 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
-import static io.servicecomb.saga.core.NoOpSagaRequest.SAGA_END_REQUEST;
-import static io.servicecomb.saga.core.NoOpSagaRequest.SAGA_START_REQUEST;
-import static io.servicecomb.saga.core.Operation.TYPE_REST;
+import static org.apache.servicecomb.saga.core.Operation.TYPE_REST;
 import static java.util.Collections.emptyMap;
 import static java.util.Collections.singletonList;
 import static java.util.Collections.singletonMap;
@@ -36,6 +34,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.concurrent.CompletableFuture;
 
+import org.apache.servicecomb.saga.core.application.SagaFactory;
 import org.hamcrest.Description;
 import org.hamcrest.Matcher;
 import org.hamcrest.TypeSafeMatcher;
@@ -43,10 +42,9 @@ import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mockito;
 
-import io.servicecomb.saga.core.application.SagaExecutionComponent;
-import io.servicecomb.saga.core.application.SagaFactory;
-import io.servicecomb.saga.core.application.interpreter.FromJsonFormat;
-import io.servicecomb.saga.infrastructure.EmbeddedEventStore;
+import org.apache.servicecomb.saga.core.application.SagaExecutionComponent;
+import org.apache.servicecomb.saga.core.application.interpreter.FromJsonFormat;
+import org.apache.servicecomb.saga.infrastructure.EmbeddedEventStore;
 
 @SuppressWarnings("unchecked")
 public abstract class SagaExecutionComponentTestBase {
@@ -150,14 +148,14 @@ public abstract class SagaExecutionComponentTestBase {
 
   @Test
   public void recoverSagaWithEventsFromEventStore() throws IOException {
-    eventStore.offer(new SagaStartedEvent(sagaId, sagaJson, SAGA_START_REQUEST));
+    eventStore.offer(new SagaStartedEvent(sagaId, sagaJson, NoOpSagaRequest.SAGA_START_REQUEST));
     coordinator.reanimate();
 
     assertThat(eventStore, contains(
-        eventWith(SAGA_START_REQUEST, SagaStartedEvent.class),
+        eventWith(NoOpSagaRequest.SAGA_START_REQUEST, SagaStartedEvent.class),
         eventWith(request1, TransactionStartedEvent.class),
         eventWith(request1, TransactionEndedEvent.class),
-        eventWith(SAGA_END_REQUEST, SagaEndedEvent.class)
+        eventWith(NoOpSagaRequest.SAGA_END_REQUEST, SagaEndedEvent.class)
     ));
   }
 
@@ -167,10 +165,10 @@ public abstract class SagaExecutionComponentTestBase {
 
     assertThat(response, is(SagaResponse.EMPTY_RESPONSE));
     assertThat(eventStore, contains(
-        eventWith(SAGA_START_REQUEST, SagaStartedEvent.class),
+        eventWith(NoOpSagaRequest.SAGA_START_REQUEST, SagaStartedEvent.class),
         eventWith(request1, TransactionStartedEvent.class),
         eventWith(request1, TransactionEndedEvent.class),
-        eventWith(SAGA_END_REQUEST, SagaEndedEvent.class)
+        eventWith(NoOpSagaRequest.SAGA_END_REQUEST, SagaEndedEvent.class)
     ));
   }
 
@@ -182,33 +180,33 @@ public abstract class SagaExecutionComponentTestBase {
     waitAtMost(2, SECONDS).until(() -> eventStore.size() == 8);
 
     assertThat(eventStore, containsInAnyOrder(
-        eventWith(SAGA_START_REQUEST, SagaStartedEvent.class),
+        eventWith(NoOpSagaRequest.SAGA_START_REQUEST, SagaStartedEvent.class),
         eventWith(request1, TransactionStartedEvent.class),
         eventWith(request1, TransactionEndedEvent.class),
-        eventWith(SAGA_END_REQUEST, SagaEndedEvent.class),
-        eventWith(SAGA_START_REQUEST, SagaStartedEvent.class),
+        eventWith(NoOpSagaRequest.SAGA_END_REQUEST, SagaEndedEvent.class),
+        eventWith(NoOpSagaRequest.SAGA_START_REQUEST, SagaStartedEvent.class),
         eventWith(request2, TransactionStartedEvent.class),
         eventWith(request2, TransactionEndedEvent.class),
-        eventWith(SAGA_END_REQUEST, SagaEndedEvent.class)
+        eventWith(NoOpSagaRequest.SAGA_END_REQUEST, SagaEndedEvent.class)
     ));
   }
 
   @Test
   public void runSagaAfterRecovery() throws IOException {
-    eventStore.offer(new SagaStartedEvent(sagaId, sagaJson, SAGA_START_REQUEST));
+    eventStore.offer(new SagaStartedEvent(sagaId, sagaJson, NoOpSagaRequest.SAGA_START_REQUEST));
     coordinator.reanimate();
 
     coordinator.run(anotherSagaJson);
 
     assertThat(eventStore, contains(
-        eventWith(SAGA_START_REQUEST, SagaStartedEvent.class),
+        eventWith(NoOpSagaRequest.SAGA_START_REQUEST, SagaStartedEvent.class),
         eventWith(request1, TransactionStartedEvent.class),
         eventWith(request1, TransactionEndedEvent.class),
-        eventWith(SAGA_END_REQUEST, SagaEndedEvent.class),
-        eventWith(SAGA_START_REQUEST, SagaStartedEvent.class),
+        eventWith(NoOpSagaRequest.SAGA_END_REQUEST, SagaEndedEvent.class),
+        eventWith(NoOpSagaRequest.SAGA_START_REQUEST, SagaStartedEvent.class),
         eventWith(request2, TransactionStartedEvent.class),
         eventWith(request2, TransactionEndedEvent.class),
-        eventWith(SAGA_END_REQUEST, SagaEndedEvent.class)
+        eventWith(NoOpSagaRequest.SAGA_END_REQUEST, SagaEndedEvent.class)
     ));
   }
 
@@ -244,7 +242,7 @@ public abstract class SagaExecutionComponentTestBase {
     @Override
     public Map<String, List<EventEnvelope>> findPendingSagaEvents() {
       return singletonMap(sagaId, singletonList(
-          new EventEnvelope(1L, new SagaStartedEvent(sagaId, sagaJson, SAGA_START_REQUEST))));
+          new EventEnvelope(1L, new SagaStartedEvent(sagaId, sagaJson, NoOpSagaRequest.SAGA_START_REQUEST))));
     }
   }
 
diff --git a/saga-core/src/test/java/io/servicecomb/saga/core/SagaIntegrationTest.java b/saga-core/src/test/java/org/apache/servicecomb/saga/core/SagaIntegrationTest.java
similarity index 93%
rename from saga-core/src/test/java/io/servicecomb/saga/core/SagaIntegrationTest.java
rename to saga-core/src/test/java/org/apache/servicecomb/saga/core/SagaIntegrationTest.java
index 6b4af57..d005ee7 100644
--- a/saga-core/src/test/java/io/servicecomb/saga/core/SagaIntegrationTest.java
+++ b/saga-core/src/test/java/org/apache/servicecomb/saga/core/SagaIntegrationTest.java
@@ -15,21 +15,19 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 import static com.seanyinx.github.unit.scaffolding.AssertUtils.expectFailing;
-import static io.servicecomb.saga.core.Compensation.SAGA_START_COMPENSATION;
-import static io.servicecomb.saga.core.NoOpSagaRequest.SAGA_END_REQUEST;
-import static io.servicecomb.saga.core.NoOpSagaRequest.SAGA_START_REQUEST;
-import static io.servicecomb.saga.core.Operation.TYPE_REST;
-import static io.servicecomb.saga.core.SagaEventMatcher.eventWith;
-import static io.servicecomb.saga.core.SagaResponse.EMPTY_RESPONSE;
-import static io.servicecomb.saga.core.SagaResponse.NONE_RESPONSE;
-import static io.servicecomb.saga.core.SagaTask.SAGA_END_TASK;
-import static io.servicecomb.saga.core.SagaTask.SAGA_REQUEST_TASK;
-import static io.servicecomb.saga.core.SagaTask.SAGA_START_TASK;
-import static io.servicecomb.saga.core.Transaction.SAGA_END_TRANSACTION;
-import static io.servicecomb.saga.core.Transaction.SAGA_START_TRANSACTION;
+import static org.apache.servicecomb.saga.core.Compensation.SAGA_START_COMPENSATION;
+import static org.apache.servicecomb.saga.core.Operation.TYPE_REST;
+import static org.apache.servicecomb.saga.core.SagaEventMatcher.eventWith;
+import static org.apache.servicecomb.saga.core.SagaResponse.EMPTY_RESPONSE;
+import static org.apache.servicecomb.saga.core.SagaResponse.NONE_RESPONSE;
+import static org.apache.servicecomb.saga.core.SagaTask.SAGA_END_TASK;
+import static org.apache.servicecomb.saga.core.SagaTask.SAGA_REQUEST_TASK;
+import static org.apache.servicecomb.saga.core.SagaTask.SAGA_START_TASK;
+import static org.apache.servicecomb.saga.core.Transaction.SAGA_END_TRANSACTION;
+import static org.apache.servicecomb.saga.core.Transaction.SAGA_START_TRANSACTION;
 import static java.util.Arrays.asList;
 import static java.util.Collections.emptySet;
 import static java.util.Collections.singletonList;
@@ -60,11 +58,11 @@ import org.mockito.stubbing.Answer;
 
 import com.seanyinx.github.unit.scaffolding.Randomness;
 
-import io.servicecomb.saga.core.application.interpreter.FromJsonFormat;
-import io.servicecomb.saga.core.dag.Node;
-import io.servicecomb.saga.core.dag.SingleLeafDirectedAcyclicGraph;
-import io.servicecomb.saga.infrastructure.ContextAwareEventStore;
-import io.servicecomb.saga.infrastructure.EmbeddedEventStore;
+import org.apache.servicecomb.saga.core.application.interpreter.FromJsonFormat;
+import org.apache.servicecomb.saga.core.dag.Node;
+import org.apache.servicecomb.saga.core.dag.SingleLeafDirectedAcyclicGraph;
+import org.apache.servicecomb.saga.infrastructure.ContextAwareEventStore;
+import org.apache.servicecomb.saga.infrastructure.EmbeddedEventStore;
 
 @SuppressWarnings("unchecked")
 public class SagaIntegrationTest {
@@ -108,8 +106,8 @@ public class SagaIntegrationTest {
   private final Node<SagaRequest> node2 = new Node<>(2, request2);
   private final Node<SagaRequest> node3 = new Node<>(3, request3);
   private final Node<SagaRequest> node4 = new Node<>(4, request4);
-  private final Node<SagaRequest> root = new Node<>(0, SAGA_START_REQUEST);
-  private final Node<SagaRequest> leaf = new Node<>(5, SAGA_END_REQUEST);
+  private final Node<SagaRequest> root = new Node<>(0, NoOpSagaRequest.SAGA_START_REQUEST);
+  private final Node<SagaRequest> leaf = new Node<>(5, NoOpSagaRequest.SAGA_END_REQUEST);
   private final SingleLeafDirectedAcyclicGraph<SagaRequest> sagaTaskGraph = new SingleLeafDirectedAcyclicGraph<>(root, leaf);
 
   private Saga saga;
@@ -404,7 +402,7 @@ public class SagaIntegrationTest {
     addExtraChildToNode1();
 
     Iterable<EventEnvelope> events = asList(
-        envelope(new SagaStartedEvent(sagaId, requestJson, SAGA_START_REQUEST)),
+        envelope(new SagaStartedEvent(sagaId, requestJson, NoOpSagaRequest.SAGA_START_REQUEST)),
         envelope(new TransactionStartedEvent(sagaId, request1)),
         envelope(new TransactionEndedEvent(sagaId, request1, transactionResponse1)),
         envelope(new TransactionStartedEvent(sagaId, request2)),
@@ -440,7 +438,7 @@ public class SagaIntegrationTest {
     addExtraChildToNode1();
 
     Iterable<EventEnvelope> events = asList(
-        envelope(new SagaStartedEvent(sagaId, requestJson, SAGA_START_REQUEST)),
+        envelope(new SagaStartedEvent(sagaId, requestJson, NoOpSagaRequest.SAGA_START_REQUEST)),
         envelope(new TransactionStartedEvent(sagaId, request1)),
         envelope(new TransactionEndedEvent(sagaId, request1, transactionResponse1)),
         envelope(new TransactionStartedEvent(sagaId, request2)),
@@ -478,7 +476,7 @@ public class SagaIntegrationTest {
     addExtraChildToNode1();
 
     Iterable<EventEnvelope> events = asList(
-        envelope(new SagaStartedEvent(sagaId, requestJson, SAGA_START_REQUEST)),
+        envelope(new SagaStartedEvent(sagaId, requestJson, NoOpSagaRequest.SAGA_START_REQUEST)),
         envelope(new TransactionStartedEvent(sagaId, request1)),
         envelope(new TransactionEndedEvent(sagaId, request1)),
         envelope(new TransactionStartedEvent(sagaId, request2)),
@@ -518,7 +516,7 @@ public class SagaIntegrationTest {
     addExtraChildToNode1();
 
     Iterable<EventEnvelope> events = asList(
-        envelope(new SagaStartedEvent(sagaId, requestJson, SAGA_START_REQUEST)),
+        envelope(new SagaStartedEvent(sagaId, requestJson, NoOpSagaRequest.SAGA_START_REQUEST)),
         envelope(new TransactionStartedEvent(sagaId, request1)),
         envelope(new TransactionEndedEvent(sagaId, request1)),
         envelope(new TransactionStartedEvent(sagaId, request2)),
@@ -560,7 +558,7 @@ public class SagaIntegrationTest {
     addExtraChildToNode1();
 
     Iterable<EventEnvelope> events = asList(
-        envelope(new SagaStartedEvent(sagaId, requestJson, SAGA_START_REQUEST)),
+        envelope(new SagaStartedEvent(sagaId, requestJson, NoOpSagaRequest.SAGA_START_REQUEST)),
         envelope(new TransactionStartedEvent(sagaId, request1)),
         envelope(new TransactionEndedEvent(sagaId, request1)),
         envelope(new TransactionStartedEvent(sagaId, request2)),
@@ -599,7 +597,7 @@ public class SagaIntegrationTest {
   @Test
   public void restoresSagaToEndStateByPlayingAllEvents() {
     Iterable<EventEnvelope> events = asList(
-        envelope(new SagaStartedEvent(sagaId, requestJson, SAGA_START_REQUEST)),
+        envelope(new SagaStartedEvent(sagaId, requestJson, NoOpSagaRequest.SAGA_START_REQUEST)),
         envelope(new TransactionStartedEvent(sagaId, request1)),
         envelope(new TransactionEndedEvent(sagaId, request1)),
         envelope(new TransactionStartedEvent(sagaId, request2)),
diff --git a/saga-core/src/test/java/io/servicecomb/saga/core/SagaStartTaskTest.java b/saga-core/src/test/java/org/apache/servicecomb/saga/core/SagaStartTaskTest.java
similarity index 98%
rename from saga-core/src/test/java/io/servicecomb/saga/core/SagaStartTaskTest.java
rename to saga-core/src/test/java/org/apache/servicecomb/saga/core/SagaStartTaskTest.java
index 8eafc01..b1d0c4e 100644
--- a/saga-core/src/test/java/io/servicecomb/saga/core/SagaStartTaskTest.java
+++ b/saga-core/src/test/java/org/apache/servicecomb/saga/core/SagaStartTaskTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 import static com.seanyinx.github.unit.scaffolding.AssertUtils.expectFailing;
 import static org.hamcrest.CoreMatchers.is;
diff --git a/saga-core/src/test/java/io/servicecomb/saga/core/TransactionImpl.java b/saga-core/src/test/java/org/apache/servicecomb/saga/core/TransactionImpl.java
similarity index 96%
rename from saga-core/src/test/java/io/servicecomb/saga/core/TransactionImpl.java
rename to saga-core/src/test/java/org/apache/servicecomb/saga/core/TransactionImpl.java
index 9c301ad..a59b142 100644
--- a/saga-core/src/test/java/io/servicecomb/saga/core/TransactionImpl.java
+++ b/saga-core/src/test/java/org/apache/servicecomb/saga/core/TransactionImpl.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 import java.util.Map;
 
diff --git a/saga-core/src/test/java/io/servicecomb/saga/core/actors/ActorBasedSagaExecutionComponentTest.java b/saga-core/src/test/java/org/apache/servicecomb/saga/core/actors/ActorBasedSagaExecutionComponentTest.java
similarity index 81%
rename from saga-core/src/test/java/io/servicecomb/saga/core/actors/ActorBasedSagaExecutionComponentTest.java
rename to saga-core/src/test/java/org/apache/servicecomb/saga/core/actors/ActorBasedSagaExecutionComponentTest.java
index 70dcc88..01f8adb 100644
--- a/saga-core/src/test/java/io/servicecomb/saga/core/actors/ActorBasedSagaExecutionComponentTest.java
+++ b/saga-core/src/test/java/org/apache/servicecomb/saga/core/actors/ActorBasedSagaExecutionComponentTest.java
@@ -15,11 +15,11 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core.actors;
+package org.apache.servicecomb.saga.core.actors;
 
-import io.servicecomb.saga.core.PersistentStore;
-import io.servicecomb.saga.core.SagaExecutionComponentTestBase;
-import io.servicecomb.saga.core.application.SagaFactory;
+import org.apache.servicecomb.saga.core.application.SagaFactory;
+import org.apache.servicecomb.saga.core.PersistentStore;
+import org.apache.servicecomb.saga.core.SagaExecutionComponentTestBase;
 
 
 public class ActorBasedSagaExecutionComponentTest extends SagaExecutionComponentTestBase {
diff --git a/saga-core/src/test/java/io/servicecomb/saga/core/actors/ActorBasedSagaIntegrationTest.java b/saga-core/src/test/java/org/apache/servicecomb/saga/core/actors/ActorBasedSagaIntegrationTest.java
similarity index 58%
rename from saga-core/src/test/java/io/servicecomb/saga/core/actors/ActorBasedSagaIntegrationTest.java
rename to saga-core/src/test/java/org/apache/servicecomb/saga/core/actors/ActorBasedSagaIntegrationTest.java
index 774abd8..ac649f0 100644
--- a/saga-core/src/test/java/io/servicecomb/saga/core/actors/ActorBasedSagaIntegrationTest.java
+++ b/saga-core/src/test/java/org/apache/servicecomb/saga/core/actors/ActorBasedSagaIntegrationTest.java
@@ -15,16 +15,10 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core.actors;
-
-import static io.servicecomb.saga.core.Compensation.SAGA_START_COMPENSATION;
-import static io.servicecomb.saga.core.NoOpSagaRequest.SAGA_START_REQUEST;
-import static io.servicecomb.saga.core.Operation.TYPE_REST;
-import static io.servicecomb.saga.core.SagaEventMatcher.eventWith;
-import static io.servicecomb.saga.core.SagaResponse.EMPTY_RESPONSE;
-import static io.servicecomb.saga.core.SagaResponse.NONE_RESPONSE;
-import static io.servicecomb.saga.core.Transaction.SAGA_END_TRANSACTION;
-import static io.servicecomb.saga.core.Transaction.SAGA_START_TRANSACTION;
+package org.apache.servicecomb.saga.core.actors;
+
+import static org.apache.servicecomb.saga.core.Transaction.SAGA_END_TRANSACTION;
+import static org.apache.servicecomb.saga.core.Transaction.SAGA_START_TRANSACTION;
 import static java.util.Arrays.asList;
 import static java.util.Collections.emptySet;
 import static java.util.Collections.singletonList;
@@ -48,6 +42,27 @@ import java.util.concurrent.Callable;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.CyclicBarrier;
 
+import org.apache.servicecomb.saga.core.Compensation;
+import org.apache.servicecomb.saga.core.EventEnvelope;
+import org.apache.servicecomb.saga.core.EventStore;
+import org.apache.servicecomb.saga.core.Fallback;
+import org.apache.servicecomb.saga.core.ForwardRecovery;
+import org.apache.servicecomb.saga.core.IdGenerator;
+import org.apache.servicecomb.saga.core.LongIdGenerator;
+import org.apache.servicecomb.saga.core.NoOpSagaRequest;
+import org.apache.servicecomb.saga.core.Operation;
+import org.apache.servicecomb.saga.core.Saga;
+import org.apache.servicecomb.saga.core.SagaEventMatcher;
+import org.apache.servicecomb.saga.core.SagaRequest;
+import org.apache.servicecomb.saga.core.SagaRequestImpl;
+import org.apache.servicecomb.saga.core.SagaResponse;
+import org.apache.servicecomb.saga.core.SagaStartedEvent;
+import org.apache.servicecomb.saga.core.SuccessfulSagaResponse;
+import org.apache.servicecomb.saga.core.TransactionCompensatedEvent;
+import org.apache.servicecomb.saga.core.TransactionStartedEvent;
+import org.apache.servicecomb.saga.core.application.SagaFactory;
+import org.hamcrest.CoreMatchers;
+import org.hamcrest.collection.IsIterableContainingInOrder;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Ignore;
@@ -56,32 +71,16 @@ import org.mockito.stubbing.Answer;
 
 import com.seanyinx.github.unit.scaffolding.Randomness;
 
-import io.servicecomb.saga.core.BackwardRecovery;
-import io.servicecomb.saga.core.Compensation;
-import io.servicecomb.saga.core.EventEnvelope;
-import io.servicecomb.saga.core.EventStore;
-import io.servicecomb.saga.core.Fallback;
-import io.servicecomb.saga.core.ForwardRecovery;
-import io.servicecomb.saga.core.IdGenerator;
-import io.servicecomb.saga.core.LongIdGenerator;
-import io.servicecomb.saga.core.PersistentStore;
-import io.servicecomb.saga.core.Saga;
-import io.servicecomb.saga.core.SagaDefinition;
-import io.servicecomb.saga.core.SagaEndedEvent;
-import io.servicecomb.saga.core.SagaEvent;
-import io.servicecomb.saga.core.SagaRequest;
-import io.servicecomb.saga.core.SagaRequestImpl;
-import io.servicecomb.saga.core.SagaResponse;
-import io.servicecomb.saga.core.SagaStartedEvent;
-import io.servicecomb.saga.core.SuccessfulSagaResponse;
-import io.servicecomb.saga.core.Transaction;
-import io.servicecomb.saga.core.TransactionAbortedEvent;
-import io.servicecomb.saga.core.TransactionCompensatedEvent;
-import io.servicecomb.saga.core.TransactionEndedEvent;
-import io.servicecomb.saga.core.TransactionStartedEvent;
-import io.servicecomb.saga.core.application.SagaFactory;
-import io.servicecomb.saga.core.application.interpreter.FromJsonFormat;
-import io.servicecomb.saga.infrastructure.EmbeddedEventStore;
+import org.apache.servicecomb.saga.core.BackwardRecovery;
+import org.apache.servicecomb.saga.core.PersistentStore;
+import org.apache.servicecomb.saga.core.SagaDefinition;
+import org.apache.servicecomb.saga.core.SagaEndedEvent;
+import org.apache.servicecomb.saga.core.SagaEvent;
+import org.apache.servicecomb.saga.core.Transaction;
+import org.apache.servicecomb.saga.core.TransactionAbortedEvent;
+import org.apache.servicecomb.saga.core.TransactionEndedEvent;
+import org.apache.servicecomb.saga.core.application.interpreter.FromJsonFormat;
+import org.apache.servicecomb.saga.infrastructure.EmbeddedEventStore;
 
 @SuppressWarnings("unchecked")
 public class ActorBasedSagaIntegrationTest {
@@ -132,15 +131,15 @@ public class ActorBasedSagaIntegrationTest {
     when(sagaDefinition.requests()).thenReturn(new SagaRequest[]{request1, request2});
 
     when(childrenExtractor.fromJson(anyString())).thenReturn(emptySet());
-    when(childrenExtractor.fromJson(NONE_RESPONSE.body())).thenReturn(setOf("none"));
+    when(childrenExtractor.fromJson(SagaResponse.NONE_RESPONSE.body())).thenReturn(setOf("none"));
 
-    when(transaction1.send(request1.serviceName(), EMPTY_RESPONSE)).thenReturn(transactionResponse1);
+    when(transaction1.send(request1.serviceName(), SagaResponse.EMPTY_RESPONSE)).thenReturn(transactionResponse1);
     when(transaction2.send(request2.serviceName(), transactionResponse1)).thenReturn(transactionResponse2);
     when(transaction3.send(request3.serviceName(), transactionResponse1)).thenReturn(transactionResponse3);
 
     when(compensation1.send(request1.serviceName(), compensationResponse2)).thenReturn(compensationResponse1);
     when(compensation2.send(request2.serviceName(), compensationResponse3)).thenReturn(compensationResponse2);
-    when(compensation3.send(request3.serviceName(), EMPTY_RESPONSE)).thenReturn(compensationResponse3);
+    when(compensation3.send(request3.serviceName(), SagaResponse.EMPTY_RESPONSE)).thenReturn(compensationResponse3);
   }
 
   @After
@@ -154,16 +153,16 @@ public class ActorBasedSagaIntegrationTest {
     saga = sagaFactory.createSaga(requestJson, sagaId, eventStore, sagaDefinition);
     saga.run();
 
-    assertThat(eventStore, contains(
-        eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionEndedEvent.class),
-        eventWith(sagaId, transaction2, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction2, TransactionEndedEvent.class),
-        eventWith(sagaId, SAGA_END_TRANSACTION, SagaEndedEvent.class)
+    assertThat(eventStore, IsIterableContainingInOrder.contains(
+        SagaEventMatcher.eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionStartedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionEndedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction2, TransactionStartedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction2, TransactionEndedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, SAGA_END_TRANSACTION, SagaEndedEvent.class)
     ));
 
-    verify(transaction1).send(request1.serviceName(), EMPTY_RESPONSE);
+    verify(transaction1).send(request1.serviceName(), SagaResponse.EMPTY_RESPONSE);
     verify(transaction2).send(request2.serviceName(), transactionResponse1);
 
     verify(compensation1, never()).send(request1.serviceName());
@@ -196,19 +195,21 @@ public class ActorBasedSagaIntegrationTest {
 
     saga.run();
 
-    assertThat(eventStore, contains(
-        eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionEndedEvent.class),
-        anyOf(eventWith(sagaId, transaction2, TransactionStartedEvent.class), eventWith(sagaId, transaction3, TransactionStartedEvent.class)),
-        anyOf(eventWith(sagaId, transaction2, TransactionStartedEvent.class), eventWith(sagaId, transaction3, TransactionStartedEvent.class)),
-        eventWith(sagaId, transaction3, TransactionEndedEvent.class),
-        eventWith(sagaId, transaction2, TransactionAbortedEvent.class),
-        eventWith(sagaId, compensation3, TransactionCompensatedEvent.class),
-        eventWith(sagaId, compensation1, TransactionCompensatedEvent.class),
-        eventWith(sagaId, SAGA_START_COMPENSATION, SagaEndedEvent.class)));
-
-    verify(transaction1).send(request1.serviceName(), EMPTY_RESPONSE);
+    assertThat(eventStore, IsIterableContainingInOrder.contains(
+        SagaEventMatcher.eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionStartedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionEndedEvent.class),
+        CoreMatchers.anyOf(SagaEventMatcher.eventWith(sagaId, transaction2, TransactionStartedEvent.class), SagaEventMatcher
+            .eventWith(sagaId, transaction3, TransactionStartedEvent.class)),
+        CoreMatchers.anyOf(SagaEventMatcher.eventWith(sagaId, transaction2, TransactionStartedEvent.class), SagaEventMatcher
+            .eventWith(sagaId, transaction3, TransactionStartedEvent.class)),
+        SagaEventMatcher.eventWith(sagaId, transaction3, TransactionEndedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction2, TransactionAbortedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, compensation3, TransactionCompensatedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, compensation1, TransactionCompensatedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, Compensation.SAGA_START_COMPENSATION, SagaEndedEvent.class)));
+
+    verify(transaction1).send(request1.serviceName(), SagaResponse.EMPTY_RESPONSE);
     verify(transaction2).send(request2.serviceName(), transactionResponse1);
     verify(transaction3).send(request3.serviceName(), transactionResponse1);
 
@@ -226,16 +227,16 @@ public class ActorBasedSagaIntegrationTest {
 
     saga.run();
 
-    assertThat(eventStore, contains(
-        eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionEndedEvent.class),
-        eventWith(sagaId, transaction3, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction3, TransactionEndedEvent.class),
-        eventWith(sagaId, SAGA_END_TRANSACTION, SagaEndedEvent.class)
+    assertThat(eventStore, IsIterableContainingInOrder.contains(
+        SagaEventMatcher.eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionStartedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionEndedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction3, TransactionStartedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction3, TransactionEndedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, SAGA_END_TRANSACTION, SagaEndedEvent.class)
     ));
 
-    verify(transaction1).send(request1.serviceName(), EMPTY_RESPONSE);
+    verify(transaction1).send(request1.serviceName(), SagaResponse.EMPTY_RESPONSE);
     verify(transaction3).send(request3.serviceName(), transactionResponse1);
     verify(transaction2, never()).send(anyString(), any(SagaResponse.class));
 
@@ -253,14 +254,14 @@ public class ActorBasedSagaIntegrationTest {
 
     saga.run();
 
-    assertThat(eventStore, contains(
-        eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionEndedEvent.class),
-        eventWith(sagaId, SAGA_END_TRANSACTION, SagaEndedEvent.class)
+    assertThat(eventStore, IsIterableContainingInOrder.contains(
+        SagaEventMatcher.eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionStartedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionEndedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, SAGA_END_TRANSACTION, SagaEndedEvent.class)
     ));
 
-    verify(transaction1).send(request1.serviceName(), EMPTY_RESPONSE);
+    verify(transaction1).send(request1.serviceName(), SagaResponse.EMPTY_RESPONSE);
     verify(transaction2, never()).send(anyString(), any(SagaResponse.class));
     verify(transaction3, never()).send(anyString(), any(SagaResponse.class));
     verify(transaction4, never()).send(anyString(), any(SagaResponse.class));
@@ -282,20 +283,20 @@ public class ActorBasedSagaIntegrationTest {
 
     saga.run();
 
-    assertThat(eventStore, contains(
-        eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionEndedEvent.class),
-        eventWith(sagaId, transaction3, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction3, TransactionEndedEvent.class),
-        eventWith(sagaId, transaction4, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction4, TransactionAbortedEvent.class),
-        eventWith(sagaId, transaction3, TransactionCompensatedEvent.class),
-        eventWith(sagaId, transaction1, TransactionCompensatedEvent.class),
-        eventWith(sagaId, SAGA_START_COMPENSATION, SagaEndedEvent.class)
+    assertThat(eventStore, IsIterableContainingInOrder.contains(
+        SagaEventMatcher.eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionStartedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionEndedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction3, TransactionStartedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction3, TransactionEndedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction4, TransactionStartedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction4, TransactionAbortedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction3, TransactionCompensatedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionCompensatedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, Compensation.SAGA_START_COMPENSATION, SagaEndedEvent.class)
     ));
 
-    verify(transaction1).send(request1.serviceName(), EMPTY_RESPONSE);
+    verify(transaction1).send(request1.serviceName(), SagaResponse.EMPTY_RESPONSE);
     verify(transaction3).send(request3.serviceName(), transactionResponse1);
     verify(transaction4).send(request4.serviceName(), transactionResponse3);
     verify(transaction2, never()).send(anyString(), any(SagaResponse.class));
@@ -335,24 +336,24 @@ public class ActorBasedSagaIntegrationTest {
     saga.run();
 
     // the ordering of events may not be consistence due to concurrent processing of requests
-    assertThat(eventStore, contains(
-        eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionEndedEvent.class),
-        anyOf(
-            eventWith(sagaId, transaction2, TransactionStartedEvent.class),
-            eventWith(sagaId, transaction3, TransactionStartedEvent.class)),
-        anyOf(
-            eventWith(sagaId, transaction3, TransactionStartedEvent.class),
-            eventWith(sagaId, transaction2, TransactionStartedEvent.class)),
-        eventWith(sagaId, transaction3, TransactionAbortedEvent.class),
-        eventWith(sagaId, transaction2, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction2, TransactionEndedEvent.class),
-        eventWith(sagaId, compensation2, TransactionCompensatedEvent.class),
-        eventWith(sagaId, compensation1, TransactionCompensatedEvent.class),
-        eventWith(sagaId, SAGA_START_COMPENSATION, SagaEndedEvent.class)));
-
-    verify(transaction1).send(request1.serviceName(), EMPTY_RESPONSE);
+    assertThat(eventStore, IsIterableContainingInOrder.contains(
+        SagaEventMatcher.eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionStartedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionEndedEvent.class),
+        CoreMatchers.anyOf(
+            SagaEventMatcher.eventWith(sagaId, transaction2, TransactionStartedEvent.class),
+            SagaEventMatcher.eventWith(sagaId, transaction3, TransactionStartedEvent.class)),
+        CoreMatchers.anyOf(
+            SagaEventMatcher.eventWith(sagaId, transaction3, TransactionStartedEvent.class),
+            SagaEventMatcher.eventWith(sagaId, transaction2, TransactionStartedEvent.class)),
+        SagaEventMatcher.eventWith(sagaId, transaction3, TransactionAbortedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction2, TransactionStartedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction2, TransactionEndedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, compensation2, TransactionCompensatedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, compensation1, TransactionCompensatedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, Compensation.SAGA_START_COMPENSATION, SagaEndedEvent.class)));
+
+    verify(transaction1).send(request1.serviceName(), SagaResponse.EMPTY_RESPONSE);
     verify(transaction2, times(2)).send(request2.serviceName(), transactionResponse1);
     verify(transaction3).send(request3.serviceName(), transactionResponse1);
 
@@ -373,16 +374,16 @@ public class ActorBasedSagaIntegrationTest {
 
     saga.run();
 
-    assertThat(eventStore, contains(
-        eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionEndedEvent.class),
-        eventWith(sagaId, transaction2, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction2, TransactionEndedEvent.class),
-        eventWith(sagaId, SAGA_END_TRANSACTION, SagaEndedEvent.class)
+    assertThat(eventStore, IsIterableContainingInOrder.contains(
+        SagaEventMatcher.eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionStartedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionEndedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction2, TransactionStartedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction2, TransactionEndedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, SAGA_END_TRANSACTION, SagaEndedEvent.class)
     ));
 
-    verify(transaction1).send(request1.serviceName(), EMPTY_RESPONSE);
+    verify(transaction1).send(request1.serviceName(), SagaResponse.EMPTY_RESPONSE);
     verify(transaction2, times(3)).send(request2.serviceName(), transactionResponse1);
 
     verify(compensation1, never()).send(anyString(), any(SagaResponse.class));
@@ -400,7 +401,7 @@ public class ActorBasedSagaIntegrationTest {
 
     saga.run();
 
-    verify(transaction1).send(request1.serviceName(), EMPTY_RESPONSE);
+    verify(transaction1).send(request1.serviceName(), SagaResponse.EMPTY_RESPONSE);
     verify(transaction2).send(request2.serviceName(), transactionResponse1);
 
     verify(compensation1, times(retries + 1)).send(request1.serviceName());
@@ -415,7 +416,7 @@ public class ActorBasedSagaIntegrationTest {
     saga = sagaFactory.createSaga(requestJson, sagaId, eventStore, sagaDefinition);
 
     Iterable<EventEnvelope> events = asList(
-        envelope(new SagaStartedEvent(sagaId, requestJson, SAGA_START_REQUEST)),
+        envelope(new SagaStartedEvent(sagaId, requestJson, NoOpSagaRequest.SAGA_START_REQUEST)),
         envelope(new TransactionStartedEvent(sagaId, request1)),
         envelope(new TransactionEndedEvent(sagaId, request1, transactionResponse1)),
         envelope(new TransactionStartedEvent(sagaId, request2)),
@@ -426,15 +427,15 @@ public class ActorBasedSagaIntegrationTest {
     saga.play();
 
     saga.run();
-    assertThat(eventStore, contains(
-        eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionEndedEvent.class),
-        eventWith(sagaId, transaction2, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction2, TransactionEndedEvent.class),
-        eventWith(sagaId, transaction3, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction3, TransactionEndedEvent.class),
-        eventWith(sagaId, SAGA_END_TRANSACTION, SagaEndedEvent.class)
+    assertThat(eventStore, IsIterableContainingInOrder.contains(
+        SagaEventMatcher.eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionStartedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionEndedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction2, TransactionStartedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction2, TransactionEndedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction3, TransactionStartedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction3, TransactionEndedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, SAGA_END_TRANSACTION, SagaEndedEvent.class)
     ));
 
     verify(transaction1, never()).send(anyString(), any(SagaResponse.class));
@@ -452,7 +453,7 @@ public class ActorBasedSagaIntegrationTest {
     saga = sagaFactory.createSaga(requestJson, sagaId, eventStore, sagaDefinition);
 
     Iterable<EventEnvelope> events = asList(
-        envelope(new SagaStartedEvent(sagaId, requestJson, SAGA_START_REQUEST)),
+        envelope(new SagaStartedEvent(sagaId, requestJson, NoOpSagaRequest.SAGA_START_REQUEST)),
         envelope(new TransactionStartedEvent(sagaId, request1)),
         envelope(new TransactionEndedEvent(sagaId, request1, transactionResponse1)),
         envelope(new TransactionStartedEvent(sagaId, request2)),
@@ -464,16 +465,16 @@ public class ActorBasedSagaIntegrationTest {
     saga.play();
 
     saga.run();
-    assertThat(eventStore, contains(
-        eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionEndedEvent.class),
-        eventWith(sagaId, transaction2, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction2, TransactionEndedEvent.class),
-        eventWith(sagaId, transaction3, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction3, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction3, TransactionEndedEvent.class),
-        eventWith(sagaId, SAGA_END_TRANSACTION, SagaEndedEvent.class)
+    assertThat(eventStore, IsIterableContainingInOrder.contains(
+        SagaEventMatcher.eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionStartedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionEndedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction2, TransactionStartedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction2, TransactionEndedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction3, TransactionStartedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction3, TransactionStartedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction3, TransactionEndedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, SAGA_END_TRANSACTION, SagaEndedEvent.class)
     ));
 
     verify(transaction1, never()).send(anyString(), any(SagaResponse.class));
@@ -491,7 +492,7 @@ public class ActorBasedSagaIntegrationTest {
     saga = sagaFactory.createSaga(requestJson, sagaId, eventStore, sagaDefinition);
 
     Iterable<EventEnvelope> events = asList(
-        envelope(new SagaStartedEvent(sagaId, requestJson, SAGA_START_REQUEST)),
+        envelope(new SagaStartedEvent(sagaId, requestJson, NoOpSagaRequest.SAGA_START_REQUEST)),
         envelope(new TransactionStartedEvent(sagaId, request1)),
         envelope(new TransactionEndedEvent(sagaId, request1)),
         envelope(new TransactionStartedEvent(sagaId, request2)),
@@ -504,17 +505,17 @@ public class ActorBasedSagaIntegrationTest {
     saga.play();
 
     saga.run();
-    assertThat(eventStore, contains(
-        eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionEndedEvent.class),
-        eventWith(sagaId, transaction2, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction2, TransactionEndedEvent.class),
-        eventWith(sagaId, transaction3, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction3, TransactionAbortedEvent.class),
-        eventWith(sagaId, compensation2, TransactionCompensatedEvent.class),
-        eventWith(sagaId, compensation1, TransactionCompensatedEvent.class),
-        eventWith(sagaId, SAGA_START_COMPENSATION, SagaEndedEvent.class)
+    assertThat(eventStore, IsIterableContainingInOrder.contains(
+        SagaEventMatcher.eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionStartedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionEndedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction2, TransactionStartedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction2, TransactionEndedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction3, TransactionStartedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction3, TransactionAbortedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, compensation2, TransactionCompensatedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, compensation1, TransactionCompensatedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, Compensation.SAGA_START_COMPENSATION, SagaEndedEvent.class)
     ));
 
     verify(transaction1, never()).send(anyString(), any(SagaResponse.class));
@@ -532,7 +533,7 @@ public class ActorBasedSagaIntegrationTest {
     saga = sagaFactory.createSaga(requestJson, sagaId, eventStore, sagaDefinition);
 
     Iterable<EventEnvelope> events = asList(
-        envelope(new SagaStartedEvent(sagaId, requestJson, SAGA_START_REQUEST)),
+        envelope(new SagaStartedEvent(sagaId, requestJson, NoOpSagaRequest.SAGA_START_REQUEST)),
         envelope(new TransactionStartedEvent(sagaId, request1)),
         envelope(new TransactionEndedEvent(sagaId, request1)),
         envelope(new TransactionStartedEvent(sagaId, request2)),
@@ -546,17 +547,17 @@ public class ActorBasedSagaIntegrationTest {
     saga.play();
 
     saga.run();
-    assertThat(eventStore, contains(
-        eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionEndedEvent.class),
-        eventWith(sagaId, transaction2, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction2, TransactionEndedEvent.class),
-        eventWith(sagaId, transaction3, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction3, TransactionAbortedEvent.class),
-        eventWith(sagaId, compensation2, TransactionCompensatedEvent.class),
-        eventWith(sagaId, compensation1, TransactionCompensatedEvent.class),
-        eventWith(sagaId, SAGA_START_COMPENSATION, SagaEndedEvent.class)
+    assertThat(eventStore, IsIterableContainingInOrder.contains(
+        SagaEventMatcher.eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionStartedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionEndedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction2, TransactionStartedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction2, TransactionEndedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction3, TransactionStartedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction3, TransactionAbortedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, compensation2, TransactionCompensatedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, compensation1, TransactionCompensatedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, Compensation.SAGA_START_COMPENSATION, SagaEndedEvent.class)
     ));
 
     verify(transaction1, never()).send(anyString(), any(SagaResponse.class));
@@ -574,7 +575,7 @@ public class ActorBasedSagaIntegrationTest {
     saga = sagaFactory.createSaga(requestJson, sagaId, eventStore, sagaDefinition);
 
     Iterable<EventEnvelope> events = asList(
-        envelope(new SagaStartedEvent(sagaId, requestJson, SAGA_START_REQUEST)),
+        envelope(new SagaStartedEvent(sagaId, requestJson, NoOpSagaRequest.SAGA_START_REQUEST)),
         envelope(new TransactionStartedEvent(sagaId, request1)),
         envelope(new TransactionEndedEvent(sagaId, request1)),
         envelope(new TransactionStartedEvent(sagaId, request2)),
@@ -588,17 +589,17 @@ public class ActorBasedSagaIntegrationTest {
     saga.play();
 
     saga.run();
-    assertThat(eventStore, contains(
-        eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionEndedEvent.class),
-        eventWith(sagaId, transaction2, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction2, TransactionEndedEvent.class),
-        eventWith(sagaId, transaction3, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction3, TransactionAbortedEvent.class),
-        eventWith(sagaId, compensation2, TransactionCompensatedEvent.class),
-        eventWith(sagaId, compensation1, TransactionCompensatedEvent.class),
-        eventWith(sagaId, SAGA_START_COMPENSATION, SagaEndedEvent.class)
+    assertThat(eventStore, IsIterableContainingInOrder.contains(
+        SagaEventMatcher.eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionStartedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionEndedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction2, TransactionStartedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction2, TransactionEndedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction3, TransactionStartedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction3, TransactionAbortedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, compensation2, TransactionCompensatedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, compensation1, TransactionCompensatedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, Compensation.SAGA_START_COMPENSATION, SagaEndedEvent.class)
     ));
 
     verify(transaction1, never()).send(anyString(), any(SagaResponse.class));
@@ -614,7 +615,7 @@ public class ActorBasedSagaIntegrationTest {
   public void restoresSagaToEndStateByPlayingAllEvents() {
     saga = sagaFactory.createSaga(requestJson, sagaId, eventStore, sagaDefinition);
     Iterable<EventEnvelope> events = asList(
-        envelope(new SagaStartedEvent(sagaId, requestJson, SAGA_START_REQUEST)),
+        envelope(new SagaStartedEvent(sagaId, requestJson, NoOpSagaRequest.SAGA_START_REQUEST)),
         envelope(new TransactionStartedEvent(sagaId, request1)),
         envelope(new TransactionEndedEvent(sagaId, request1)),
         envelope(new TransactionStartedEvent(sagaId, request2)),
@@ -625,13 +626,13 @@ public class ActorBasedSagaIntegrationTest {
     saga.play();
 
     saga.run();
-    assertThat(eventStore, contains(
-        eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionEndedEvent.class),
-        eventWith(sagaId, transaction2, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction2, TransactionEndedEvent.class),
-        eventWith(sagaId, SAGA_END_TRANSACTION, SagaEndedEvent.class)
+    assertThat(eventStore, IsIterableContainingInOrder.contains(
+        SagaEventMatcher.eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionStartedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionEndedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction2, TransactionStartedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, transaction2, TransactionEndedEvent.class),
+        SagaEventMatcher.eventWith(sagaId, SAGA_END_TRANSACTION, SagaEndedEvent.class)
     ));
 
     verify(transaction1, never()).send(anyString(), any(SagaResponse.class));
@@ -672,7 +673,7 @@ public class ActorBasedSagaIntegrationTest {
       Compensation compensation,
       String... parentIds) {
 
-    return new SagaRequestImpl(requestId, serviceName, TYPE_REST, transaction, compensation, parentIds);
+    return new SagaRequestImpl(requestId, serviceName, Operation.TYPE_REST, transaction, compensation, parentIds);
   }
 
   private SagaRequest request(String requestId,
@@ -681,7 +682,7 @@ public class ActorBasedSagaIntegrationTest {
       Compensation compensation,
       Fallback fallback) {
 
-    return new SagaRequestImpl(requestId, serviceName, TYPE_REST, transaction, compensation, fallback);
+    return new SagaRequestImpl(requestId, serviceName, Operation.TYPE_REST, transaction, compensation, fallback);
   }
 
   private HashSet<String> setOf(String requestId) {
diff --git a/saga-core/src/test/java/io/servicecomb/saga/core/actors/CompletionCallbackActorTest.java b/saga-core/src/test/java/org/apache/servicecomb/saga/core/actors/CompletionCallbackActorTest.java
similarity index 88%
rename from saga-core/src/test/java/io/servicecomb/saga/core/actors/CompletionCallbackActorTest.java
rename to saga-core/src/test/java/org/apache/servicecomb/saga/core/actors/CompletionCallbackActorTest.java
index bb43d6e..5823a06 100644
--- a/saga-core/src/test/java/io/servicecomb/saga/core/actors/CompletionCallbackActorTest.java
+++ b/saga-core/src/test/java/org/apache/servicecomb/saga/core/actors/CompletionCallbackActorTest.java
@@ -15,12 +15,11 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core.actors;
+package org.apache.servicecomb.saga.core.actors;
 
 import static akka.actor.ActorRef.noSender;
 import static akka.actor.Props.empty;
 import static com.seanyinx.github.unit.scaffolding.Randomness.uniquify;
-import static io.servicecomb.saga.core.NoOpSagaRequest.SAGA_END_REQUEST;
 import static org.awaitility.Awaitility.await;
 import static org.hamcrest.core.Is.is;
 import static org.hamcrest.core.IsInstanceOf.instanceOf;
@@ -29,17 +28,18 @@ import static org.junit.Assert.assertThat;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.TimeUnit;
 
+import org.apache.servicecomb.saga.core.NoOpSagaRequest;
+import org.apache.servicecomb.saga.core.actors.messages.AbortMessage;
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mockito;
 
-import io.servicecomb.saga.core.FailedSagaResponse;
-import io.servicecomb.saga.core.SagaResponse;
-import io.servicecomb.saga.core.actors.messages.AbortMessage;
-import io.servicecomb.saga.core.actors.messages.CompensateMessage;
-import io.servicecomb.saga.core.actors.messages.FailMessage;
-import io.servicecomb.saga.core.actors.messages.TransactMessage;
+import org.apache.servicecomb.saga.core.FailedSagaResponse;
+import org.apache.servicecomb.saga.core.SagaResponse;
+import org.apache.servicecomb.saga.core.actors.messages.CompensateMessage;
+import org.apache.servicecomb.saga.core.actors.messages.FailMessage;
+import org.apache.servicecomb.saga.core.actors.messages.TransactMessage;
 import akka.actor.ActorRef;
 import akka.actor.ActorSystem;
 import akka.testkit.javadsl.TestKit;
@@ -118,7 +118,7 @@ public class CompletionCallbackActorTest {
   @Test
   public void tellLeafToCompensateOnAbort() throws Exception {
     new TestKit(actorSystem) {{
-      context.addActor(SAGA_END_REQUEST.id(), getRef());
+      context.addActor(NoOpSagaRequest.SAGA_END_REQUEST.id(), getRef());
       CompletableFuture<SagaResponse> future = new CompletableFuture<>();
 
       ActorRef actor = actorSystem.actorOf(CompletionCallbackActor.props(future));
diff --git a/saga-core/src/test/java/io/servicecomb/saga/core/actors/EventContextImplTest.java b/saga-core/src/test/java/org/apache/servicecomb/saga/core/actors/EventContextImplTest.java
similarity index 88%
rename from saga-core/src/test/java/io/servicecomb/saga/core/actors/EventContextImplTest.java
rename to saga-core/src/test/java/org/apache/servicecomb/saga/core/actors/EventContextImplTest.java
index b881774..cfd3788 100644
--- a/saga-core/src/test/java/io/servicecomb/saga/core/actors/EventContextImplTest.java
+++ b/saga-core/src/test/java/org/apache/servicecomb/saga/core/actors/EventContextImplTest.java
@@ -15,24 +15,24 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core.actors;
+package org.apache.servicecomb.saga.core.actors;
 
 import static com.seanyinx.github.unit.scaffolding.Randomness.uniquify;
 import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertThat;
 import static org.mockito.Mockito.when;
 
+import org.apache.servicecomb.saga.core.SagaRequest;
+import org.apache.servicecomb.saga.core.SagaResponse;
+import org.apache.servicecomb.saga.core.actors.messages.AbortRecoveryMessage;
+import org.apache.servicecomb.saga.core.actors.messages.CompensationRecoveryMessage;
+import org.apache.servicecomb.saga.core.actors.messages.TransactionRecoveryMessage;
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mockito;
 import org.scalatest.junit.JUnitSuite;
 
-import io.servicecomb.saga.core.SagaRequest;
-import io.servicecomb.saga.core.SagaResponse;
-import io.servicecomb.saga.core.actors.messages.AbortRecoveryMessage;
-import io.servicecomb.saga.core.actors.messages.CompensationRecoveryMessage;
-import io.servicecomb.saga.core.actors.messages.TransactionRecoveryMessage;
 import akka.actor.ActorSystem;
 import akka.testkit.javadsl.TestKit;
 
diff --git a/saga-core/src/test/java/io/servicecomb/saga/core/actors/RequestActorBuilderTest.java b/saga-core/src/test/java/org/apache/servicecomb/saga/core/actors/RequestActorBuilderTest.java
similarity index 72%
rename from saga-core/src/test/java/io/servicecomb/saga/core/actors/RequestActorBuilderTest.java
rename to saga-core/src/test/java/org/apache/servicecomb/saga/core/actors/RequestActorBuilderTest.java
index 0bcfce0..b3a2c14 100644
--- a/saga-core/src/test/java/io/servicecomb/saga/core/actors/RequestActorBuilderTest.java
+++ b/saga-core/src/test/java/org/apache/servicecomb/saga/core/actors/RequestActorBuilderTest.java
@@ -15,13 +15,8 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core.actors;
+package org.apache.servicecomb.saga.core.actors;
 
-import static io.servicecomb.saga.core.NoOpSagaRequest.SAGA_END_REQUEST;
-import static io.servicecomb.saga.core.NoOpSagaRequest.SAGA_START_REQUEST;
-import static io.servicecomb.saga.core.SagaResponse.EMPTY_RESPONSE;
-import static io.servicecomb.saga.core.SagaTask.SAGA_END_TASK;
-import static io.servicecomb.saga.core.SagaTask.SAGA_START_TASK;
 import static org.hamcrest.Matchers.containsInAnyOrder;
 import static org.hamcrest.core.IsInstanceOf.instanceOf;
 import static org.junit.Assert.assertThat;
@@ -38,6 +33,11 @@ import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
 
+import org.apache.servicecomb.saga.core.NoOpSagaRequest;
+import org.apache.servicecomb.saga.core.SagaRequest;
+import org.apache.servicecomb.saga.core.SagaResponse;
+import org.apache.servicecomb.saga.core.SagaTask;
+import org.hamcrest.Matchers;
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.Test;
@@ -47,13 +47,10 @@ import org.scalatest.junit.JUnitSuite;
 
 import com.seanyinx.github.unit.scaffolding.Randomness;
 
-import io.servicecomb.saga.core.CompositeSagaResponse;
-import io.servicecomb.saga.core.SagaRequest;
-import io.servicecomb.saga.core.SagaResponse;
-import io.servicecomb.saga.core.SagaTask;
-import io.servicecomb.saga.core.actors.messages.CompensateMessage;
-import io.servicecomb.saga.core.actors.messages.TransactMessage;
-import io.servicecomb.saga.core.application.interpreter.FromJsonFormat;
+import org.apache.servicecomb.saga.core.CompositeSagaResponse;
+import org.apache.servicecomb.saga.core.actors.messages.CompensateMessage;
+import org.apache.servicecomb.saga.core.actors.messages.TransactMessage;
+import org.apache.servicecomb.saga.core.application.interpreter.FromJsonFormat;
 import akka.actor.ActorRef;
 import akka.actor.ActorSystem;
 import akka.testkit.javadsl.TestKit;
@@ -85,8 +82,8 @@ public class RequestActorBuilderTest extends JUnitSuite {
 
   @Before
   public void setUp() throws Exception {
-    tasks.put(SAGA_START_TASK, task);
-    tasks.put(SAGA_END_TASK, task);
+    tasks.put(SagaTask.SAGA_START_TASK, task);
+    tasks.put(SagaTask.SAGA_END_TASK, task);
     tasks.put(taskId, task);
 
     when(request1.id()).thenReturn(requestId1);
@@ -101,8 +98,9 @@ public class RequestActorBuilderTest extends JUnitSuite {
     when(request2.parents()).thenReturn(new String[] {requestId1});
     when(request3.parents()).thenReturn(new String[] {requestId1});
 
-    when(task.commit(SAGA_START_REQUEST, EMPTY_RESPONSE)).thenReturn(EMPTY_RESPONSE);
-    when(task.commit(request1, EMPTY_RESPONSE)).thenReturn(response1);
+    when(task.commit(NoOpSagaRequest.SAGA_START_REQUEST, SagaResponse.EMPTY_RESPONSE)).thenReturn(
+        SagaResponse.EMPTY_RESPONSE);
+    when(task.commit(request1, SagaResponse.EMPTY_RESPONSE)).thenReturn(response1);
     when(task.commit(request2, response1)).thenReturn(response2);
     when(task.commit(request3, response1)).thenReturn(response3);
 
@@ -118,23 +116,24 @@ public class RequestActorBuilderTest extends JUnitSuite {
   public void createOneActorPerRequest() throws Exception {
     new TestKit(actorSystem) {{
       ArgumentCaptor<SagaResponse> argumentCaptor = ArgumentCaptor.forClass(SagaResponse.class);
-      when(task.commit(eq(SAGA_END_REQUEST), argumentCaptor.capture())).thenReturn(EMPTY_RESPONSE);
+      when(task.commit(eq(NoOpSagaRequest.SAGA_END_REQUEST), argumentCaptor.capture())).thenReturn(
+          SagaResponse.EMPTY_RESPONSE);
 
-      ActorRef root = actorBuilder.build(requests, tasks, getRef()).actorOf(SAGA_START_REQUEST.id());
+      ActorRef root = actorBuilder.build(requests, tasks, getRef()).actorOf(NoOpSagaRequest.SAGA_START_REQUEST.id());
 
-      root.tell(new TransactMessage(SAGA_START_REQUEST, EMPTY_RESPONSE), getRef());
+      root.tell(new TransactMessage(NoOpSagaRequest.SAGA_START_REQUEST, SagaResponse.EMPTY_RESPONSE), getRef());
 
       List<SagaResponse> responses = receiveN(1, duration("2 seconds")).stream()
           .map(o -> ((TransactMessage) o).response())
           .collect(Collectors.toList());
 
-      assertThat(responses, containsInAnyOrder(EMPTY_RESPONSE));
+      assertThat(responses, Matchers.containsInAnyOrder(SagaResponse.EMPTY_RESPONSE));
 
-      verify(task).commit(SAGA_START_REQUEST, EMPTY_RESPONSE);
-      verify(task).commit(request1, EMPTY_RESPONSE);
+      verify(task).commit(NoOpSagaRequest.SAGA_START_REQUEST, SagaResponse.EMPTY_RESPONSE);
+      verify(task).commit(request1, SagaResponse.EMPTY_RESPONSE);
       verify(task).commit(request2, response1);
       verify(task).commit(request3, response1);
-      verify(task).commit(eq(SAGA_END_REQUEST), any(SagaResponse.class));
+      verify(task).commit(eq(NoOpSagaRequest.SAGA_END_REQUEST), any(SagaResponse.class));
 
       SagaResponse response = argumentCaptor.getValue();
       assertThat(response, instanceOf(CompositeSagaResponse.class));
@@ -147,27 +146,28 @@ public class RequestActorBuilderTest extends JUnitSuite {
   public void compensateAllCompletedTransactions() throws Exception {
     new TestKit(actorSystem) {{
       ArgumentCaptor<SagaResponse> argumentCaptor = ArgumentCaptor.forClass(SagaResponse.class);
-      when(task.commit(eq(SAGA_END_REQUEST), argumentCaptor.capture())).thenReturn(EMPTY_RESPONSE);
+      when(task.commit(eq(NoOpSagaRequest.SAGA_END_REQUEST), argumentCaptor.capture())).thenReturn(
+          SagaResponse.EMPTY_RESPONSE);
 
-      ActorRef root = actorBuilder.build(requests, tasks, getRef()).actorOf(SAGA_START_REQUEST.id());
+      ActorRef root = actorBuilder.build(requests, tasks, getRef()).actorOf(NoOpSagaRequest.SAGA_START_REQUEST.id());
 
-      root.tell(new TransactMessage(SAGA_START_REQUEST, EMPTY_RESPONSE), getRef());
+      root.tell(new TransactMessage(NoOpSagaRequest.SAGA_START_REQUEST, SagaResponse.EMPTY_RESPONSE), getRef());
 
       List<SagaResponse> responses = receiveN(1, duration("2 seconds")).stream()
           .map(o -> ((TransactMessage) o).response())
           .collect(Collectors.toList());
 
-      assertThat(responses, containsInAnyOrder(EMPTY_RESPONSE));
+      assertThat(responses, Matchers.containsInAnyOrder(SagaResponse.EMPTY_RESPONSE));
 
       CompensateMessage message = new CompensateMessage(response1);
       getLastSender().tell(message, getRef());
       expectMsg(message);
 
-      verify(task).compensate(SAGA_START_REQUEST);
+      verify(task).compensate(NoOpSagaRequest.SAGA_START_REQUEST);
       verify(task).compensate(request1);
       verify(task).compensate(request2);
       verify(task).compensate(request3);
-      verify(task).compensate(SAGA_END_REQUEST);
+      verify(task).compensate(NoOpSagaRequest.SAGA_END_REQUEST);
     }};
   }
 }
diff --git a/saga-core/src/test/java/io/servicecomb/saga/core/actors/RequestActorTest.java b/saga-core/src/test/java/org/apache/servicecomb/saga/core/actors/RequestActorTest.java
similarity index 80%
rename from saga-core/src/test/java/io/servicecomb/saga/core/actors/RequestActorTest.java
rename to saga-core/src/test/java/org/apache/servicecomb/saga/core/actors/RequestActorTest.java
index 2990385..776b5aa 100644
--- a/saga-core/src/test/java/io/servicecomb/saga/core/actors/RequestActorTest.java
+++ b/saga-core/src/test/java/org/apache/servicecomb/saga/core/actors/RequestActorTest.java
@@ -15,14 +15,11 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core.actors;
+package org.apache.servicecomb.saga.core.actors;
 
 import static akka.actor.ActorRef.noSender;
 import static akka.actor.Props.empty;
 import static com.seanyinx.github.unit.scaffolding.Randomness.uniquify;
-import static io.servicecomb.saga.core.Operation.SUCCESSFUL_SAGA_RESPONSE;
-import static io.servicecomb.saga.core.SagaResponse.EMPTY_RESPONSE;
-import static io.servicecomb.saga.core.SagaResponse.NONE_RESPONSE;
 import static java.util.Collections.emptySet;
 import static java.util.Collections.singleton;
 import static org.hamcrest.Matchers.contains;
@@ -42,6 +39,19 @@ import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
 
+import org.apache.servicecomb.saga.core.CompositeSagaResponse;
+import org.apache.servicecomb.saga.core.FailedSagaResponse;
+import org.apache.servicecomb.saga.core.Operation;
+import org.apache.servicecomb.saga.core.SagaRequest;
+import org.apache.servicecomb.saga.core.SagaResponse;
+import org.apache.servicecomb.saga.core.SagaStartFailedException;
+import org.apache.servicecomb.saga.core.SagaTask;
+import org.apache.servicecomb.saga.core.TransactionFailedException;
+import org.apache.servicecomb.saga.core.actors.messages.AbortMessage;
+import org.apache.servicecomb.saga.core.actors.messages.CompensationRecoveryMessage;
+import org.apache.servicecomb.saga.core.actors.messages.TransactMessage;
+import org.apache.servicecomb.saga.core.actors.messages.TransactionRecoveryMessage;
+import org.hamcrest.Matchers;
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.Test;
@@ -49,20 +59,9 @@ import org.mockito.ArgumentCaptor;
 import org.mockito.Mockito;
 import org.scalatest.junit.JUnitSuite;
 
-import io.servicecomb.saga.core.CompositeSagaResponse;
-import io.servicecomb.saga.core.FailedSagaResponse;
-import io.servicecomb.saga.core.SagaRequest;
-import io.servicecomb.saga.core.SagaResponse;
-import io.servicecomb.saga.core.SagaStartFailedException;
-import io.servicecomb.saga.core.SagaTask;
-import io.servicecomb.saga.core.TransactionFailedException;
-import io.servicecomb.saga.core.actors.messages.AbortMessage;
-import io.servicecomb.saga.core.actors.messages.CompensateMessage;
-import io.servicecomb.saga.core.actors.messages.CompensationRecoveryMessage;
-import io.servicecomb.saga.core.actors.messages.FailMessage;
-import io.servicecomb.saga.core.actors.messages.TransactMessage;
-import io.servicecomb.saga.core.actors.messages.TransactionRecoveryMessage;
-import io.servicecomb.saga.core.application.interpreter.FromJsonFormat;
+import org.apache.servicecomb.saga.core.actors.messages.CompensateMessage;
+import org.apache.servicecomb.saga.core.actors.messages.FailMessage;
+import org.apache.servicecomb.saga.core.application.interpreter.FromJsonFormat;
 import akka.actor.ActorRef;
 import akka.actor.ActorSystem;
 import akka.testkit.javadsl.TestKit;
@@ -109,11 +108,11 @@ public class RequestActorTest extends JUnitSuite {
       context.addParent(requestId, parent);
 
       when(request.parents()).thenReturn(new String[] {parentRequestId1});
-      when(task.commit(request, SUCCESSFUL_SAGA_RESPONSE)).thenReturn(response);
+      when(task.commit(request, Operation.SUCCESSFUL_SAGA_RESPONSE)).thenReturn(response);
 
       ActorRef actorRef = actorSystem.actorOf(RequestActor.props(context, task, request));
 
-      actorRef.tell(new TransactMessage(request1, SUCCESSFUL_SAGA_RESPONSE), parent);
+      actorRef.tell(new TransactMessage(request1, Operation.SUCCESSFUL_SAGA_RESPONSE), parent);
 
       List<SagaResponse> responses = receiveN(2, duration("2 seconds")).stream()
           .map(o -> ((TransactMessage) o).response())
@@ -121,7 +120,7 @@ public class RequestActorTest extends JUnitSuite {
 
       assertThat(responses, containsInAnyOrder(response, response));
 
-      verify(task).commit(request, SUCCESSFUL_SAGA_RESPONSE);
+      verify(task).commit(request, Operation.SUCCESSFUL_SAGA_RESPONSE);
     }};
   }
 
@@ -143,10 +142,10 @@ public class RequestActorTest extends JUnitSuite {
 
       ActorRef actorRef = actorSystem.actorOf(RequestActor.props(context, task, request));
 
-      actorRef.tell(new TransactMessage(request1, SUCCESSFUL_SAGA_RESPONSE), parent1);
+      actorRef.tell(new TransactMessage(request1, Operation.SUCCESSFUL_SAGA_RESPONSE), parent1);
       expectNoMsg(duration("500 milliseconds"));
 
-      actorRef.tell(new TransactMessage(request2, EMPTY_RESPONSE), parent2);
+      actorRef.tell(new TransactMessage(request2, SagaResponse.EMPTY_RESPONSE), parent2);
 
       List<SagaResponse> responses = receiveN(2, duration("2 seconds")).stream()
           .map(o -> ((TransactMessage) o).response())
@@ -157,7 +156,7 @@ public class RequestActorTest extends JUnitSuite {
       SagaResponse response = argumentCaptor.getValue();
       assertThat(response, instanceOf(CompositeSagaResponse.class));
       assertThat(((CompositeSagaResponse) response).responses(),
-          containsInAnyOrder(EMPTY_RESPONSE, SUCCESSFUL_SAGA_RESPONSE));
+          Matchers.containsInAnyOrder(SagaResponse.EMPTY_RESPONSE, Operation.SUCCESSFUL_SAGA_RESPONSE));
     }};
   }
 
@@ -170,11 +169,11 @@ public class RequestActorTest extends JUnitSuite {
       context.addParent(requestId, getRef());
 
       when(request.parents()).thenReturn(new String[] {parentRequestId1});
-      when(task.commit(request, SUCCESSFUL_SAGA_RESPONSE)).thenThrow(exception);
+      when(task.commit(request, Operation.SUCCESSFUL_SAGA_RESPONSE)).thenThrow(exception);
 
       ActorRef actorRef = actorSystem.actorOf(RequestActor.props(context, task, request));
 
-      actorRef.tell(new TransactMessage(request1, SUCCESSFUL_SAGA_RESPONSE), getRef());
+      actorRef.tell(new TransactMessage(request1, Operation.SUCCESSFUL_SAGA_RESPONSE), getRef());
 
       List<SagaResponse> responses = receiveN(2, duration("2 seconds")).stream()
           .map(o -> ((AbortMessage) o).response())
@@ -216,11 +215,11 @@ public class RequestActorTest extends JUnitSuite {
       context.addParent(requestId, getRef());
 
       when(request.parents()).thenReturn(new String[] {parentRequestId1});
-      when(task.commit(request, SUCCESSFUL_SAGA_RESPONSE)).thenReturn(response);
+      when(task.commit(request, Operation.SUCCESSFUL_SAGA_RESPONSE)).thenReturn(response);
 
       ActorRef actorRef = actorSystem.actorOf(RequestActor.props(context, task, request));
 
-      actorRef.tell(new TransactMessage(request1, SUCCESSFUL_SAGA_RESPONSE), getRef());
+      actorRef.tell(new TransactMessage(request1, Operation.SUCCESSFUL_SAGA_RESPONSE), getRef());
       actorRef.tell(new AbortMessage(exception), noSender());
       actorRef.tell(compensateMessage, getRef());
       actorRef.tell(compensateMessage, getRef());
@@ -266,7 +265,7 @@ public class RequestActorTest extends JUnitSuite {
 
   @Test
   public void skipIfActorIsNotChosenByAnyParent() throws Exception {
-    when(childrenExtractor.fromJson(SUCCESSFUL_SAGA_RESPONSE.body())).thenReturn(singleton("none"));
+    when(childrenExtractor.fromJson(Operation.SUCCESSFUL_SAGA_RESPONSE.body())).thenReturn(singleton("none"));
 
     new TestKit(actorSystem) {{
       addChildren(getRef());
@@ -276,14 +275,14 @@ public class RequestActorTest extends JUnitSuite {
 
       ActorRef actorRef = actorSystem.actorOf(RequestActor.props(context, task, request));
 
-      actorRef.tell(new TransactMessage(request1, SUCCESSFUL_SAGA_RESPONSE), getRef());
+      actorRef.tell(new TransactMessage(request1, Operation.SUCCESSFUL_SAGA_RESPONSE), getRef());
 
       List<SagaResponse> responses = receiveN(2, duration("2 seconds")).stream()
           .map(o -> ((TransactMessage) o).response())
           .collect(Collectors.toList());
 
-      assertThat(responses, containsInAnyOrder(NONE_RESPONSE, NONE_RESPONSE));
-      verify(task, never()).commit(request, SUCCESSFUL_SAGA_RESPONSE);
+      assertThat(responses, Matchers.containsInAnyOrder(SagaResponse.NONE_RESPONSE, SagaResponse.NONE_RESPONSE));
+      verify(task, never()).commit(request, Operation.SUCCESSFUL_SAGA_RESPONSE);
 
       // skip compensation for ignored actor
       actorRef.tell(compensateMessage, getRef());
@@ -296,7 +295,7 @@ public class RequestActorTest extends JUnitSuite {
 
   @Test
   public void transactIfChosenByAnyParent() throws Exception {
-    when(childrenExtractor.fromJson(SUCCESSFUL_SAGA_RESPONSE.body())).thenReturn(singleton(requestId));
+    when(childrenExtractor.fromJson(Operation.SUCCESSFUL_SAGA_RESPONSE.body())).thenReturn(singleton(requestId));
 
     new TestKit(actorSystem) {{
       addChildren(getRef());
@@ -312,8 +311,8 @@ public class RequestActorTest extends JUnitSuite {
 
       ActorRef actorRef = actorSystem.actorOf(RequestActor.props(context, task, request));
 
-      actorRef.tell(new TransactMessage(request1, SUCCESSFUL_SAGA_RESPONSE), parent1);
-      actorRef.tell(new TransactMessage(request2, SUCCESSFUL_SAGA_RESPONSE), parent2);
+      actorRef.tell(new TransactMessage(request1, Operation.SUCCESSFUL_SAGA_RESPONSE), parent1);
+      actorRef.tell(new TransactMessage(request2, Operation.SUCCESSFUL_SAGA_RESPONSE), parent2);
 
       List<SagaResponse> responses = receiveN(2, duration("2 seconds")).stream()
           .map(o -> ((TransactMessage) o).response())
@@ -336,7 +335,7 @@ public class RequestActorTest extends JUnitSuite {
       ActorRef actorRef = actorSystem.actorOf(RequestActor.props(context, task, request));
 
       actorRef.tell(new TransactionRecoveryMessage(response), noSender());
-      actorRef.tell(new TransactMessage(request1, SUCCESSFUL_SAGA_RESPONSE), parent);
+      actorRef.tell(new TransactMessage(request1, Operation.SUCCESSFUL_SAGA_RESPONSE), parent);
 
       List<SagaResponse> responses = receiveN(1, duration("2 seconds")).stream()
           .map(o -> ((TransactMessage) o).response())
@@ -344,7 +343,7 @@ public class RequestActorTest extends JUnitSuite {
 
       assertThat(responses, containsInAnyOrder(response));
 
-      verify(task, never()).commit(request, SUCCESSFUL_SAGA_RESPONSE);
+      verify(task, never()).commit(request, Operation.SUCCESSFUL_SAGA_RESPONSE);
     }};
   }
 
@@ -378,11 +377,11 @@ public class RequestActorTest extends JUnitSuite {
       when(request.parents()).thenReturn(new String[] {parentRequestId1});
 
       SagaStartFailedException oops = new SagaStartFailedException("oops", exception);
-      when(task.commit(request, EMPTY_RESPONSE)).thenThrow(oops);
+      when(task.commit(request, SagaResponse.EMPTY_RESPONSE)).thenThrow(oops);
 
       ActorRef actorRef = actorSystem.actorOf(RequestActor.props(context, task, request));
 
-      actorRef.tell(new TransactMessage(request, EMPTY_RESPONSE), getRef());
+      actorRef.tell(new TransactMessage(request, SagaResponse.EMPTY_RESPONSE), getRef());
 
       expectMsgClass(FailMessage.class);
     }};
diff --git a/saga-core/src/test/java/io/servicecomb/saga/core/dag/DirectedAcyclicGraphTraversalTest.java b/saga-core/src/test/java/org/apache/servicecomb/saga/core/dag/DirectedAcyclicGraphTraversalTest.java
similarity index 98%
rename from saga-core/src/test/java/io/servicecomb/saga/core/dag/DirectedAcyclicGraphTraversalTest.java
rename to saga-core/src/test/java/org/apache/servicecomb/saga/core/dag/DirectedAcyclicGraphTraversalTest.java
index 094fb6d..beb9607 100644
--- a/saga-core/src/test/java/io/servicecomb/saga/core/dag/DirectedAcyclicGraphTraversalTest.java
+++ b/saga-core/src/test/java/org/apache/servicecomb/saga/core/dag/DirectedAcyclicGraphTraversalTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core.dag;
+package org.apache.servicecomb.saga.core.dag;
 
 import static java.util.Arrays.asList;
 import static org.hamcrest.collection.IsIterableContainingInOrder.contains;
diff --git a/saga-core/src/test/java/io/servicecomb/saga/core/dag/GraphBasedSagaExecutionComponentTest.java b/saga-core/src/test/java/org/apache/servicecomb/saga/core/dag/GraphBasedSagaExecutionComponentTest.java
similarity index 82%
rename from saga-core/src/test/java/io/servicecomb/saga/core/dag/GraphBasedSagaExecutionComponentTest.java
rename to saga-core/src/test/java/org/apache/servicecomb/saga/core/dag/GraphBasedSagaExecutionComponentTest.java
index 1e07025..8515f93 100644
--- a/saga-core/src/test/java/io/servicecomb/saga/core/dag/GraphBasedSagaExecutionComponentTest.java
+++ b/saga-core/src/test/java/org/apache/servicecomb/saga/core/dag/GraphBasedSagaExecutionComponentTest.java
@@ -15,13 +15,13 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core.dag;
+package org.apache.servicecomb.saga.core.dag;
 
 import java.util.concurrent.Executors;
 
-import io.servicecomb.saga.core.PersistentStore;
-import io.servicecomb.saga.core.SagaExecutionComponentTestBase;
-import io.servicecomb.saga.core.application.SagaFactory;
+import org.apache.servicecomb.saga.core.PersistentStore;
+import org.apache.servicecomb.saga.core.SagaExecutionComponentTestBase;
+import org.apache.servicecomb.saga.core.application.SagaFactory;
 
 
 public class GraphBasedSagaExecutionComponentTest extends SagaExecutionComponentTestBase {
diff --git a/saga-core/src/test/java/io/servicecomb/saga/core/dag/GraphBuilderTest.java b/saga-core/src/test/java/org/apache/servicecomb/saga/core/dag/GraphBuilderTest.java
similarity index 86%
rename from saga-core/src/test/java/io/servicecomb/saga/core/dag/GraphBuilderTest.java
rename to saga-core/src/test/java/org/apache/servicecomb/saga/core/dag/GraphBuilderTest.java
index d5cc919..8703c7a 100644
--- a/saga-core/src/test/java/io/servicecomb/saga/core/dag/GraphBuilderTest.java
+++ b/saga-core/src/test/java/org/apache/servicecomb/saga/core/dag/GraphBuilderTest.java
@@ -15,12 +15,10 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core.dag;
+package org.apache.servicecomb.saga.core.dag;
 
 import static com.seanyinx.github.unit.scaffolding.AssertUtils.expectFailing;
-import static io.servicecomb.saga.core.NoOpSagaRequest.SAGA_END_REQUEST;
-import static io.servicecomb.saga.core.NoOpSagaRequest.SAGA_START_REQUEST;
-import static io.servicecomb.saga.core.Operation.TYPE_REST;
+import static org.apache.servicecomb.saga.core.Operation.TYPE_REST;
 import static java.util.Collections.emptyMap;
 import static java.util.Collections.emptySet;
 import static java.util.Collections.singleton;
@@ -36,15 +34,17 @@ import static org.mockito.Mockito.when;
 import java.util.Collection;
 import java.util.stream.Collectors;
 
+import org.apache.servicecomb.saga.core.NoOpSagaRequest;
+import org.apache.servicecomb.saga.core.SagaException;
+import org.apache.servicecomb.saga.core.SagaRequest;
+import org.apache.servicecomb.saga.core.SagaRequestImpl;
+import org.hamcrest.collection.IsIterableContainingInOrder;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mockito;
 
-import io.servicecomb.saga.core.CompensationImpl;
-import io.servicecomb.saga.core.SagaException;
-import io.servicecomb.saga.core.SagaRequest;
-import io.servicecomb.saga.core.SagaRequestImpl;
-import io.servicecomb.saga.core.TransactionImpl;
+import org.apache.servicecomb.saga.core.CompensationImpl;
+import org.apache.servicecomb.saga.core.TransactionImpl;
 
 @SuppressWarnings("unchecked")
 public class GraphBuilderTest {
@@ -101,7 +101,7 @@ public class GraphBuilderTest {
     Collection<Node<SagaRequest>> nodes = traveller.nodes();
 
     traveller.next();
-    assertThat(requestsOf(nodes), contains(SAGA_START_REQUEST));
+    assertThat(requestsOf(nodes), IsIterableContainingInOrder.contains(NoOpSagaRequest.SAGA_START_REQUEST));
     nodes.clear();
 
     traveller.next();
@@ -113,7 +113,7 @@ public class GraphBuilderTest {
     nodes.clear();
 
     traveller.next();
-    assertThat(requestsOf(nodes), contains(SAGA_END_REQUEST));
+    assertThat(requestsOf(nodes), IsIterableContainingInOrder.contains(NoOpSagaRequest.SAGA_END_REQUEST));
   }
 
   @Test
diff --git a/saga-core/src/test/java/io/servicecomb/saga/core/dag/GraphCycleDetectorTest.java b/saga-core/src/test/java/org/apache/servicecomb/saga/core/dag/GraphCycleDetectorTest.java
similarity index 97%
rename from saga-core/src/test/java/io/servicecomb/saga/core/dag/GraphCycleDetectorTest.java
rename to saga-core/src/test/java/org/apache/servicecomb/saga/core/dag/GraphCycleDetectorTest.java
index 8c0a97d..934c54b 100644
--- a/saga-core/src/test/java/io/servicecomb/saga/core/dag/GraphCycleDetectorTest.java
+++ b/saga-core/src/test/java/org/apache/servicecomb/saga/core/dag/GraphCycleDetectorTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core.dag;
+package org.apache.servicecomb.saga.core.dag;
 
 import static org.hamcrest.Matchers.contains;
 import static org.hamcrest.core.Is.is;
diff --git a/saga-core/src/test/java/io/servicecomb/saga/core/dag/NodeTest.java b/saga-core/src/test/java/org/apache/servicecomb/saga/core/dag/NodeTest.java
similarity index 98%
rename from saga-core/src/test/java/io/servicecomb/saga/core/dag/NodeTest.java
rename to saga-core/src/test/java/org/apache/servicecomb/saga/core/dag/NodeTest.java
index 334be2a..2da4ba0 100644
--- a/saga-core/src/test/java/io/servicecomb/saga/core/dag/NodeTest.java
+++ b/saga-core/src/test/java/org/apache/servicecomb/saga/core/dag/NodeTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core.dag;
+package org.apache.servicecomb.saga.core.dag;
 
 import static java.util.Arrays.asList;
 import static org.hamcrest.Matchers.containsInAnyOrder;
diff --git a/saga-core/src/test/java/io/servicecomb/saga/infrastructure/ContextAwareEventStoreTest.java b/saga-core/src/test/java/org/apache/servicecomb/saga/infrastructure/ContextAwareEventStoreTest.java
similarity index 87%
rename from saga-core/src/test/java/io/servicecomb/saga/infrastructure/ContextAwareEventStoreTest.java
rename to saga-core/src/test/java/org/apache/servicecomb/saga/infrastructure/ContextAwareEventStoreTest.java
index 186d8f6..1216e5f 100644
--- a/saga-core/src/test/java/io/servicecomb/saga/infrastructure/ContextAwareEventStoreTest.java
+++ b/saga-core/src/test/java/org/apache/servicecomb/saga/infrastructure/ContextAwareEventStoreTest.java
@@ -15,16 +15,16 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.infrastructure;
+package org.apache.servicecomb.saga.infrastructure;
 
 import static org.mockito.Mockito.verify;
 
+import org.apache.servicecomb.saga.core.EventStore;
 import org.junit.Test;
 import org.mockito.Mockito;
 
-import io.servicecomb.saga.core.EventStore;
-import io.servicecomb.saga.core.SagaContext;
-import io.servicecomb.saga.core.SagaEvent;
+import org.apache.servicecomb.saga.core.SagaContext;
+import org.apache.servicecomb.saga.core.SagaEvent;
 
 public class ContextAwareEventStoreTest {
   private final EventStore underlying = Mockito.mock(EventStore.class);
diff --git a/saga-demo/conditional-transaction-demo/conditional-transaction-demo-tests/src/test/java/io/servicecomb/saga/demo/tests/ConditionalTransactionIT.java b/saga-demo/conditional-transaction-demo/conditional-transaction-demo-tests/src/test/java/org/apache/servicecomb/saga/demo/tests/ConditionalTransactionIT.java
similarity index 99%
rename from saga-demo/conditional-transaction-demo/conditional-transaction-demo-tests/src/test/java/io/servicecomb/saga/demo/tests/ConditionalTransactionIT.java
rename to saga-demo/conditional-transaction-demo/conditional-transaction-demo-tests/src/test/java/org/apache/servicecomb/saga/demo/tests/ConditionalTransactionIT.java
index 2dd7785..d1734d5 100644
--- a/saga-demo/conditional-transaction-demo/conditional-transaction-demo-tests/src/test/java/io/servicecomb/saga/demo/tests/ConditionalTransactionIT.java
+++ b/saga-demo/conditional-transaction-demo/conditional-transaction-demo-tests/src/test/java/org/apache/servicecomb/saga/demo/tests/ConditionalTransactionIT.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.demo.tests;
+package org.apache.servicecomb.saga.demo.tests;
 
 import static io.restassured.RestAssured.given;
 import static io.restassured.http.ContentType.TEXT;
diff --git a/saga-demo/conditional-transaction-demo/inventory/src/main/java/io/servicecomb/saga/demo/conditional/transaction/inventory/InventoryApplication.java b/saga-demo/conditional-transaction-demo/inventory/src/main/java/org/apache/servicecomb/saga/demo/conditional/transaction/inventory/InventoryApplication.java
similarity index 93%
rename from saga-demo/conditional-transaction-demo/inventory/src/main/java/io/servicecomb/saga/demo/conditional/transaction/inventory/InventoryApplication.java
rename to saga-demo/conditional-transaction-demo/inventory/src/main/java/org/apache/servicecomb/saga/demo/conditional/transaction/inventory/InventoryApplication.java
index f71bf45..f0b8e68 100644
--- a/saga-demo/conditional-transaction-demo/inventory/src/main/java/io/servicecomb/saga/demo/conditional/transaction/inventory/InventoryApplication.java
+++ b/saga-demo/conditional-transaction-demo/inventory/src/main/java/org/apache/servicecomb/saga/demo/conditional/transaction/inventory/InventoryApplication.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.demo.conditional.transaction.inventory;
+package org.apache.servicecomb.saga.demo.conditional.transaction.inventory;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
diff --git a/saga-demo/conditional-transaction-demo/inventory/src/main/java/io/servicecomb/saga/demo/conditional/transaction/inventory/InventoryController.java b/saga-demo/conditional-transaction-demo/inventory/src/main/java/org/apache/servicecomb/saga/demo/conditional/transaction/inventory/InventoryController.java
similarity index 97%
rename from saga-demo/conditional-transaction-demo/inventory/src/main/java/io/servicecomb/saga/demo/conditional/transaction/inventory/InventoryController.java
rename to saga-demo/conditional-transaction-demo/inventory/src/main/java/org/apache/servicecomb/saga/demo/conditional/transaction/inventory/InventoryController.java
index 09a88e5..1f82955 100644
--- a/saga-demo/conditional-transaction-demo/inventory/src/main/java/io/servicecomb/saga/demo/conditional/transaction/inventory/InventoryController.java
+++ b/saga-demo/conditional-transaction-demo/inventory/src/main/java/org/apache/servicecomb/saga/demo/conditional/transaction/inventory/InventoryController.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.demo.conditional.transaction.inventory;
+package org.apache.servicecomb.saga.demo.conditional.transaction.inventory;
 
 import static org.springframework.http.HttpStatus.BAD_REQUEST;
 import static org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR;
diff --git a/saga-demo/conditional-transaction-demo/inventory/src/test/java/io/servicecomb/saga/demo/conditional/transaction/inventory/InventoryControllerTest.java b/saga-demo/conditional-transaction-demo/inventory/src/test/java/org/apache/servicecomb/saga/demo/conditional/transaction/inventory/InventoryControllerTest.java
similarity index 97%
rename from saga-demo/conditional-transaction-demo/inventory/src/test/java/io/servicecomb/saga/demo/conditional/transaction/inventory/InventoryControllerTest.java
rename to saga-demo/conditional-transaction-demo/inventory/src/test/java/org/apache/servicecomb/saga/demo/conditional/transaction/inventory/InventoryControllerTest.java
index ab919ee..d58a610 100644
--- a/saga-demo/conditional-transaction-demo/inventory/src/test/java/io/servicecomb/saga/demo/conditional/transaction/inventory/InventoryControllerTest.java
+++ b/saga-demo/conditional-transaction-demo/inventory/src/test/java/org/apache/servicecomb/saga/demo/conditional/transaction/inventory/InventoryControllerTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.demo.conditional.transaction.inventory;
+package org.apache.servicecomb.saga.demo.conditional.transaction.inventory;
 
 import static org.hamcrest.core.Is.is;
 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
diff --git a/saga-demo/conditional-transaction-demo/membership/src/main/java/io/servicecomb/saga/demo/conditional/transaction/membership/MembershipApplication.java b/saga-demo/conditional-transaction-demo/membership/src/main/java/org/apache/servicecomb/saga/demo/conditional/transaction/membership/MembershipApplication.java
similarity index 93%
rename from saga-demo/conditional-transaction-demo/membership/src/main/java/io/servicecomb/saga/demo/conditional/transaction/membership/MembershipApplication.java
rename to saga-demo/conditional-transaction-demo/membership/src/main/java/org/apache/servicecomb/saga/demo/conditional/transaction/membership/MembershipApplication.java
index 6bc03f1..4be7300 100644
--- a/saga-demo/conditional-transaction-demo/membership/src/main/java/io/servicecomb/saga/demo/conditional/transaction/membership/MembershipApplication.java
+++ b/saga-demo/conditional-transaction-demo/membership/src/main/java/org/apache/servicecomb/saga/demo/conditional/transaction/membership/MembershipApplication.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.demo.conditional.transaction.membership;
+package org.apache.servicecomb.saga.demo.conditional.transaction.membership;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
diff --git a/saga-demo/conditional-transaction-demo/membership/src/main/java/io/servicecomb/saga/demo/conditional/transaction/membership/MembershipController.java b/saga-demo/conditional-transaction-demo/membership/src/main/java/org/apache/servicecomb/saga/demo/conditional/transaction/membership/MembershipController.java
similarity index 97%
rename from saga-demo/conditional-transaction-demo/membership/src/main/java/io/servicecomb/saga/demo/conditional/transaction/membership/MembershipController.java
rename to saga-demo/conditional-transaction-demo/membership/src/main/java/org/apache/servicecomb/saga/demo/conditional/transaction/membership/MembershipController.java
index 03465b5..f7efc39 100644
--- a/saga-demo/conditional-transaction-demo/membership/src/main/java/io/servicecomb/saga/demo/conditional/transaction/membership/MembershipController.java
+++ b/saga-demo/conditional-transaction-demo/membership/src/main/java/org/apache/servicecomb/saga/demo/conditional/transaction/membership/MembershipController.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.demo.conditional.transaction.membership;
+package org.apache.servicecomb.saga.demo.conditional.transaction.membership;
 
 import static java.util.Collections.singleton;
 import static org.springframework.http.HttpStatus.FORBIDDEN;
diff --git a/saga-demo/conditional-transaction-demo/payment/src/main/java/io/servicecomb/saga/demo/conditional/transaction/payment/PaymentApplication.java b/saga-demo/conditional-transaction-demo/payment/src/main/java/org/apache/servicecomb/saga/demo/conditional/transaction/payment/PaymentApplication.java
similarity index 93%
rename from saga-demo/conditional-transaction-demo/payment/src/main/java/io/servicecomb/saga/demo/conditional/transaction/payment/PaymentApplication.java
rename to saga-demo/conditional-transaction-demo/payment/src/main/java/org/apache/servicecomb/saga/demo/conditional/transaction/payment/PaymentApplication.java
index 6525996..7e0a643 100644
--- a/saga-demo/conditional-transaction-demo/payment/src/main/java/io/servicecomb/saga/demo/conditional/transaction/payment/PaymentApplication.java
+++ b/saga-demo/conditional-transaction-demo/payment/src/main/java/org/apache/servicecomb/saga/demo/conditional/transaction/payment/PaymentApplication.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.demo.conditional.transaction.payment;
+package org.apache.servicecomb.saga.demo.conditional.transaction.payment;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
diff --git a/saga-demo/conditional-transaction-demo/payment/src/main/java/io/servicecomb/saga/demo/conditional/transaction/payment/PaymentController.java b/saga-demo/conditional-transaction-demo/payment/src/main/java/org/apache/servicecomb/saga/demo/conditional/transaction/payment/PaymentController.java
similarity index 97%
rename from saga-demo/conditional-transaction-demo/payment/src/main/java/io/servicecomb/saga/demo/conditional/transaction/payment/PaymentController.java
rename to saga-demo/conditional-transaction-demo/payment/src/main/java/org/apache/servicecomb/saga/demo/conditional/transaction/payment/PaymentController.java
index 0c620e9..531414b 100644
--- a/saga-demo/conditional-transaction-demo/payment/src/main/java/io/servicecomb/saga/demo/conditional/transaction/payment/PaymentController.java
+++ b/saga-demo/conditional-transaction-demo/payment/src/main/java/org/apache/servicecomb/saga/demo/conditional/transaction/payment/PaymentController.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.demo.conditional.transaction.payment;
+package org.apache.servicecomb.saga.demo.conditional.transaction.payment;
 
 import static java.util.Collections.singletonMap;
 import static org.springframework.http.HttpStatus.FORBIDDEN;
diff --git a/saga-demo/conditional-transaction-demo/payment/src/test/java/io/servicecomb/saga/demo/conditional/transaction/payment/PaymentControllerTest.java b/saga-demo/conditional-transaction-demo/payment/src/test/java/org/apache/servicecomb/saga/demo/conditional/transaction/payment/PaymentControllerTest.java
similarity index 97%
rename from saga-demo/conditional-transaction-demo/payment/src/test/java/io/servicecomb/saga/demo/conditional/transaction/payment/PaymentControllerTest.java
rename to saga-demo/conditional-transaction-demo/payment/src/test/java/org/apache/servicecomb/saga/demo/conditional/transaction/payment/PaymentControllerTest.java
index 9d9e370..99e6187 100644
--- a/saga-demo/conditional-transaction-demo/payment/src/test/java/io/servicecomb/saga/demo/conditional/transaction/payment/PaymentControllerTest.java
+++ b/saga-demo/conditional-transaction-demo/payment/src/test/java/org/apache/servicecomb/saga/demo/conditional/transaction/payment/PaymentControllerTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.demo.conditional.transaction.payment;
+package org.apache.servicecomb.saga.demo.conditional.transaction.payment;
 
 import static org.hamcrest.core.Is.is;
 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
diff --git a/saga-demo/conditional-transaction-demo/supplier/src/main/java/io/servicecomb/saga/demo/conditional/transaction/supplier/SupplierApplication.java b/saga-demo/conditional-transaction-demo/supplier/src/main/java/org/apache/servicecomb/saga/demo/conditional/transaction/supplier/SupplierApplication.java
similarity index 93%
rename from saga-demo/conditional-transaction-demo/supplier/src/main/java/io/servicecomb/saga/demo/conditional/transaction/supplier/SupplierApplication.java
rename to saga-demo/conditional-transaction-demo/supplier/src/main/java/org/apache/servicecomb/saga/demo/conditional/transaction/supplier/SupplierApplication.java
index 93517ca..e6729d9 100644
--- a/saga-demo/conditional-transaction-demo/supplier/src/main/java/io/servicecomb/saga/demo/conditional/transaction/supplier/SupplierApplication.java
+++ b/saga-demo/conditional-transaction-demo/supplier/src/main/java/org/apache/servicecomb/saga/demo/conditional/transaction/supplier/SupplierApplication.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.demo.conditional.transaction.supplier;
+package org.apache.servicecomb.saga.demo.conditional.transaction.supplier;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
diff --git a/saga-demo/conditional-transaction-demo/supplier/src/main/java/io/servicecomb/saga/demo/conditional/transaction/supplier/SupplierController.java b/saga-demo/conditional-transaction-demo/supplier/src/main/java/org/apache/servicecomb/saga/demo/conditional/transaction/supplier/SupplierController.java
similarity index 96%
rename from saga-demo/conditional-transaction-demo/supplier/src/main/java/io/servicecomb/saga/demo/conditional/transaction/supplier/SupplierController.java
rename to saga-demo/conditional-transaction-demo/supplier/src/main/java/org/apache/servicecomb/saga/demo/conditional/transaction/supplier/SupplierController.java
index 29d8816..bd71070 100644
--- a/saga-demo/conditional-transaction-demo/supplier/src/main/java/io/servicecomb/saga/demo/conditional/transaction/supplier/SupplierController.java
+++ b/saga-demo/conditional-transaction-demo/supplier/src/main/java/org/apache/servicecomb/saga/demo/conditional/transaction/supplier/SupplierController.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.demo.conditional.transaction.supplier;
+package org.apache.servicecomb.saga.demo.conditional.transaction.supplier;
 
 import static java.util.Collections.singleton;
 import static org.springframework.http.HttpStatus.FORBIDDEN;
diff --git a/saga-demo/dependency-free-transaction-demo/car-rental-service/src/main/java/io/servicecomb/saga/demo/car/rental/CarRentalApplication.java b/saga-demo/dependency-free-transaction-demo/car-rental-service/src/main/java/org/apache/servicecomb/saga/demo/car/rental/CarRentalApplication.java
similarity index 95%
rename from saga-demo/dependency-free-transaction-demo/car-rental-service/src/main/java/io/servicecomb/saga/demo/car/rental/CarRentalApplication.java
rename to saga-demo/dependency-free-transaction-demo/car-rental-service/src/main/java/org/apache/servicecomb/saga/demo/car/rental/CarRentalApplication.java
index fe50416..d3e0e95 100644
--- a/saga-demo/dependency-free-transaction-demo/car-rental-service/src/main/java/io/servicecomb/saga/demo/car/rental/CarRentalApplication.java
+++ b/saga-demo/dependency-free-transaction-demo/car-rental-service/src/main/java/org/apache/servicecomb/saga/demo/car/rental/CarRentalApplication.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.demo.car.rental;
+package org.apache.servicecomb.saga.demo.car.rental;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
diff --git a/saga-demo/dependency-free-transaction-demo/car-rental-service/src/main/java/io/servicecomb/saga/demo/car/rental/CarRentalController.java b/saga-demo/dependency-free-transaction-demo/car-rental-service/src/main/java/org/apache/servicecomb/saga/demo/car/rental/CarRentalController.java
similarity index 98%
rename from saga-demo/dependency-free-transaction-demo/car-rental-service/src/main/java/io/servicecomb/saga/demo/car/rental/CarRentalController.java
rename to saga-demo/dependency-free-transaction-demo/car-rental-service/src/main/java/org/apache/servicecomb/saga/demo/car/rental/CarRentalController.java
index c800983..4a98141 100644
--- a/saga-demo/dependency-free-transaction-demo/car-rental-service/src/main/java/io/servicecomb/saga/demo/car/rental/CarRentalController.java
+++ b/saga-demo/dependency-free-transaction-demo/car-rental-service/src/main/java/org/apache/servicecomb/saga/demo/car/rental/CarRentalController.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.demo.car.rental;
+package org.apache.servicecomb.saga.demo.car.rental;
 
 import static java.util.Arrays.asList;
 import static javax.ws.rs.core.Response.Status.FORBIDDEN;
diff --git a/saga-demo/dependency-free-transaction-demo/demo-tests/src/test/java/io/servicecomb/saga/demo/tests/DemoIT.java b/saga-demo/dependency-free-transaction-demo/demo-tests/src/test/java/org/apache/servicecomb/saga/demo/tests/DemoIT.java
similarity index 99%
rename from saga-demo/dependency-free-transaction-demo/demo-tests/src/test/java/io/servicecomb/saga/demo/tests/DemoIT.java
rename to saga-demo/dependency-free-transaction-demo/demo-tests/src/test/java/org/apache/servicecomb/saga/demo/tests/DemoIT.java
index 6b07879..750b1e4 100644
--- a/saga-demo/dependency-free-transaction-demo/demo-tests/src/test/java/io/servicecomb/saga/demo/tests/DemoIT.java
+++ b/saga-demo/dependency-free-transaction-demo/demo-tests/src/test/java/org/apache/servicecomb/saga/demo/tests/DemoIT.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.demo.tests;
+package org.apache.servicecomb.saga.demo.tests;
 
 import static io.restassured.RestAssured.given;
 import static io.restassured.http.ContentType.TEXT;
diff --git a/saga-demo/dependency-free-transaction-demo/flight-booking-service/src/main/java/io/servicecomb/saga/demo/flight/booking/FlightBookingApplication.java b/saga-demo/dependency-free-transaction-demo/flight-booking-service/src/main/java/org/apache/servicecomb/saga/demo/flight/booking/FlightBookingApplication.java
similarity index 95%
rename from saga-demo/dependency-free-transaction-demo/flight-booking-service/src/main/java/io/servicecomb/saga/demo/flight/booking/FlightBookingApplication.java
rename to saga-demo/dependency-free-transaction-demo/flight-booking-service/src/main/java/org/apache/servicecomb/saga/demo/flight/booking/FlightBookingApplication.java
index bfa7d07..5bee98d 100644
--- a/saga-demo/dependency-free-transaction-demo/flight-booking-service/src/main/java/io/servicecomb/saga/demo/flight/booking/FlightBookingApplication.java
+++ b/saga-demo/dependency-free-transaction-demo/flight-booking-service/src/main/java/org/apache/servicecomb/saga/demo/flight/booking/FlightBookingApplication.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.demo.flight.booking;
+package org.apache.servicecomb.saga.demo.flight.booking;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
diff --git a/saga-demo/dependency-free-transaction-demo/flight-booking-service/src/main/java/io/servicecomb/saga/demo/flight/booking/FlightBookingController.java b/saga-demo/dependency-free-transaction-demo/flight-booking-service/src/main/java/org/apache/servicecomb/saga/demo/flight/booking/FlightBookingController.java
similarity index 98%
rename from saga-demo/dependency-free-transaction-demo/flight-booking-service/src/main/java/io/servicecomb/saga/demo/flight/booking/FlightBookingController.java
rename to saga-demo/dependency-free-transaction-demo/flight-booking-service/src/main/java/org/apache/servicecomb/saga/demo/flight/booking/FlightBookingController.java
index 934781c..37184ac 100644
--- a/saga-demo/dependency-free-transaction-demo/flight-booking-service/src/main/java/io/servicecomb/saga/demo/flight/booking/FlightBookingController.java
+++ b/saga-demo/dependency-free-transaction-demo/flight-booking-service/src/main/java/org/apache/servicecomb/saga/demo/flight/booking/FlightBookingController.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.demo.flight.booking;
+package org.apache.servicecomb.saga.demo.flight.booking;
 
 import static java.util.Collections.singleton;
 import static javax.ws.rs.core.Response.Status.FORBIDDEN;
diff --git a/saga-demo/dependency-free-transaction-demo/hotel-reservation-service/src/main/java/io/servicecomb/saga/demo/hotel/reservation/HotelReservationApplication.java b/saga-demo/dependency-free-transaction-demo/hotel-reservation-service/src/main/java/org/apache/servicecomb/saga/demo/hotel/reservation/HotelReservationApplication.java
similarity index 95%
rename from saga-demo/dependency-free-transaction-demo/hotel-reservation-service/src/main/java/io/servicecomb/saga/demo/hotel/reservation/HotelReservationApplication.java
rename to saga-demo/dependency-free-transaction-demo/hotel-reservation-service/src/main/java/org/apache/servicecomb/saga/demo/hotel/reservation/HotelReservationApplication.java
index d96da33..b6d3c01 100644
--- a/saga-demo/dependency-free-transaction-demo/hotel-reservation-service/src/main/java/io/servicecomb/saga/demo/hotel/reservation/HotelReservationApplication.java
+++ b/saga-demo/dependency-free-transaction-demo/hotel-reservation-service/src/main/java/org/apache/servicecomb/saga/demo/hotel/reservation/HotelReservationApplication.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.demo.hotel.reservation;
+package org.apache.servicecomb.saga.demo.hotel.reservation;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
diff --git a/saga-demo/dependency-free-transaction-demo/hotel-reservation-service/src/main/java/io/servicecomb/saga/demo/hotel/reservation/HotelReservationController.java b/saga-demo/dependency-free-transaction-demo/hotel-reservation-service/src/main/java/org/apache/servicecomb/saga/demo/hotel/reservation/HotelReservationController.java
similarity index 98%
rename from saga-demo/dependency-free-transaction-demo/hotel-reservation-service/src/main/java/io/servicecomb/saga/demo/hotel/reservation/HotelReservationController.java
rename to saga-demo/dependency-free-transaction-demo/hotel-reservation-service/src/main/java/org/apache/servicecomb/saga/demo/hotel/reservation/HotelReservationController.java
index b28cfbe..dfe00d8 100644
--- a/saga-demo/dependency-free-transaction-demo/hotel-reservation-service/src/main/java/io/servicecomb/saga/demo/hotel/reservation/HotelReservationController.java
+++ b/saga-demo/dependency-free-transaction-demo/hotel-reservation-service/src/main/java/org/apache/servicecomb/saga/demo/hotel/reservation/HotelReservationController.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.demo.hotel.reservation;
+package org.apache.servicecomb.saga.demo.hotel.reservation;
 
 import static java.util.Collections.singleton;
 import static javax.ws.rs.core.Response.Status.FORBIDDEN;
diff --git a/saga-demo/dependency-free-transaction-demo/payment-service/src/main/java/io/servicecomb/saga/demo/payment/PaymentApplication.java b/saga-demo/dependency-free-transaction-demo/payment-service/src/main/java/org/apache/servicecomb/saga/demo/payment/PaymentApplication.java
similarity index 95%
rename from saga-demo/dependency-free-transaction-demo/payment-service/src/main/java/io/servicecomb/saga/demo/payment/PaymentApplication.java
rename to saga-demo/dependency-free-transaction-demo/payment-service/src/main/java/org/apache/servicecomb/saga/demo/payment/PaymentApplication.java
index d750c0a..4395c22 100644
--- a/saga-demo/dependency-free-transaction-demo/payment-service/src/main/java/io/servicecomb/saga/demo/payment/PaymentApplication.java
+++ b/saga-demo/dependency-free-transaction-demo/payment-service/src/main/java/org/apache/servicecomb/saga/demo/payment/PaymentApplication.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.demo.payment;
+package org.apache.servicecomb.saga.demo.payment;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
diff --git a/saga-demo/dependency-free-transaction-demo/payment-service/src/main/java/io/servicecomb/saga/demo/payment/PaymentController.java b/saga-demo/dependency-free-transaction-demo/payment-service/src/main/java/org/apache/servicecomb/saga/demo/payment/PaymentController.java
similarity index 98%
rename from saga-demo/dependency-free-transaction-demo/payment-service/src/main/java/io/servicecomb/saga/demo/payment/PaymentController.java
rename to saga-demo/dependency-free-transaction-demo/payment-service/src/main/java/org/apache/servicecomb/saga/demo/payment/PaymentController.java
index 7ebc6db..cf1e774 100644
--- a/saga-demo/dependency-free-transaction-demo/payment-service/src/main/java/io/servicecomb/saga/demo/payment/PaymentController.java
+++ b/saga-demo/dependency-free-transaction-demo/payment-service/src/main/java/org/apache/servicecomb/saga/demo/payment/PaymentController.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.demo.payment;
+package org.apache.servicecomb.saga.demo.payment;
 
 import static javax.ws.rs.core.Response.Status.BAD_REQUEST;
 import static javax.ws.rs.core.Response.Status.FORBIDDEN;
diff --git a/saga-discovery/saga-discovery-servicecenter/src/main/java/io/servicecomb/saga/discovery/service/center/ServiceCenterDiscoveryConfig.java b/saga-discovery/saga-discovery-servicecenter/src/main/java/org/apache/servicecomb/saga/discovery/service/center/ServiceCenterDiscoveryConfig.java
similarity index 84%
rename from saga-discovery/saga-discovery-servicecenter/src/main/java/io/servicecomb/saga/discovery/service/center/ServiceCenterDiscoveryConfig.java
rename to saga-discovery/saga-discovery-servicecenter/src/main/java/org/apache/servicecomb/saga/discovery/service/center/ServiceCenterDiscoveryConfig.java
index 09b5f91..11110ef 100644
--- a/saga-discovery/saga-discovery-servicecenter/src/main/java/io/servicecomb/saga/discovery/service/center/ServiceCenterDiscoveryConfig.java
+++ b/saga-discovery/saga-discovery-servicecenter/src/main/java/org/apache/servicecomb/saga/discovery/service/center/ServiceCenterDiscoveryConfig.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.discovery.service.center;
+package org.apache.servicecomb.saga.discovery.service.center;
 
 import org.springframework.boot.autoconfigure.AutoConfigureBefore;
 import org.springframework.context.annotation.Bean;
@@ -23,9 +23,9 @@ import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Profile;
 
 import io.servicecomb.provider.springmvc.reference.RestTemplateBuilder;
-import io.servicecomb.saga.transports.HttpClientTransportConfig;
-import io.servicecomb.saga.transports.RestTransport;
-import io.servicecomb.saga.transports.resttemplate.RestTemplateTransport;
+import org.apache.servicecomb.saga.transports.HttpClientTransportConfig;
+import org.apache.servicecomb.saga.transports.RestTransport;
+import org.apache.servicecomb.saga.transports.resttemplate.RestTemplateTransport;
 import io.servicecomb.springboot.starter.provider.EnableServiceComb;
 
 @EnableServiceComb
diff --git a/saga-discovery/saga-discovery-servicecenter/src/main/resources/META-INF/spring.factories b/saga-discovery/saga-discovery-servicecenter/src/main/resources/META-INF/spring.factories
index 0f78baf..b199c22 100644
--- a/saga-discovery/saga-discovery-servicecenter/src/main/resources/META-INF/spring.factories
+++ b/saga-discovery/saga-discovery-servicecenter/src/main/resources/META-INF/spring.factories
@@ -15,4 +15,4 @@
 ## limitations under the License.
 ## ---------------------------------------------------------------------------
 org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
-  io.servicecomb.saga.discovery.service.center.ServiceCenterDiscoveryConfig
+  org.apache.servicecomb.saga.discovery.service.center.ServiceCenterDiscoveryConfig
diff --git a/saga-discovery/saga-discovery-servicecenter/src/test/java/io/servicecomb/saga/discovery/service/center/DummyController.java b/saga-discovery/saga-discovery-servicecenter/src/test/java/org/apache/servicecomb/saga/discovery/service/center/DummyController.java
similarity index 97%
rename from saga-discovery/saga-discovery-servicecenter/src/test/java/io/servicecomb/saga/discovery/service/center/DummyController.java
rename to saga-discovery/saga-discovery-servicecenter/src/test/java/org/apache/servicecomb/saga/discovery/service/center/DummyController.java
index cd65161..710806d 100644
--- a/saga-discovery/saga-discovery-servicecenter/src/test/java/io/servicecomb/saga/discovery/service/center/DummyController.java
+++ b/saga-discovery/saga-discovery-servicecenter/src/test/java/org/apache/servicecomb/saga/discovery/service/center/DummyController.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.discovery.service.center;
+package org.apache.servicecomb.saga.discovery.service.center;
 
 import static org.springframework.http.MediaType.APPLICATION_FORM_URLENCODED_VALUE;
 import static org.springframework.web.bind.annotation.RequestMethod.GET;
diff --git a/saga-discovery/saga-discovery-servicecenter/src/test/java/io/servicecomb/saga/discovery/service/center/ServiceCenterDiscoveryApplication.java b/saga-discovery/saga-discovery-servicecenter/src/test/java/org/apache/servicecomb/saga/discovery/service/center/ServiceCenterDiscoveryApplication.java
similarity index 95%
rename from saga-discovery/saga-discovery-servicecenter/src/test/java/io/servicecomb/saga/discovery/service/center/ServiceCenterDiscoveryApplication.java
rename to saga-discovery/saga-discovery-servicecenter/src/test/java/org/apache/servicecomb/saga/discovery/service/center/ServiceCenterDiscoveryApplication.java
index 471ac82..027b441 100644
--- a/saga-discovery/saga-discovery-servicecenter/src/test/java/io/servicecomb/saga/discovery/service/center/ServiceCenterDiscoveryApplication.java
+++ b/saga-discovery/saga-discovery-servicecenter/src/test/java/org/apache/servicecomb/saga/discovery/service/center/ServiceCenterDiscoveryApplication.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.discovery.service.center;
+package org.apache.servicecomb.saga.discovery.service.center;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
diff --git a/saga-discovery/saga-discovery-servicecenter/src/test/java/io/servicecomb/saga/discovery/service/center/ServiceCenterDiscoveryRestTransportTest.java b/saga-discovery/saga-discovery-servicecenter/src/test/java/org/apache/servicecomb/saga/discovery/service/center/ServiceCenterDiscoveryRestTransportTest.java
similarity index 91%
rename from saga-discovery/saga-discovery-servicecenter/src/test/java/io/servicecomb/saga/discovery/service/center/ServiceCenterDiscoveryRestTransportTest.java
rename to saga-discovery/saga-discovery-servicecenter/src/test/java/org/apache/servicecomb/saga/discovery/service/center/ServiceCenterDiscoveryRestTransportTest.java
index 0e46e09..6bfa7ae 100644
--- a/saga-discovery/saga-discovery-servicecenter/src/test/java/io/servicecomb/saga/discovery/service/center/ServiceCenterDiscoveryRestTransportTest.java
+++ b/saga-discovery/saga-discovery-servicecenter/src/test/java/org/apache/servicecomb/saga/discovery/service/center/ServiceCenterDiscoveryRestTransportTest.java
@@ -15,10 +15,9 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.discovery.service.center;
+package org.apache.servicecomb.saga.discovery.service.center;
 
 import static com.seanyinx.github.unit.scaffolding.AssertUtils.expectFailing;
-import static io.servicecomb.saga.discovery.service.center.ServiceCenterDiscoveryConfig.PROTOCOL;
 import static io.servicecomb.serviceregistry.client.LocalServiceRegistryClientImpl.LOCAL_REGISTRY_FILE_KEY;
 import static java.util.Collections.emptyMap;
 import static java.util.Collections.singletonMap;
@@ -32,6 +31,9 @@ import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.Map;
 
+import org.apache.servicecomb.saga.core.SagaResponse;
+import org.apache.servicecomb.saga.transports.RestTransport;
+import org.apache.servicecomb.saga.transports.resttemplate.RestTemplateTransport;
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -39,10 +41,8 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
 import io.servicecomb.provider.springmvc.reference.RestTemplateBuilder;
-import io.servicecomb.saga.core.SagaResponse;
-import io.servicecomb.saga.core.TransportFailedException;
-import io.servicecomb.saga.transports.RestTransport;
-import io.servicecomb.saga.transports.resttemplate.RestTemplateTransport;
+
+import org.apache.servicecomb.saga.core.TransportFailedException;
 
 @RunWith(SpringRunner.class)
 @SpringBootTest(classes = ServiceCenterDiscoveryApplication.class, webEnvironment = RANDOM_PORT)
@@ -53,7 +53,7 @@ public class ServiceCenterDiscoveryRestTransportTest {
   private static final String usableResponse = "foo bar, hello world";
   private static final String json = "{\"hello\", \"world\"}";
 
-  private final RestTransport transport = new RestTemplateTransport(RestTemplateBuilder.create(), PROTOCOL);
+  private final RestTransport transport = new RestTemplateTransport(RestTemplateBuilder.create(), ServiceCenterDiscoveryConfig.PROTOCOL);
   private final String serviceName = "saga-service";
 
   @BeforeClass
diff --git a/saga-format/src/main/java/io/servicecomb/saga/core/FailedSagaRequestContext.java b/saga-format/src/main/java/org/apache/servicecomb/saga/core/FailedSagaRequestContext.java
similarity index 88%
rename from saga-format/src/main/java/io/servicecomb/saga/core/FailedSagaRequestContext.java
rename to saga-format/src/main/java/org/apache/servicecomb/saga/core/FailedSagaRequestContext.java
index 79202a3..92d6039 100644
--- a/saga-format/src/main/java/io/servicecomb/saga/core/FailedSagaRequestContext.java
+++ b/saga-format/src/main/java/org/apache/servicecomb/saga/core/FailedSagaRequestContext.java
@@ -15,11 +15,13 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
+
+import org.apache.servicecomb.saga.format.JsonFailedSagaResponse;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
-import io.servicecomb.saga.format.JsonFailedSagaResponse;
-import io.servicecomb.saga.format.JsonSagaRequest;
+
+import org.apache.servicecomb.saga.format.JsonSagaRequest;
 
 public class FailedSagaRequestContext extends SagaRequestContext {
 
diff --git a/saga-format/src/main/java/io/servicecomb/saga/core/JacksonToJsonFormat.java b/saga-format/src/main/java/org/apache/servicecomb/saga/core/JacksonToJsonFormat.java
similarity index 98%
rename from saga-format/src/main/java/io/servicecomb/saga/core/JacksonToJsonFormat.java
rename to saga-format/src/main/java/org/apache/servicecomb/saga/core/JacksonToJsonFormat.java
index 02f91f4..c00ce4a 100644
--- a/saga-format/src/main/java/io/servicecomb/saga/core/JacksonToJsonFormat.java
+++ b/saga-format/src/main/java/org/apache/servicecomb/saga/core/JacksonToJsonFormat.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.ANY;
 import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.NONE;
diff --git a/saga-format/src/main/java/io/servicecomb/saga/core/SagaRequestContext.java b/saga-format/src/main/java/org/apache/servicecomb/saga/core/SagaRequestContext.java
similarity index 96%
rename from saga-format/src/main/java/io/servicecomb/saga/core/SagaRequestContext.java
rename to saga-format/src/main/java/org/apache/servicecomb/saga/core/SagaRequestContext.java
index a427386..2e37617 100644
--- a/saga-format/src/main/java/io/servicecomb/saga/core/SagaRequestContext.java
+++ b/saga-format/src/main/java/org/apache/servicecomb/saga/core/SagaRequestContext.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 public class SagaRequestContext {
 
diff --git a/saga-format/src/main/java/io/servicecomb/saga/core/SuccessfulSagaRequestContext.java b/saga-format/src/main/java/org/apache/servicecomb/saga/core/SuccessfulSagaRequestContext.java
similarity index 88%
rename from saga-format/src/main/java/io/servicecomb/saga/core/SuccessfulSagaRequestContext.java
rename to saga-format/src/main/java/org/apache/servicecomb/saga/core/SuccessfulSagaRequestContext.java
index 9e6f4c3..f794a91 100644
--- a/saga-format/src/main/java/io/servicecomb/saga/core/SuccessfulSagaRequestContext.java
+++ b/saga-format/src/main/java/org/apache/servicecomb/saga/core/SuccessfulSagaRequestContext.java
@@ -15,13 +15,13 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.core;
+package org.apache.servicecomb.saga.core;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonProperty;
 
-import io.servicecomb.saga.format.JsonSagaRequest;
-import io.servicecomb.saga.format.JsonSuccessfulSagaResponse;
+import org.apache.servicecomb.saga.format.JsonSagaRequest;
+import org.apache.servicecomb.saga.format.JsonSuccessfulSagaResponse;
 
 public class SuccessfulSagaRequestContext extends SagaRequestContext {
 
diff --git a/saga-format/src/main/java/io/servicecomb/saga/format/ChildrenExtractor.java b/saga-format/src/main/java/org/apache/servicecomb/saga/format/ChildrenExtractor.java
similarity index 90%
rename from saga-format/src/main/java/io/servicecomb/saga/format/ChildrenExtractor.java
rename to saga-format/src/main/java/org/apache/servicecomb/saga/format/ChildrenExtractor.java
index 3625550..cfd3b1c 100644
--- a/saga-format/src/main/java/io/servicecomb/saga/format/ChildrenExtractor.java
+++ b/saga-format/src/main/java/org/apache/servicecomb/saga/format/ChildrenExtractor.java
@@ -15,17 +15,18 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.format;
+package org.apache.servicecomb.saga.format;
 
 import java.io.IOException;
 import java.util.HashSet;
 import java.util.Set;
 
+import org.apache.servicecomb.saga.core.SagaException;
+
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 
-import io.servicecomb.saga.core.SagaException;
-import io.servicecomb.saga.core.application.interpreter.FromJsonFormat;
+import org.apache.servicecomb.saga.core.application.interpreter.FromJsonFormat;
 
 public class ChildrenExtractor implements FromJsonFormat<Set<String>> {
 
diff --git a/saga-format/src/main/java/io/servicecomb/saga/format/JacksonFallback.java b/saga-format/src/main/java/org/apache/servicecomb/saga/format/JacksonFallback.java
similarity index 78%
rename from saga-format/src/main/java/io/servicecomb/saga/format/JacksonFallback.java
rename to saga-format/src/main/java/org/apache/servicecomb/saga/format/JacksonFallback.java
index 6e48212..443ba66 100644
--- a/saga-format/src/main/java/io/servicecomb/saga/format/JacksonFallback.java
+++ b/saga-format/src/main/java/org/apache/servicecomb/saga/format/JacksonFallback.java
@@ -15,10 +15,11 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.format;
+package org.apache.servicecomb.saga.format;
 
-import static io.servicecomb.saga.core.Operation.TYPE_NOP;
-import static io.servicecomb.saga.core.Operation.TYPE_REST;
+import org.apache.servicecomb.saga.core.Fallback;
+import org.apache.servicecomb.saga.core.Operation;
+import org.apache.servicecomb.saga.transports.TransportFactory;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonProperty;
@@ -26,10 +27,7 @@ import com.fasterxml.jackson.annotation.JsonSubTypes;
 import com.fasterxml.jackson.annotation.JsonSubTypes.Type;
 import com.fasterxml.jackson.annotation.JsonTypeInfo;
 
-import io.servicecomb.saga.core.Fallback;
-import io.servicecomb.saga.core.Operation;
-import io.servicecomb.saga.format.JacksonFallback.NopJacksonFallback;
-import io.servicecomb.saga.transports.TransportFactory;
+import org.apache.servicecomb.saga.format.JacksonFallback.NopJacksonFallback;
 
 @JsonTypeInfo(
     use = JsonTypeInfo.Id.NAME,
@@ -37,8 +35,8 @@ import io.servicecomb.saga.transports.TransportFactory;
     visible = true,
     property = "type")
 @JsonSubTypes({
-    @Type(value = JacksonRestFallback.class, name = TYPE_REST),
-    @Type(value = NopJacksonFallback.class, name = TYPE_NOP)
+    @Type(value = JacksonRestFallback.class, name = Operation.TYPE_REST),
+    @Type(value = NopJacksonFallback.class, name = Operation.TYPE_NOP)
 })
 public interface JacksonFallback extends Fallback, TransportAware {
 
diff --git a/saga-format/src/main/java/io/servicecomb/saga/format/JacksonFromJsonFormat.java b/saga-format/src/main/java/org/apache/servicecomb/saga/format/JacksonFromJsonFormat.java
similarity index 85%
rename from saga-format/src/main/java/io/servicecomb/saga/format/JacksonFromJsonFormat.java
rename to saga-format/src/main/java/org/apache/servicecomb/saga/format/JacksonFromJsonFormat.java
index 3a2bc95..c26a82f 100644
--- a/saga-format/src/main/java/io/servicecomb/saga/format/JacksonFromJsonFormat.java
+++ b/saga-format/src/main/java/org/apache/servicecomb/saga/format/JacksonFromJsonFormat.java
@@ -15,16 +15,18 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.format;
+package org.apache.servicecomb.saga.format;
 
 import java.io.IOException;
 
+import org.apache.servicecomb.saga.transports.TransportFactory;
+
 import com.fasterxml.jackson.databind.ObjectMapper;
 
-import io.servicecomb.saga.core.SagaDefinition;
-import io.servicecomb.saga.core.SagaException;
-import io.servicecomb.saga.core.application.interpreter.FromJsonFormat;
-import io.servicecomb.saga.transports.TransportFactory;
+import org.apache.servicecomb.saga.core.SagaDefinition;
+import org.apache.servicecomb.saga.core.SagaException;
+import org.apache.servicecomb.saga.core.application.interpreter.FromJsonFormat;
+
 import kamon.annotation.EnableKamon;
 import kamon.annotation.Segment;
 
diff --git a/saga-format/src/main/java/io/servicecomb/saga/format/JacksonRestCompensation.java b/saga-format/src/main/java/org/apache/servicecomb/saga/format/JacksonRestCompensation.java
similarity index 94%
rename from saga-format/src/main/java/io/servicecomb/saga/format/JacksonRestCompensation.java
rename to saga-format/src/main/java/org/apache/servicecomb/saga/format/JacksonRestCompensation.java
index 99269c8..1837563 100644
--- a/saga-format/src/main/java/io/servicecomb/saga/format/JacksonRestCompensation.java
+++ b/saga-format/src/main/java/org/apache/servicecomb/saga/format/JacksonRestCompensation.java
@@ -15,14 +15,14 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.format;
+package org.apache.servicecomb.saga.format;
 
 import java.util.Map;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonProperty;
 
-import io.servicecomb.saga.core.Compensation;
+import org.apache.servicecomb.saga.core.Compensation;
 
 public class JacksonRestCompensation extends JacksonRestOperation implements Compensation {
 
diff --git a/saga-format/src/main/java/io/servicecomb/saga/format/JacksonRestFallback.java b/saga-format/src/main/java/org/apache/servicecomb/saga/format/JacksonRestFallback.java
similarity index 96%
rename from saga-format/src/main/java/io/servicecomb/saga/format/JacksonRestFallback.java
rename to saga-format/src/main/java/org/apache/servicecomb/saga/format/JacksonRestFallback.java
index 3f50286..35c54fe 100644
--- a/saga-format/src/main/java/io/servicecomb/saga/format/JacksonRestFallback.java
+++ b/saga-format/src/main/java/org/apache/servicecomb/saga/format/JacksonRestFallback.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.format;
+package org.apache.servicecomb.saga.format;
 
 import java.util.Map;
 
diff --git a/saga-format/src/main/java/io/servicecomb/saga/format/JacksonRestOperation.java b/saga-format/src/main/java/org/apache/servicecomb/saga/format/JacksonRestOperation.java
similarity index 86%
rename from saga-format/src/main/java/io/servicecomb/saga/format/JacksonRestOperation.java
rename to saga-format/src/main/java/org/apache/servicecomb/saga/format/JacksonRestOperation.java
index fe4fd90..4d42451 100644
--- a/saga-format/src/main/java/io/servicecomb/saga/format/JacksonRestOperation.java
+++ b/saga-format/src/main/java/org/apache/servicecomb/saga/format/JacksonRestOperation.java
@@ -15,17 +15,18 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.format;
+package org.apache.servicecomb.saga.format;
 
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.servicecomb.saga.transports.TransportFactory;
+
 import com.fasterxml.jackson.annotation.JsonIgnore;
 
-import io.servicecomb.saga.core.RestOperation;
-import io.servicecomb.saga.core.SagaResponse;
-import io.servicecomb.saga.transports.RestTransport;
-import io.servicecomb.saga.transports.TransportFactory;
+import org.apache.servicecomb.saga.core.RestOperation;
+import org.apache.servicecomb.saga.core.SagaResponse;
+import org.apache.servicecomb.saga.transports.RestTransport;
 
 class JacksonRestOperation extends RestOperation implements TransportAware {
 
diff --git a/saga-format/src/main/java/io/servicecomb/saga/format/JacksonRestTransaction.java b/saga-format/src/main/java/org/apache/servicecomb/saga/format/JacksonRestTransaction.java
similarity index 92%
rename from saga-format/src/main/java/io/servicecomb/saga/format/JacksonRestTransaction.java
rename to saga-format/src/main/java/org/apache/servicecomb/saga/format/JacksonRestTransaction.java
index 68673ee..4ea6d8c 100644
--- a/saga-format/src/main/java/io/servicecomb/saga/format/JacksonRestTransaction.java
+++ b/saga-format/src/main/java/org/apache/servicecomb/saga/format/JacksonRestTransaction.java
@@ -15,14 +15,14 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.format;
+package org.apache.servicecomb.saga.format;
 
 import java.util.Map;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonProperty;
 
-import io.servicecomb.saga.core.Transaction;
+import org.apache.servicecomb.saga.core.Transaction;
 
 public class JacksonRestTransaction extends JacksonRestOperation implements Transaction {
 
diff --git a/saga-format/src/main/java/io/servicecomb/saga/format/JacksonSagaEventFormat.java b/saga-format/src/main/java/org/apache/servicecomb/saga/format/JacksonSagaEventFormat.java
similarity index 82%
rename from saga-format/src/main/java/io/servicecomb/saga/format/JacksonSagaEventFormat.java
rename to saga-format/src/main/java/org/apache/servicecomb/saga/format/JacksonSagaEventFormat.java
index 2d451be..1b416aa 100644
--- a/saga-format/src/main/java/io/servicecomb/saga/format/JacksonSagaEventFormat.java
+++ b/saga-format/src/main/java/org/apache/servicecomb/saga/format/JacksonSagaEventFormat.java
@@ -15,29 +15,28 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.format;
-
-import static io.servicecomb.saga.core.NoOpSagaRequest.SAGA_END_REQUEST;
-import static io.servicecomb.saga.core.NoOpSagaRequest.SAGA_START_REQUEST;
+package org.apache.servicecomb.saga.format;
 
 import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.function.BiFunction;
 
+import org.apache.servicecomb.saga.core.FailedSagaRequestContext;
+import org.apache.servicecomb.saga.core.NoOpSagaRequest;
+import org.apache.servicecomb.saga.core.SagaEvent;
+import org.apache.servicecomb.saga.core.SagaException;
+import org.apache.servicecomb.saga.core.SagaStartedEvent;
+import org.apache.servicecomb.saga.core.SuccessfulSagaRequestContext;
+import org.apache.servicecomb.saga.core.TransactionAbortedEvent;
+import org.apache.servicecomb.saga.core.TransactionCompensatedEvent;
+import org.apache.servicecomb.saga.core.TransactionStartedEvent;
+import org.apache.servicecomb.saga.transports.TransportFactory;
+
 import com.fasterxml.jackson.databind.ObjectMapper;
 
-import io.servicecomb.saga.core.FailedSagaRequestContext;
-import io.servicecomb.saga.core.SagaEndedEvent;
-import io.servicecomb.saga.core.SagaEvent;
-import io.servicecomb.saga.core.SagaException;
-import io.servicecomb.saga.core.SagaStartedEvent;
-import io.servicecomb.saga.core.SuccessfulSagaRequestContext;
-import io.servicecomb.saga.core.TransactionAbortedEvent;
-import io.servicecomb.saga.core.TransactionCompensatedEvent;
-import io.servicecomb.saga.core.TransactionEndedEvent;
-import io.servicecomb.saga.core.TransactionStartedEvent;
-import io.servicecomb.saga.transports.TransportFactory;
+import org.apache.servicecomb.saga.core.SagaEndedEvent;
+import org.apache.servicecomb.saga.core.TransactionEndedEvent;
 
 public class JacksonSagaEventFormat implements SagaEventFormat {
   private final Map<String, BiFunction<String, String, SagaEvent>> eventFactories = new HashMap<String, BiFunction<String, String, SagaEvent>>() {{
@@ -65,7 +64,7 @@ public class JacksonSagaEventFormat implements SagaEventFormat {
     return new SagaStartedEvent(
         sagaId,
         json,
-        SAGA_START_REQUEST);
+        NoOpSagaRequest.SAGA_START_REQUEST);
   }
 
   private SagaEvent transactionStartedEvent(String sagaId, String json) {
@@ -106,7 +105,7 @@ public class JacksonSagaEventFormat implements SagaEventFormat {
   private SagaEvent sagaEndedEvent(String sagaId) {
     return new SagaEndedEvent(
         sagaId,
-        SAGA_END_REQUEST);
+        NoOpSagaRequest.SAGA_END_REQUEST);
   }
 
   private String cause(String sagaId, String json) {
diff --git a/saga-format/src/main/java/io/servicecomb/saga/format/JsonFailedSagaResponse.java b/saga-format/src/main/java/org/apache/servicecomb/saga/format/JsonFailedSagaResponse.java
similarity index 90%
rename from saga-format/src/main/java/io/servicecomb/saga/format/JsonFailedSagaResponse.java
rename to saga-format/src/main/java/org/apache/servicecomb/saga/format/JsonFailedSagaResponse.java
index a00f27e..16ada6e 100644
--- a/saga-format/src/main/java/io/servicecomb/saga/format/JsonFailedSagaResponse.java
+++ b/saga-format/src/main/java/org/apache/servicecomb/saga/format/JsonFailedSagaResponse.java
@@ -15,11 +15,11 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.format;
+package org.apache.servicecomb.saga.format;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 
-import io.servicecomb.saga.core.FailedSagaResponse;
+import org.apache.servicecomb.saga.core.FailedSagaResponse;
 
 public class JsonFailedSagaResponse extends FailedSagaResponse {
 
diff --git a/saga-format/src/main/java/io/servicecomb/saga/format/JsonRestSagaRequest.java b/saga-format/src/main/java/org/apache/servicecomb/saga/format/JsonRestSagaRequest.java
similarity index 88%
rename from saga-format/src/main/java/io/servicecomb/saga/format/JsonRestSagaRequest.java
rename to saga-format/src/main/java/org/apache/servicecomb/saga/format/JsonRestSagaRequest.java
index b09f160..9660eb4 100644
--- a/saga-format/src/main/java/io/servicecomb/saga/format/JsonRestSagaRequest.java
+++ b/saga-format/src/main/java/org/apache/servicecomb/saga/format/JsonRestSagaRequest.java
@@ -15,16 +15,17 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.format;
+package org.apache.servicecomb.saga.format;
 
-import static io.servicecomb.saga.format.JacksonFallback.NOP_TRANSPORT_AWARE_FALLBACK;
+import static org.apache.servicecomb.saga.format.JacksonFallback.NOP_TRANSPORT_AWARE_FALLBACK;
+
+import org.apache.servicecomb.saga.core.SagaRequestImpl;
+import org.apache.servicecomb.saga.transports.TransportFactory;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonProperty;
 
-import io.servicecomb.saga.core.Operation;
-import io.servicecomb.saga.core.SagaRequestImpl;
-import io.servicecomb.saga.transports.TransportFactory;
+import org.apache.servicecomb.saga.core.Operation;
 
 public class JsonRestSagaRequest extends SagaRequestImpl implements JsonSagaRequest {
 
diff --git a/saga-format/src/main/java/io/servicecomb/saga/format/JsonSagaDefinition.java b/saga-format/src/main/java/org/apache/servicecomb/saga/format/JsonSagaDefinition.java
similarity index 75%
rename from saga-format/src/main/java/io/servicecomb/saga/format/JsonSagaDefinition.java
rename to saga-format/src/main/java/org/apache/servicecomb/saga/format/JsonSagaDefinition.java
index 82aad81..5293a13 100644
--- a/saga-format/src/main/java/io/servicecomb/saga/format/JsonSagaDefinition.java
+++ b/saga-format/src/main/java/org/apache/servicecomb/saga/format/JsonSagaDefinition.java
@@ -15,28 +15,26 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.format;
-
-import static io.servicecomb.saga.core.RecoveryPolicy.SAGA_BACKWARD_RECOVERY_POLICY;
-import static io.servicecomb.saga.core.RecoveryPolicy.SAGA_FORWARD_RECOVERY_POLICY;
+package org.apache.servicecomb.saga.format;
 
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.servicecomb.saga.core.ForwardRecovery;
+import org.apache.servicecomb.saga.core.RecoveryPolicy;
+
 import com.fasterxml.jackson.annotation.JsonProperty;
 
-import io.servicecomb.saga.core.BackwardRecovery;
-import io.servicecomb.saga.core.ForwardRecovery;
-import io.servicecomb.saga.core.RecoveryPolicy;
-import io.servicecomb.saga.core.SagaDefinition;
+import org.apache.servicecomb.saga.core.BackwardRecovery;
+import org.apache.servicecomb.saga.core.SagaDefinition;
 
 class JsonSagaDefinition implements SagaDefinition {
 
   static final RecoveryPolicy backwardRecovery = new BackwardRecovery();
 
   private static final Map<String, RecoveryPolicy> policies = new HashMap<String, RecoveryPolicy>(){{
-    put(SAGA_BACKWARD_RECOVERY_POLICY, backwardRecovery);
-    put(SAGA_FORWARD_RECOVERY_POLICY, new ForwardRecovery());
+    put(RecoveryPolicy.SAGA_BACKWARD_RECOVERY_POLICY, backwardRecovery);
+    put(RecoveryPolicy.SAGA_FORWARD_RECOVERY_POLICY, new ForwardRecovery());
   }};
 
   private final JsonSagaRequest[] requests;
diff --git a/saga-format/src/main/java/io/servicecomb/saga/format/JsonSagaRequest.java b/saga-format/src/main/java/org/apache/servicecomb/saga/format/JsonSagaRequest.java
similarity index 81%
rename from saga-format/src/main/java/io/servicecomb/saga/format/JsonSagaRequest.java
rename to saga-format/src/main/java/org/apache/servicecomb/saga/format/JsonSagaRequest.java
index 11fc8c2..45d3981 100644
--- a/saga-format/src/main/java/io/servicecomb/saga/format/JsonSagaRequest.java
+++ b/saga-format/src/main/java/org/apache/servicecomb/saga/format/JsonSagaRequest.java
@@ -15,24 +15,23 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.format;
+package org.apache.servicecomb.saga.format;
 
-import static io.servicecomb.saga.core.Operation.TYPE_REST;
+import org.apache.servicecomb.saga.core.Operation;
+import org.apache.servicecomb.saga.core.SagaRequest;
+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;
 
-import io.servicecomb.saga.core.SagaRequest;
-import io.servicecomb.saga.transports.TransportFactory;
-
 @JsonTypeInfo(
     use = JsonTypeInfo.Id.NAME,
     include = JsonTypeInfo.As.PROPERTY,
     visible = true,
     property = "type")
 @JsonSubTypes({
-    @Type(value = JsonRestSagaRequest.class, name = TYPE_REST)
+    @Type(value = JsonRestSagaRequest.class, name = Operation.TYPE_REST)
 })
 public interface JsonSagaRequest extends SagaRequest {
 
diff --git a/saga-format/src/main/java/io/servicecomb/saga/format/JsonSuccessfulSagaResponse.java b/saga-format/src/main/java/org/apache/servicecomb/saga/format/JsonSuccessfulSagaResponse.java
similarity index 90%
rename from saga-format/src/main/java/io/servicecomb/saga/format/JsonSuccessfulSagaResponse.java
rename to saga-format/src/main/java/org/apache/servicecomb/saga/format/JsonSuccessfulSagaResponse.java
index 27006e6..273fc3d 100644
--- a/saga-format/src/main/java/io/servicecomb/saga/format/JsonSuccessfulSagaResponse.java
+++ b/saga-format/src/main/java/org/apache/servicecomb/saga/format/JsonSuccessfulSagaResponse.java
@@ -15,11 +15,11 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.format;
+package org.apache.servicecomb.saga.format;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 
-import io.servicecomb.saga.core.SuccessfulSagaResponse;
+import org.apache.servicecomb.saga.core.SuccessfulSagaResponse;
 
 public class JsonSuccessfulSagaResponse extends SuccessfulSagaResponse {
 
diff --git a/saga-format/src/main/java/io/servicecomb/saga/format/SagaEventFormat.java b/saga-format/src/main/java/org/apache/servicecomb/saga/format/SagaEventFormat.java
similarity index 90%
rename from saga-format/src/main/java/io/servicecomb/saga/format/SagaEventFormat.java
rename to saga-format/src/main/java/org/apache/servicecomb/saga/format/SagaEventFormat.java
index 24d029a..d035e96 100644
--- a/saga-format/src/main/java/io/servicecomb/saga/format/SagaEventFormat.java
+++ b/saga-format/src/main/java/org/apache/servicecomb/saga/format/SagaEventFormat.java
@@ -15,9 +15,9 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.format;
+package org.apache.servicecomb.saga.format;
 
-import io.servicecomb.saga.core.SagaEvent;
+import org.apache.servicecomb.saga.core.SagaEvent;
 
 public interface SagaEventFormat {
 
diff --git a/saga-format/src/main/java/io/servicecomb/saga/format/TransportAware.java b/saga-format/src/main/java/org/apache/servicecomb/saga/format/TransportAware.java
similarity index 84%
rename from saga-format/src/main/java/io/servicecomb/saga/format/TransportAware.java
rename to saga-format/src/main/java/org/apache/servicecomb/saga/format/TransportAware.java
index 1b5e3c9..edcabf7 100644
--- a/saga-format/src/main/java/io/servicecomb/saga/format/TransportAware.java
+++ b/saga-format/src/main/java/org/apache/servicecomb/saga/format/TransportAware.java
@@ -15,10 +15,10 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.format;
+package org.apache.servicecomb.saga.format;
 
-import io.servicecomb.saga.core.Operation;
-import io.servicecomb.saga.transports.TransportFactory;
+import org.apache.servicecomb.saga.transports.TransportFactory;
+import org.apache.servicecomb.saga.core.Operation;
 
 interface TransportAware {
 
diff --git a/saga-format/src/test/java/io/servicecomb/saga/format/ChildrenExtractorTest.java b/saga-format/src/test/java/org/apache/servicecomb/saga/format/ChildrenExtractorTest.java
similarity index 90%
rename from saga-format/src/test/java/io/servicecomb/saga/format/ChildrenExtractorTest.java
rename to saga-format/src/test/java/org/apache/servicecomb/saga/format/ChildrenExtractorTest.java
index 4f14036..1dad361 100644
--- a/saga-format/src/test/java/io/servicecomb/saga/format/ChildrenExtractorTest.java
+++ b/saga-format/src/test/java/org/apache/servicecomb/saga/format/ChildrenExtractorTest.java
@@ -15,19 +15,19 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.format;
+package org.apache.servicecomb.saga.format;
 
 import static com.seanyinx.github.unit.scaffolding.AssertUtils.expectFailing;
-import static io.servicecomb.saga.core.SagaResponse.NONE_RESPONSE;
 import static org.hamcrest.Matchers.containsInAnyOrder;
 import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertThat;
 
 import java.util.Set;
 
+import org.apache.servicecomb.saga.core.SagaResponse;
 import org.junit.Test;
 
-import io.servicecomb.saga.core.SagaException;
+import org.apache.servicecomb.saga.core.SagaException;
 
 public class ChildrenExtractorTest {
 
@@ -58,7 +58,7 @@ public class ChildrenExtractorTest {
 
   @Test
   public void emptyChildrenIfNoneResponse() throws Exception {
-    Set<String> children = extractor.fromJson(NONE_RESPONSE.body());
+    Set<String> children = extractor.fromJson(SagaResponse.NONE_RESPONSE.body());
 
     assertThat(children, containsInAnyOrder("none"));
   }
diff --git a/saga-format/src/test/java/io/servicecomb/saga/format/JacksonFromJsonFormatTest.java b/saga-format/src/test/java/org/apache/servicecomb/saga/format/JacksonFromJsonFormatTest.java
similarity index 91%
rename from saga-format/src/test/java/io/servicecomb/saga/format/JacksonFromJsonFormatTest.java
rename to saga-format/src/test/java/org/apache/servicecomb/saga/format/JacksonFromJsonFormatTest.java
index 9da52c4..bbf7510 100644
--- a/saga-format/src/test/java/io/servicecomb/saga/format/JacksonFromJsonFormatTest.java
+++ b/saga-format/src/test/java/org/apache/servicecomb/saga/format/JacksonFromJsonFormatTest.java
@@ -15,10 +15,9 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.format;
+package org.apache.servicecomb.saga.format;
 
 import static com.seanyinx.github.unit.scaffolding.Randomness.uniquify;
-import static io.servicecomb.saga.core.Operation.TYPE_REST;
 import static java.util.Collections.emptyMap;
 import static java.util.Collections.singletonMap;
 import static org.hamcrest.Matchers.contains;
@@ -35,20 +34,22 @@ import java.util.Map;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
+import org.apache.servicecomb.saga.core.Operation;
+import org.apache.servicecomb.saga.core.SagaException;
+import org.apache.servicecomb.saga.core.SagaRequest;
+import org.apache.servicecomb.saga.core.SagaResponse;
+import org.apache.servicecomb.saga.core.SuccessfulSagaResponse;
+import org.apache.servicecomb.saga.core.application.interpreter.FromJsonFormat;
+import org.apache.servicecomb.saga.transports.RestTransport;
+import org.apache.servicecomb.saga.transports.TransportFactory;
+import org.hamcrest.Matchers;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mockito;
 
 import com.seanyinx.github.unit.scaffolding.AssertUtils;
 
-import io.servicecomb.saga.core.SagaDefinition;
-import io.servicecomb.saga.core.SagaException;
-import io.servicecomb.saga.core.SagaRequest;
-import io.servicecomb.saga.core.SagaResponse;
-import io.servicecomb.saga.core.SuccessfulSagaResponse;
-import io.servicecomb.saga.core.application.interpreter.FromJsonFormat;
-import io.servicecomb.saga.transports.RestTransport;
-import io.servicecomb.saga.transports.TransportFactory;
+import org.apache.servicecomb.saga.core.SagaDefinition;
 
 public class JacksonFromJsonFormatTest {
 
@@ -191,9 +192,11 @@ public class JacksonFromJsonFormatTest {
 
     assertThat(collect(sagaRequests, SagaRequest::id), contains("request-aaa", "request-bbb", "request-ccc"));
     assertThat(collect(sagaRequests, SagaRequest::serviceName), contains("aaa", "bbb", "ccc"));
-    assertThat(collect(sagaRequests, SagaRequest::type), contains(TYPE_REST, TYPE_REST, TYPE_REST));
+    assertThat(collect(sagaRequests, SagaRequest::type), Matchers
+        .contains(Operation.TYPE_REST, Operation.TYPE_REST, Operation.TYPE_REST));
     assertThat(collect(sagaRequests, (request) -> request.compensation().retries()), contains(3, 4, 5));
-    assertThat(collect(sagaRequests, (request) -> request.fallback().type()), contains(TYPE_REST, TYPE_REST, TYPE_REST));
+    assertThat(collect(sagaRequests, (request) -> request.fallback().type()), Matchers
+        .contains(Operation.TYPE_REST, Operation.TYPE_REST, Operation.TYPE_REST));
 
     SagaResponse response = sagaRequests[0].transaction().send("aaa");
     assertThat(response, is(response11));
diff --git a/saga-format/src/test/java/io/servicecomb/saga/format/JacksonRestOperationTest.java b/saga-format/src/test/java/org/apache/servicecomb/saga/format/JacksonRestOperationTest.java
similarity index 80%
rename from saga-format/src/test/java/io/servicecomb/saga/format/JacksonRestOperationTest.java
rename to saga-format/src/test/java/org/apache/servicecomb/saga/format/JacksonRestOperationTest.java
index cb370e3..5c890a6 100644
--- a/saga-format/src/test/java/io/servicecomb/saga/format/JacksonRestOperationTest.java
+++ b/saga-format/src/test/java/org/apache/servicecomb/saga/format/JacksonRestOperationTest.java
@@ -15,11 +15,9 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.format;
+package org.apache.servicecomb.saga.format;
 
 import static com.seanyinx.github.unit.scaffolding.Randomness.uniquify;
-import static io.servicecomb.saga.core.Operation.SUCCESSFUL_SAGA_RESPONSE;
-import static io.servicecomb.saga.core.SagaResponse.EMPTY_RESPONSE;
 import static java.util.Collections.emptyMap;
 import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertThat;
@@ -29,14 +27,15 @@ import static org.mockito.Mockito.when;
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.servicecomb.saga.core.Operation;
+import org.apache.servicecomb.saga.core.SagaResponse;
+import org.apache.servicecomb.saga.transports.RestTransport;
+import org.hamcrest.core.Is;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.ArgumentCaptor;
 import org.mockito.Mockito;
 
-import io.servicecomb.saga.core.SagaResponse;
-import io.servicecomb.saga.transports.RestTransport;
-
 @SuppressWarnings("unchecked")
 public class JacksonRestOperationTest {
 
@@ -56,14 +55,15 @@ public class JacksonRestOperationTest {
   @Test
   public void appendsResponseToForm() throws Exception {
     ArgumentCaptor<Map> argumentCaptor = ArgumentCaptor.forClass(Map.class);
-    when(transport.with(eq(address), eq(path), eq(method), argumentCaptor.capture())).thenReturn(EMPTY_RESPONSE);
+    when(transport.with(eq(address), eq(path), eq(method), argumentCaptor.capture())).thenReturn(
+        SagaResponse.EMPTY_RESPONSE);
 
-    SagaResponse response = restOperation.send(address, SUCCESSFUL_SAGA_RESPONSE);
+    SagaResponse response = restOperation.send(address, Operation.SUCCESSFUL_SAGA_RESPONSE);
 
-    assertThat(response, is(EMPTY_RESPONSE));
+    assertThat(response, Is.is(SagaResponse.EMPTY_RESPONSE));
 
     Map<String, Map<String, String>> updatedParams = argumentCaptor.getValue();
-    assertThat(updatedParams.getOrDefault("form", emptyMap()).get("response"), is(SUCCESSFUL_SAGA_RESPONSE.body()));
+    assertThat(updatedParams.getOrDefault("form", emptyMap()).get("response"), Is.is(Operation.SUCCESSFUL_SAGA_RESPONSE.body()));
     assertThat(params.isEmpty(), is(true));
   }
 }
diff --git a/saga-format/src/test/java/io/servicecomb/saga/format/JsonRestSagaRequestTest.java b/saga-format/src/test/java/org/apache/servicecomb/saga/format/JsonRestSagaRequestTest.java
similarity index 90%
rename from saga-format/src/test/java/io/servicecomb/saga/format/JsonRestSagaRequestTest.java
rename to saga-format/src/test/java/org/apache/servicecomb/saga/format/JsonRestSagaRequestTest.java
index e03653c..7c0896d 100644
--- a/saga-format/src/test/java/io/servicecomb/saga/format/JsonRestSagaRequestTest.java
+++ b/saga-format/src/test/java/org/apache/servicecomb/saga/format/JsonRestSagaRequestTest.java
@@ -15,12 +15,12 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.format;
+package org.apache.servicecomb.saga.format;
 
 import static com.seanyinx.github.unit.scaffolding.AssertUtils.expectFailing;
 import static com.seanyinx.github.unit.scaffolding.Randomness.uniquify;
-import static io.servicecomb.saga.core.Operation.TYPE_REST;
-import static io.servicecomb.saga.format.JacksonFallback.NOP_TRANSPORT_AWARE_FALLBACK;
+import static org.apache.servicecomb.saga.core.Operation.TYPE_REST;
+import static org.apache.servicecomb.saga.format.JacksonFallback.NOP_TRANSPORT_AWARE_FALLBACK;
 import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertThat;
 import static org.mockito.Matchers.anyMap;
@@ -29,11 +29,11 @@ import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import org.apache.servicecomb.saga.transports.TransportFactory;
 import org.junit.Test;
 import org.mockito.Mockito;
 
-import io.servicecomb.saga.transports.RestTransport;
-import io.servicecomb.saga.transports.TransportFactory;
+import org.apache.servicecomb.saga.transports.RestTransport;
 
 public class JsonRestSagaRequestTest {
 
diff --git a/saga-format/src/test/java/io/servicecomb/saga/format/JsonSagaDefinitionTest.java b/saga-format/src/test/java/org/apache/servicecomb/saga/format/JsonSagaDefinitionTest.java
similarity index 87%
rename from saga-format/src/test/java/io/servicecomb/saga/format/JsonSagaDefinitionTest.java
rename to saga-format/src/test/java/org/apache/servicecomb/saga/format/JsonSagaDefinitionTest.java
index cf1ce92..6228b66 100644
--- a/saga-format/src/test/java/io/servicecomb/saga/format/JsonSagaDefinitionTest.java
+++ b/saga-format/src/test/java/org/apache/servicecomb/saga/format/JsonSagaDefinitionTest.java
@@ -15,11 +15,12 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.format;
+package org.apache.servicecomb.saga.format;
 
 import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertThat;
 
+import org.hamcrest.core.Is;
 import org.junit.Test;
 
 public class JsonSagaDefinitionTest {
@@ -28,6 +29,6 @@ public class JsonSagaDefinitionTest {
   public void backwardRecoveryIfNoPolicyProvided() {
     JsonSagaDefinition definition = new JsonSagaDefinition(null, new JsonSagaRequest[0]);
 
-    assertThat(definition.policy(), is(JsonSagaDefinition.backwardRecovery));
+    assertThat(definition.policy(), Is.is(JsonSagaDefinition.backwardRecovery));
   }
 }
diff --git a/saga-format/src/test/java/io/servicecomb/saga/format/SagaEventFormatTest.java b/saga-format/src/test/java/org/apache/servicecomb/saga/format/SagaEventFormatTest.java
similarity index 86%
rename from saga-format/src/test/java/io/servicecomb/saga/format/SagaEventFormatTest.java
rename to saga-format/src/test/java/org/apache/servicecomb/saga/format/SagaEventFormatTest.java
index 2bde088..9bad69c 100644
--- a/saga-format/src/test/java/io/servicecomb/saga/format/SagaEventFormatTest.java
+++ b/saga-format/src/test/java/org/apache/servicecomb/saga/format/SagaEventFormatTest.java
@@ -16,9 +16,9 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.format;
+package org.apache.servicecomb.saga.format;
 
-import static io.servicecomb.saga.core.Operation.TYPE_REST;
+import static org.apache.servicecomb.saga.core.Operation.TYPE_REST;
 import static java.util.Collections.emptyMap;
 import static java.util.Collections.singletonMap;
 import static org.hamcrest.core.Is.is;
@@ -28,6 +28,16 @@ import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import org.apache.servicecomb.saga.core.JacksonToJsonFormat;
+import org.apache.servicecomb.saga.core.SagaRequest;
+import org.apache.servicecomb.saga.core.SagaRequestImpl;
+import org.apache.servicecomb.saga.core.SagaResponse;
+import org.apache.servicecomb.saga.core.SuccessfulSagaResponse;
+import org.apache.servicecomb.saga.core.ToJsonFormat;
+import org.apache.servicecomb.saga.core.TransactionCompensatedEvent;
+import org.apache.servicecomb.saga.core.TransactionFailedException;
+import org.apache.servicecomb.saga.core.TransactionStartedEvent;
+import org.apache.servicecomb.saga.transports.TransportFactory;
 import org.hamcrest.Description;
 import org.hamcrest.Matcher;
 import org.hamcrest.TypeSafeMatcher;
@@ -39,22 +49,12 @@ import org.mockito.Mockito;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.seanyinx.github.unit.scaffolding.Randomness;
 
-import io.servicecomb.saga.core.FailedSagaResponse;
-import io.servicecomb.saga.core.JacksonToJsonFormat;
-import io.servicecomb.saga.core.RestOperation;
-import io.servicecomb.saga.core.SagaEvent;
-import io.servicecomb.saga.core.SagaRequest;
-import io.servicecomb.saga.core.SagaRequestImpl;
-import io.servicecomb.saga.core.SagaResponse;
-import io.servicecomb.saga.core.SuccessfulSagaResponse;
-import io.servicecomb.saga.core.ToJsonFormat;
-import io.servicecomb.saga.core.TransactionAbortedEvent;
-import io.servicecomb.saga.core.TransactionCompensatedEvent;
-import io.servicecomb.saga.core.TransactionEndedEvent;
-import io.servicecomb.saga.core.TransactionFailedException;
-import io.servicecomb.saga.core.TransactionStartedEvent;
-import io.servicecomb.saga.transports.RestTransport;
-import io.servicecomb.saga.transports.TransportFactory;
+import org.apache.servicecomb.saga.core.FailedSagaResponse;
+import org.apache.servicecomb.saga.core.RestOperation;
+import org.apache.servicecomb.saga.core.SagaEvent;
+import org.apache.servicecomb.saga.core.TransactionAbortedEvent;
+import org.apache.servicecomb.saga.core.TransactionEndedEvent;
+import org.apache.servicecomb.saga.transports.RestTransport;
 
 public class SagaEventFormatTest {
 
diff --git a/saga-spring/src/main/java/io/servicecomb/saga/spring/JpaPersistentStore.java b/saga-spring/src/main/java/org/apache/servicecomb/saga/spring/JpaPersistentStore.java
similarity index 87%
rename from saga-spring/src/main/java/io/servicecomb/saga/spring/JpaPersistentStore.java
rename to saga-spring/src/main/java/org/apache/servicecomb/saga/spring/JpaPersistentStore.java
index 1a1f693..4c6e5f0 100644
--- a/saga-spring/src/main/java/io/servicecomb/saga/spring/JpaPersistentStore.java
+++ b/saga-spring/src/main/java/org/apache/servicecomb/saga/spring/JpaPersistentStore.java
@@ -15,18 +15,19 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.spring;
+package org.apache.servicecomb.saga.spring;
 
 import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 
-import io.servicecomb.saga.core.EventEnvelope;
-import io.servicecomb.saga.core.PersistentStore;
-import io.servicecomb.saga.core.SagaEvent;
-import io.servicecomb.saga.core.ToJsonFormat;
-import io.servicecomb.saga.format.SagaEventFormat;
+import org.apache.servicecomb.saga.core.EventEnvelope;
+import org.apache.servicecomb.saga.core.ToJsonFormat;
+import org.apache.servicecomb.saga.format.SagaEventFormat;
+import org.apache.servicecomb.saga.core.PersistentStore;
+import org.apache.servicecomb.saga.core.SagaEvent;
+
 import kamon.annotation.EnableKamon;
 import kamon.annotation.Segment;
 
diff --git a/saga-spring/src/main/java/io/servicecomb/saga/spring/SagaController.java b/saga-spring/src/main/java/org/apache/servicecomb/saga/spring/SagaController.java
similarity index 97%
rename from saga-spring/src/main/java/io/servicecomb/saga/spring/SagaController.java
rename to saga-spring/src/main/java/org/apache/servicecomb/saga/spring/SagaController.java
index e7f294a..1a73b7b 100644
--- a/saga-spring/src/main/java/io/servicecomb/saga/spring/SagaController.java
+++ b/saga-spring/src/main/java/org/apache/servicecomb/saga/spring/SagaController.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.spring;
+package org.apache.servicecomb.saga.spring;
 
 import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.ANY;
 import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.NONE;
@@ -34,6 +34,7 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.servicecomb.saga.core.SagaResponse;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Controller;
@@ -46,9 +47,8 @@ import org.springframework.web.bind.annotation.RequestParam;
 import com.fasterxml.jackson.annotation.JsonAutoDetect;
 
 import io.servicecomb.provider.rest.common.RestSchema;
-import io.servicecomb.saga.core.SagaException;
-import io.servicecomb.saga.core.SagaResponse;
-import io.servicecomb.saga.core.application.SagaExecutionComponent;
+import org.apache.servicecomb.saga.core.SagaException;
+import org.apache.servicecomb.saga.core.application.SagaExecutionComponent;
 import io.servicecomb.swagger.invocation.exception.InvocationException;
 import io.swagger.annotations.ApiResponse;
 import io.swagger.annotations.ApiResponses;
diff --git a/saga-spring/src/main/java/io/servicecomb/saga/spring/SagaEventEntity.java b/saga-spring/src/main/java/org/apache/servicecomb/saga/spring/SagaEventEntity.java
similarity index 98%
rename from saga-spring/src/main/java/io/servicecomb/saga/spring/SagaEventEntity.java
rename to saga-spring/src/main/java/org/apache/servicecomb/saga/spring/SagaEventEntity.java
index 7cb9354..420655a 100644
--- a/saga-spring/src/main/java/io/servicecomb/saga/spring/SagaEventEntity.java
+++ b/saga-spring/src/main/java/org/apache/servicecomb/saga/spring/SagaEventEntity.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.spring;
+package org.apache.servicecomb.saga.spring;
 
 import java.util.Date;
 
diff --git a/saga-spring/src/main/java/io/servicecomb/saga/spring/SagaEventRepo.java b/saga-spring/src/main/java/org/apache/servicecomb/saga/spring/SagaEventRepo.java
similarity index 97%
rename from saga-spring/src/main/java/io/servicecomb/saga/spring/SagaEventRepo.java
rename to saga-spring/src/main/java/org/apache/servicecomb/saga/spring/SagaEventRepo.java
index 345263c..45cfe8c 100644
--- a/saga-spring/src/main/java/io/servicecomb/saga/spring/SagaEventRepo.java
+++ b/saga-spring/src/main/java/org/apache/servicecomb/saga/spring/SagaEventRepo.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.spring;
+package org.apache.servicecomb.saga.spring;
 
 import java.util.Date;
 import java.util.List;
diff --git a/saga-spring/src/main/java/io/servicecomb/saga/spring/SagaExecutionQueryService.java b/saga-spring/src/main/java/org/apache/servicecomb/saga/spring/SagaExecutionQueryService.java
similarity index 86%
rename from saga-spring/src/main/java/io/servicecomb/saga/spring/SagaExecutionQueryService.java
rename to saga-spring/src/main/java/org/apache/servicecomb/saga/spring/SagaExecutionQueryService.java
index c5b733a..15f8cc5 100644
--- a/saga-spring/src/main/java/io/servicecomb/saga/spring/SagaExecutionQueryService.java
+++ b/saga-spring/src/main/java/org/apache/servicecomb/saga/spring/SagaExecutionQueryService.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.spring;
+package org.apache.servicecomb.saga.spring;
 
 import static javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR;
 
@@ -33,6 +33,14 @@ import java.util.Map;
 import java.util.Optional;
 import java.util.stream.Collectors;
 
+import org.apache.servicecomb.saga.core.SagaRequest;
+import org.apache.servicecomb.saga.core.SagaStartedEvent;
+import org.apache.servicecomb.saga.core.dag.GraphCycleDetectorImpl;
+import org.apache.servicecomb.saga.core.dag.Node;
+import org.apache.servicecomb.saga.core.dag.SingleLeafDirectedAcyclicGraph;
+import org.apache.servicecomb.saga.spring.SagaController.SagaExecution;
+import org.apache.servicecomb.saga.spring.SagaController.SagaExecutionDetail;
+import org.apache.servicecomb.saga.spring.SagaController.SagaExecutionQueryResult;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;
@@ -41,20 +49,13 @@ import org.springframework.stereotype.Service;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
-import io.servicecomb.saga.core.SagaDefinition;
-import io.servicecomb.saga.core.SagaEndedEvent;
-import io.servicecomb.saga.core.SagaRequest;
-import io.servicecomb.saga.core.SagaStartedEvent;
-import io.servicecomb.saga.core.TransactionAbortedEvent;
-import io.servicecomb.saga.core.TransactionEndedEvent;
-import io.servicecomb.saga.core.application.interpreter.FromJsonFormat;
-import io.servicecomb.saga.core.dag.GraphBuilder;
-import io.servicecomb.saga.core.dag.GraphCycleDetectorImpl;
-import io.servicecomb.saga.core.dag.Node;
-import io.servicecomb.saga.core.dag.SingleLeafDirectedAcyclicGraph;
-import io.servicecomb.saga.spring.SagaController.SagaExecution;
-import io.servicecomb.saga.spring.SagaController.SagaExecutionDetail;
-import io.servicecomb.saga.spring.SagaController.SagaExecutionQueryResult;
+import org.apache.servicecomb.saga.core.SagaDefinition;
+import org.apache.servicecomb.saga.core.SagaEndedEvent;
+import org.apache.servicecomb.saga.core.TransactionAbortedEvent;
+import org.apache.servicecomb.saga.core.TransactionEndedEvent;
+import org.apache.servicecomb.saga.core.application.interpreter.FromJsonFormat;
+import org.apache.servicecomb.saga.core.dag.GraphBuilder;
+
 import io.servicecomb.swagger.invocation.exception.InvocationException;
 
 @Service
diff --git a/saga-spring/src/main/java/io/servicecomb/saga/spring/SagaRecoveryListener.java b/saga-spring/src/main/java/org/apache/servicecomb/saga/spring/SagaRecoveryListener.java
similarity index 92%
rename from saga-spring/src/main/java/io/servicecomb/saga/spring/SagaRecoveryListener.java
rename to saga-spring/src/main/java/org/apache/servicecomb/saga/spring/SagaRecoveryListener.java
index 10fbe52..6b6e31d 100644
--- a/saga-spring/src/main/java/io/servicecomb/saga/spring/SagaRecoveryListener.java
+++ b/saga-spring/src/main/java/org/apache/servicecomb/saga/spring/SagaRecoveryListener.java
@@ -15,17 +15,16 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.spring;
+package org.apache.servicecomb.saga.spring;
 
 import java.lang.invoke.MethodHandles;
 
+import org.apache.servicecomb.saga.core.application.SagaExecutionComponent;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.boot.context.event.ApplicationReadyEvent;
 import org.springframework.context.ApplicationListener;
 
-import io.servicecomb.saga.core.application.SagaExecutionComponent;
-
 class SagaRecoveryListener implements ApplicationListener<ApplicationReadyEvent> {
   private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
 
diff --git a/saga-spring/src/main/java/io/servicecomb/saga/spring/SagaShutdownListener.java b/saga-spring/src/main/java/org/apache/servicecomb/saga/spring/SagaShutdownListener.java
similarity index 93%
rename from saga-spring/src/main/java/io/servicecomb/saga/spring/SagaShutdownListener.java
rename to saga-spring/src/main/java/org/apache/servicecomb/saga/spring/SagaShutdownListener.java
index 6c23420..8ec862e 100644
--- a/saga-spring/src/main/java/io/servicecomb/saga/spring/SagaShutdownListener.java
+++ b/saga-spring/src/main/java/org/apache/servicecomb/saga/spring/SagaShutdownListener.java
@@ -15,10 +15,10 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.spring;
+package org.apache.servicecomb.saga.spring;
 
 
-import io.servicecomb.saga.core.application.SagaExecutionComponent;
+import org.apache.servicecomb.saga.core.application.SagaExecutionComponent;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.context.ApplicationListener;
diff --git a/saga-spring/src/main/java/io/servicecomb/saga/spring/SagaSpringApplication.java b/saga-spring/src/main/java/org/apache/servicecomb/saga/spring/SagaSpringApplication.java
similarity index 96%
rename from saga-spring/src/main/java/io/servicecomb/saga/spring/SagaSpringApplication.java
rename to saga-spring/src/main/java/org/apache/servicecomb/saga/spring/SagaSpringApplication.java
index cbb1a96..3e17c14 100644
--- a/saga-spring/src/main/java/io/servicecomb/saga/spring/SagaSpringApplication.java
+++ b/saga-spring/src/main/java/org/apache/servicecomb/saga/spring/SagaSpringApplication.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.spring;
+package org.apache.servicecomb.saga.spring;
 
 import javax.annotation.PreDestroy;
 
diff --git a/saga-spring/src/main/java/io/servicecomb/saga/spring/SagaSpringConfig.java b/saga-spring/src/main/java/org/apache/servicecomb/saga/spring/SagaSpringConfig.java
similarity index 79%
rename from saga-spring/src/main/java/io/servicecomb/saga/spring/SagaSpringConfig.java
rename to saga-spring/src/main/java/org/apache/servicecomb/saga/spring/SagaSpringConfig.java
index b405edc..d40f724 100644
--- a/saga-spring/src/main/java/io/servicecomb/saga/spring/SagaSpringConfig.java
+++ b/saga-spring/src/main/java/org/apache/servicecomb/saga/spring/SagaSpringConfig.java
@@ -15,33 +15,33 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.spring;
+package org.apache.servicecomb.saga.spring;
 
 import java.util.Set;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ThreadFactory;
 import java.util.concurrent.atomic.AtomicInteger;
 
+import org.apache.servicecomb.saga.core.JacksonToJsonFormat;
+import org.apache.servicecomb.saga.core.ToJsonFormat;
+import org.apache.servicecomb.saga.core.actors.ActorBasedSagaFactory;
+import org.apache.servicecomb.saga.core.application.SagaExecutionComponent;
+import org.apache.servicecomb.saga.core.application.SagaFactory;
+import org.apache.servicecomb.saga.core.dag.GraphBasedSagaFactory;
+import org.apache.servicecomb.saga.format.ChildrenExtractor;
+import org.apache.servicecomb.saga.format.JacksonFromJsonFormat;
+import org.apache.servicecomb.saga.format.SagaEventFormat;
+import org.apache.servicecomb.saga.transports.TransportFactory;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
-import io.servicecomb.saga.core.JacksonToJsonFormat;
-import io.servicecomb.saga.core.PersistentStore;
-import io.servicecomb.saga.core.SagaDefinition;
-import io.servicecomb.saga.core.ToJsonFormat;
-import io.servicecomb.saga.core.actors.ActorBasedSagaFactory;
-import io.servicecomb.saga.core.application.SagaExecutionComponent;
-import io.servicecomb.saga.core.application.SagaFactory;
-import io.servicecomb.saga.core.application.interpreter.FromJsonFormat;
-import io.servicecomb.saga.core.dag.GraphBasedSagaFactory;
-import io.servicecomb.saga.format.ChildrenExtractor;
-import io.servicecomb.saga.format.JacksonFromJsonFormat;
-import io.servicecomb.saga.format.JacksonSagaEventFormat;
-import io.servicecomb.saga.format.SagaEventFormat;
-import io.servicecomb.saga.transports.RestTransport;
-import io.servicecomb.saga.transports.TransportFactory;
+import org.apache.servicecomb.saga.core.PersistentStore;
+import org.apache.servicecomb.saga.core.SagaDefinition;
+import org.apache.servicecomb.saga.core.application.interpreter.FromJsonFormat;
+import org.apache.servicecomb.saga.format.JacksonSagaEventFormat;
+import org.apache.servicecomb.saga.transports.RestTransport;
 
 @Configuration
 class SagaSpringConfig {
diff --git a/saga-spring/src/main/resources/META-INF/aop.xml b/saga-spring/src/main/resources/META-INF/aop.xml
index fd5de83..c481036 100644
--- a/saga-spring/src/main/resources/META-INF/aop.xml
+++ b/saga-spring/src/main/resources/META-INF/aop.xml
@@ -19,7 +19,7 @@
 
 <aspectj>
   <weaver options="-Xlint:ignore">
-    <include within="io.servicecomb.saga..*"/>
+    <include within="org.apache.servicecomb.saga..*"/>
     <exclude within="org.aspectj.*"/>
   </weaver>
 </aspectj>
diff --git a/saga-spring/src/main/resources/META-INF/spring.factories b/saga-spring/src/main/resources/META-INF/spring.factories
index 1c0c242..ff5b14f 100644
--- a/saga-spring/src/main/resources/META-INF/spring.factories
+++ b/saga-spring/src/main/resources/META-INF/spring.factories
@@ -16,5 +16,5 @@
 ## ---------------------------------------------------------------------------
 
 org.springframework.context.ApplicationListener=\
-  io.servicecomb.saga.spring.SagaRecoveryListener,\
-  io.servicecomb.saga.spring.SagaShutdownListener
+  org.apache.servicecomb.saga.spring.SagaRecoveryListener,\
+  org.apache.servicecomb.saga.spring.SagaShutdownListener
diff --git a/saga-spring/src/test/java/io/servicecomb/saga/spring/ActorBasedSagaSpringApplicationTest.java b/saga-spring/src/test/java/org/apache/servicecomb/saga/spring/ActorBasedSagaSpringApplicationTest.java
similarity index 95%
rename from saga-spring/src/test/java/io/servicecomb/saga/spring/ActorBasedSagaSpringApplicationTest.java
rename to saga-spring/src/test/java/org/apache/servicecomb/saga/spring/ActorBasedSagaSpringApplicationTest.java
index 7e86dc6..f882672 100644
--- a/saga-spring/src/test/java/io/servicecomb/saga/spring/ActorBasedSagaSpringApplicationTest.java
+++ b/saga-spring/src/test/java/org/apache/servicecomb/saga/spring/ActorBasedSagaSpringApplicationTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.spring;
+package org.apache.servicecomb.saga.spring;
 
 import org.springframework.boot.test.context.SpringBootTest;
 
diff --git a/saga-spring/src/test/java/io/servicecomb/saga/spring/GraphBasedSagaSpringApplicationTest.java b/saga-spring/src/test/java/org/apache/servicecomb/saga/spring/GraphBasedSagaSpringApplicationTest.java
similarity index 95%
rename from saga-spring/src/test/java/io/servicecomb/saga/spring/GraphBasedSagaSpringApplicationTest.java
rename to saga-spring/src/test/java/org/apache/servicecomb/saga/spring/GraphBasedSagaSpringApplicationTest.java
index b356330..f5fddcb 100644
--- a/saga-spring/src/test/java/io/servicecomb/saga/spring/GraphBasedSagaSpringApplicationTest.java
+++ b/saga-spring/src/test/java/org/apache/servicecomb/saga/spring/GraphBasedSagaSpringApplicationTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.spring;
+package org.apache.servicecomb.saga.spring;
 
 import org.springframework.boot.test.context.SpringBootTest;
 
diff --git a/saga-spring/src/test/java/io/servicecomb/saga/spring/GreetingController.java b/saga-spring/src/test/java/org/apache/servicecomb/saga/spring/GreetingController.java
similarity index 97%
rename from saga-spring/src/test/java/io/servicecomb/saga/spring/GreetingController.java
rename to saga-spring/src/test/java/org/apache/servicecomb/saga/spring/GreetingController.java
index 38eefc9..0710c01 100644
--- a/saga-spring/src/test/java/io/servicecomb/saga/spring/GreetingController.java
+++ b/saga-spring/src/test/java/org/apache/servicecomb/saga/spring/GreetingController.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.spring;
+package org.apache.servicecomb.saga.spring;
 
 import static org.springframework.http.MediaType.APPLICATION_FORM_URLENCODED_VALUE;
 import static org.springframework.web.bind.annotation.RequestMethod.POST;
diff --git a/saga-spring/src/test/java/io/servicecomb/saga/spring/SagaRecoveryTest.java b/saga-spring/src/test/java/org/apache/servicecomb/saga/spring/SagaRecoveryTest.java
similarity index 84%
rename from saga-spring/src/test/java/io/servicecomb/saga/spring/SagaRecoveryTest.java
rename to saga-spring/src/test/java/org/apache/servicecomb/saga/spring/SagaRecoveryTest.java
index d63207f..0d1e9c5 100644
--- a/saga-spring/src/test/java/io/servicecomb/saga/spring/SagaRecoveryTest.java
+++ b/saga-spring/src/test/java/org/apache/servicecomb/saga/spring/SagaRecoveryTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.spring;
+package org.apache.servicecomb.saga.spring;
 
 import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
 import static com.github.tomakehurst.wiremock.client.WireMock.containing;
@@ -26,9 +26,13 @@ import static com.github.tomakehurst.wiremock.client.WireMock.postRequestedFor;
 import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
 import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo;
 import static com.github.tomakehurst.wiremock.client.WireMock.verify;
-import static io.servicecomb.saga.core.NoOpSagaRequest.SAGA_START_REQUEST;
 import static java.util.Collections.singletonMap;
 
+import org.apache.servicecomb.saga.core.NoOpSagaRequest;
+import org.apache.servicecomb.saga.core.SagaRequestImpl;
+import org.apache.servicecomb.saga.core.SagaStartedEvent;
+import org.apache.servicecomb.saga.core.ToJsonFormat;
+import org.apache.servicecomb.saga.format.JacksonRestCompensation;
 import org.junit.BeforeClass;
 import org.junit.ClassRule;
 import org.junit.Test;
@@ -43,23 +47,19 @@ import org.springframework.test.context.junit4.SpringRunner;
 
 import com.github.tomakehurst.wiremock.junit.WireMockRule;
 
-import io.servicecomb.saga.core.PersistentStore;
-import io.servicecomb.saga.core.SagaEndedEvent;
-import io.servicecomb.saga.core.SagaRequest;
-import io.servicecomb.saga.core.SagaRequestImpl;
-import io.servicecomb.saga.core.SagaResponse;
-import io.servicecomb.saga.core.SagaStartedEvent;
-import io.servicecomb.saga.core.SuccessfulSagaResponse;
-import io.servicecomb.saga.core.ToJsonFormat;
-import io.servicecomb.saga.core.TransactionAbortedEvent;
-import io.servicecomb.saga.core.TransactionCompensatedEvent;
-import io.servicecomb.saga.core.TransactionEndedEvent;
-import io.servicecomb.saga.core.TransactionStartedEvent;
-import io.servicecomb.saga.format.JacksonFallback;
-import io.servicecomb.saga.format.JacksonRestCompensation;
-import io.servicecomb.saga.format.JacksonRestTransaction;
-import io.servicecomb.saga.format.SagaEventFormat;
-import io.servicecomb.saga.spring.SagaRecoveryTest.EventPopulatingConfig;
+import org.apache.servicecomb.saga.core.PersistentStore;
+import org.apache.servicecomb.saga.core.SagaEndedEvent;
+import org.apache.servicecomb.saga.core.SagaRequest;
+import org.apache.servicecomb.saga.core.SagaResponse;
+import org.apache.servicecomb.saga.core.SuccessfulSagaResponse;
+import org.apache.servicecomb.saga.core.TransactionAbortedEvent;
+import org.apache.servicecomb.saga.core.TransactionCompensatedEvent;
+import org.apache.servicecomb.saga.core.TransactionEndedEvent;
+import org.apache.servicecomb.saga.core.TransactionStartedEvent;
+import org.apache.servicecomb.saga.format.JacksonFallback;
+import org.apache.servicecomb.saga.format.JacksonRestTransaction;
+import org.apache.servicecomb.saga.format.SagaEventFormat;
+import org.apache.servicecomb.saga.spring.SagaRecoveryTest.EventPopulatingConfig;
 import wiremock.org.apache.http.HttpStatus;
 
 @RunWith(SpringRunner.class)
@@ -153,7 +153,7 @@ public class SagaRecoveryTest {
 
       PersistentStore store = new JpaPersistentStore(repo, toJsonFormat, sagaEventFormat);
 
-      store.offer(new SagaStartedEvent("yyy", sagaY, SAGA_START_REQUEST));
+      store.offer(new SagaStartedEvent("yyy", sagaY, NoOpSagaRequest.SAGA_START_REQUEST));
       store.offer(new TransactionStartedEvent("yyy", request1));
       store.offer(new TransactionEndedEvent("yyy", request1, response1));
 
diff --git a/saga-spring/src/test/java/io/servicecomb/saga/spring/SagaServiceDiscoveryTest.java b/saga-spring/src/test/java/org/apache/servicecomb/saga/spring/SagaServiceDiscoveryTest.java
similarity index 97%
rename from saga-spring/src/test/java/io/servicecomb/saga/spring/SagaServiceDiscoveryTest.java
rename to saga-spring/src/test/java/org/apache/servicecomb/saga/spring/SagaServiceDiscoveryTest.java
index 1baa842..7ca683c 100644
--- a/saga-spring/src/test/java/io/servicecomb/saga/spring/SagaServiceDiscoveryTest.java
+++ b/saga-spring/src/test/java/org/apache/servicecomb/saga/spring/SagaServiceDiscoveryTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.spring;
+package org.apache.servicecomb.saga.spring;
 
 import static io.restassured.RestAssured.given;
 import static io.restassured.http.ContentType.TEXT;
@@ -37,7 +37,7 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.ActiveProfiles;
 import org.springframework.test.context.junit4.SpringRunner;
 
-import io.servicecomb.saga.core.TransactionEndedEvent;
+import org.apache.servicecomb.saga.core.TransactionEndedEvent;
 
 @SuppressWarnings("unchecked")
 @RunWith(SpringRunner.class)
diff --git a/saga-spring/src/test/java/io/servicecomb/saga/spring/SagaSpringApplicationTestBase.java b/saga-spring/src/test/java/org/apache/servicecomb/saga/spring/SagaSpringApplicationTestBase.java
similarity index 98%
rename from saga-spring/src/test/java/io/servicecomb/saga/spring/SagaSpringApplicationTestBase.java
rename to saga-spring/src/test/java/org/apache/servicecomb/saga/spring/SagaSpringApplicationTestBase.java
index 5d67ab5..6554469 100644
--- a/saga-spring/src/test/java/io/servicecomb/saga/spring/SagaSpringApplicationTestBase.java
+++ b/saga-spring/src/test/java/org/apache/servicecomb/saga/spring/SagaSpringApplicationTestBase.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.spring;
+package org.apache.servicecomb.saga.spring;
 
 import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
 import static com.github.tomakehurst.wiremock.client.WireMock.containing;
@@ -38,6 +38,8 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
 
 import java.net.URLEncoder;
 
+import org.apache.servicecomb.saga.spring.SagaController.SagaExecutionDetail;
+import org.apache.servicecomb.saga.spring.SagaController.SagaExecutionQueryResult;
 import org.hamcrest.Description;
 import org.hamcrest.Matcher;
 import org.hamcrest.TypeSafeMatcher;
@@ -56,8 +58,6 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import com.github.tomakehurst.wiremock.client.WireMock;
 import com.github.tomakehurst.wiremock.junit.WireMockRule;
 
-import io.servicecomb.saga.spring.SagaController.SagaExecutionDetail;
-import io.servicecomb.saga.spring.SagaController.SagaExecutionQueryResult;
 import wiremock.org.apache.http.HttpStatus;
 
 @SuppressWarnings("unchecked")
diff --git a/saga-web/src/main/java/io/servicecomb/saga/web/SagaWebApplication.java b/saga-web/src/main/java/org/apache/servicecomb/saga/web/SagaWebApplication.java
similarity index 96%
rename from saga-web/src/main/java/io/servicecomb/saga/web/SagaWebApplication.java
rename to saga-web/src/main/java/org/apache/servicecomb/saga/web/SagaWebApplication.java
index 0295a70..a095d68 100644
--- a/saga-web/src/main/java/io/servicecomb/saga/web/SagaWebApplication.java
+++ b/saga-web/src/main/java/org/apache/servicecomb/saga/web/SagaWebApplication.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.web;
+package org.apache.servicecomb.saga.web;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
diff --git a/transports/transport-httpclient-spring/src/main/java/io/servicecomb/saga/transports/HttpClientTransportConfig.java b/transports/transport-httpclient-spring/src/main/java/org/apache/servicecomb/saga/transports/HttpClientTransportConfig.java
similarity index 91%
rename from transports/transport-httpclient-spring/src/main/java/io/servicecomb/saga/transports/HttpClientTransportConfig.java
rename to transports/transport-httpclient-spring/src/main/java/org/apache/servicecomb/saga/transports/HttpClientTransportConfig.java
index 7f269c4..a10b5c6 100644
--- a/transports/transport-httpclient-spring/src/main/java/io/servicecomb/saga/transports/HttpClientTransportConfig.java
+++ b/transports/transport-httpclient-spring/src/main/java/org/apache/servicecomb/saga/transports/HttpClientTransportConfig.java
@@ -15,15 +15,14 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.transports;
+package org.apache.servicecomb.saga.transports;
 
+import org.apache.servicecomb.saga.transports.httpclient.HttpClientTransport;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
-import io.servicecomb.saga.transports.httpclient.HttpClientTransport;
-
 @Configuration
 public class HttpClientTransportConfig {
 
diff --git a/transports/transport-httpclient-spring/src/main/resources/META-INF/spring.factories b/transports/transport-httpclient-spring/src/main/resources/META-INF/spring.factories
index 13820a8..6265ce1 100644
--- a/transports/transport-httpclient-spring/src/main/resources/META-INF/spring.factories
+++ b/transports/transport-httpclient-spring/src/main/resources/META-INF/spring.factories
@@ -16,4 +16,4 @@
 ## ---------------------------------------------------------------------------
 
 org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
-  io.servicecomb.saga.transports.HttpClientTransportConfig
+  org.apache.servicecomb.saga.transports.HttpClientTransportConfig
diff --git a/transports/transport-httpclient-spring/src/test/java/io/servicecomb/saga/transports/RestTransportTest.java b/transports/transport-httpclient-spring/src/test/java/org/apache/servicecomb/saga/transports/RestTransportTest.java
similarity index 96%
rename from transports/transport-httpclient-spring/src/test/java/io/servicecomb/saga/transports/RestTransportTest.java
rename to transports/transport-httpclient-spring/src/test/java/org/apache/servicecomb/saga/transports/RestTransportTest.java
index 9ccb614..2fa105d 100644
--- a/transports/transport-httpclient-spring/src/test/java/io/servicecomb/saga/transports/RestTransportTest.java
+++ b/transports/transport-httpclient-spring/src/test/java/org/apache/servicecomb/saga/transports/RestTransportTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.transports;
+package org.apache.servicecomb.saga.transports;
 
 import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
 import static com.github.tomakehurst.wiremock.client.WireMock.get;
@@ -31,6 +31,7 @@ import static org.junit.Assert.fail;
 
 import java.net.SocketTimeoutException;
 
+import org.apache.servicecomb.saga.core.SagaResponse;
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
@@ -47,8 +48,7 @@ import org.springframework.test.context.junit4.SpringRunner;
 
 import com.github.tomakehurst.wiremock.junit.WireMockRule;
 
-import io.servicecomb.saga.core.SagaResponse;
-import io.servicecomb.saga.core.TransportFailedException;
+import org.apache.servicecomb.saga.core.TransportFailedException;
 
 @RunWith(SpringRunner.class)
 @ContextConfiguration(classes = RestTransportTest.Config.class)
diff --git a/transports/transport-httpclient/src/main/java/io/servicecomb/saga/transports/httpclient/HttpClientTransport.java b/transports/transport-httpclient/src/main/java/org/apache/servicecomb/saga/transports/httpclient/HttpClientTransport.java
similarity index 93%
rename from transports/transport-httpclient/src/main/java/io/servicecomb/saga/transports/httpclient/HttpClientTransport.java
rename to transports/transport-httpclient/src/main/java/org/apache/servicecomb/saga/transports/httpclient/HttpClientTransport.java
index dfcd1fa..0a9e160 100644
--- a/transports/transport-httpclient/src/main/java/io/servicecomb/saga/transports/httpclient/HttpClientTransport.java
+++ b/transports/transport-httpclient/src/main/java/org/apache/servicecomb/saga/transports/httpclient/HttpClientTransport.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.transports.httpclient;
+package org.apache.servicecomb.saga.transports.httpclient;
 
 import java.io.IOException;
 import java.io.InputStreamReader;
@@ -32,11 +32,11 @@ import org.apache.http.client.fluent.Request;
 import org.apache.http.client.utils.URIBuilder;
 import org.apache.http.entity.ContentType;
 import org.apache.logging.log4j.core.util.IOUtils;
+import org.apache.servicecomb.saga.core.SagaResponse;
+import org.apache.servicecomb.saga.core.SuccessfulSagaResponse;
 
-import io.servicecomb.saga.core.SagaResponse;
-import io.servicecomb.saga.core.SuccessfulSagaResponse;
-import io.servicecomb.saga.core.TransportFailedException;
-import io.servicecomb.saga.transports.RestTransport;
+import org.apache.servicecomb.saga.core.TransportFailedException;
+import org.apache.servicecomb.saga.transports.RestTransport;
 import kamon.annotation.EnableKamon;
 import kamon.annotation.Segment;
 
diff --git a/transports/transport-httpclient/src/test/java/io/servicecomb/saga/transports/httpclient/HttpClientTransportTest.java b/transports/transport-httpclient/src/test/java/org/apache/servicecomb/saga/transports/httpclient/HttpClientTransportTest.java
similarity index 96%
rename from transports/transport-httpclient/src/test/java/io/servicecomb/saga/transports/httpclient/HttpClientTransportTest.java
rename to transports/transport-httpclient/src/test/java/org/apache/servicecomb/saga/transports/httpclient/HttpClientTransportTest.java
index aec6bb5..1c32d3e 100644
--- a/transports/transport-httpclient/src/test/java/io/servicecomb/saga/transports/httpclient/HttpClientTransportTest.java
+++ b/transports/transport-httpclient/src/test/java/org/apache/servicecomb/saga/transports/httpclient/HttpClientTransportTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.transports.httpclient;
+package org.apache.servicecomb.saga.transports.httpclient;
 
 import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
 import static com.github.tomakehurst.wiremock.client.WireMock.containing;
@@ -47,9 +47,9 @@ import org.junit.Test;
 
 import com.github.tomakehurst.wiremock.junit.WireMockRule;
 
-import io.servicecomb.saga.core.SagaResponse;
-import io.servicecomb.saga.core.TransportFailedException;
-import io.servicecomb.saga.transports.RestTransport;
+import org.apache.servicecomb.saga.core.SagaResponse;
+import org.apache.servicecomb.saga.core.TransportFailedException;
+import org.apache.servicecomb.saga.transports.RestTransport;
 
 public class HttpClientTransportTest {
 
diff --git a/transports/transport-resttemplate/src/main/java/io/servicecomb/saga/transports/resttemplate/RestTemplateTransport.java b/transports/transport-resttemplate/src/main/java/org/apache/servicecomb/saga/transports/resttemplate/RestTemplateTransport.java
similarity index 84%
rename from transports/transport-resttemplate/src/main/java/io/servicecomb/saga/transports/resttemplate/RestTemplateTransport.java
rename to transports/transport-resttemplate/src/main/java/org/apache/servicecomb/saga/transports/resttemplate/RestTemplateTransport.java
index 2fb1f7c..86f7ec7 100644
--- a/transports/transport-resttemplate/src/main/java/io/servicecomb/saga/transports/resttemplate/RestTemplateTransport.java
+++ b/transports/transport-resttemplate/src/main/java/org/apache/servicecomb/saga/transports/resttemplate/RestTemplateTransport.java
@@ -15,12 +15,8 @@
  * limitations under the License.
  */
 
-package io.servicecomb.saga.transports.resttemplate;
+package org.apache.servicecomb.saga.transports.resttemplate;
 
-import static io.servicecomb.saga.core.SagaRequest.PARAM_FORM;
-import static io.servicecomb.saga.core.SagaRequest.PARAM_JSON;
-import static io.servicecomb.saga.core.SagaRequest.PARAM_JSON_BODY;
-import static io.servicecomb.saga.core.SagaRequest.PARAM_QUERY;
 import static java.util.Collections.emptyMap;
 import static org.springframework.http.HttpMethod.DELETE;
 import static org.springframework.http.HttpMethod.GET;
@@ -34,6 +30,9 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.function.BiFunction;
 
+import org.apache.servicecomb.saga.core.SagaRequest;
+import org.apache.servicecomb.saga.core.SagaResponse;
+import org.apache.servicecomb.saga.core.SuccessfulSagaResponse;
 import org.springframework.http.HttpEntity;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpMethod;
@@ -43,10 +42,8 @@ import org.springframework.web.client.ResponseErrorHandler;
 import org.springframework.web.client.RestTemplate;
 import org.springframework.web.util.UriComponentsBuilder;
 
-import io.servicecomb.saga.core.SagaResponse;
-import io.servicecomb.saga.core.SuccessfulSagaResponse;
-import io.servicecomb.saga.core.TransportFailedException;
-import io.servicecomb.saga.transports.RestTransport;
+import org.apache.servicecomb.saga.core.TransportFailedException;
+import org.apache.servicecomb.saga.transports.RestTransport;
 
 public class RestTemplateTransport implements RestTransport {
 
@@ -90,7 +87,7 @@ public class RestTemplateTransport implements RestTransport {
 
   private String buildUrl(String address, String path, Map<String, Map<String, String>> params) {
     UriComponentsBuilder uriComponentsBuilder = UriComponentsBuilder.fromPath(path);
-    params.getOrDefault(PARAM_QUERY, emptyMap())
+    params.getOrDefault(SagaRequest.PARAM_QUERY, emptyMap())
         .forEach(uriComponentsBuilder::queryParam);
 
     return protocol + address + uriComponentsBuilder.build().toString();
@@ -109,14 +106,14 @@ public class RestTemplateTransport implements RestTransport {
   private HttpEntity<Object> request(Map<String, Map<String, String>> params) {
     HttpHeaders headers = new HttpHeaders();
 
-    if (params.containsKey(PARAM_JSON)) {
+    if (params.containsKey(SagaRequest.PARAM_JSON)) {
       headers.setContentType(APPLICATION_JSON);
-      return new HttpEntity<>(params.get(PARAM_JSON).get(PARAM_JSON_BODY), headers);
+      return new HttpEntity<>(params.get(SagaRequest.PARAM_JSON).get(SagaRequest.PARAM_JSON_BODY), headers);
     }
 
-    if (params.containsKey(PARAM_FORM)) {
+    if (params.containsKey(SagaRequest.PARAM_FORM)) {
       headers.setContentType(APPLICATION_FORM_URLENCODED);
-      return new HttpEntity<>(params.get(PARAM_FORM), headers);
+      return new HttpEntity<>(params.get(SagaRequest.PARAM_FORM), headers);
     }
 
     return null;

-- 
To stop receiving notification emails like this one, please contact
"commits@servicecomb.apache.org" <co...@servicecomb.apache.org>.