Add lesence header
diff --git a/src/main/c/native/rocketmq.h b/src/main/c/native/rocketmq.h
index ad48a98..e4385e4 100644
--- a/src/main/c/native/rocketmq.h
+++ b/src/main/c/native/rocketmq.h
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef __ROCKETMQ_H__
 #define __ROCKETMQ_H__
 #ifdef __cplusplus
diff --git a/src/main/cpp/benchmark/ExampleBenchmark.cpp b/src/main/cpp/benchmark/ExampleBenchmark.cpp
index 383628c..a097c9b 100644
--- a/src/main/cpp/benchmark/ExampleBenchmark.cpp
+++ b/src/main/cpp/benchmark/ExampleBenchmark.cpp
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #include <benchmark/benchmark.h>
 #include <atomic>
 
@@ -29,7 +46,11 @@
     }
 }
 
-BENCHMARK(BM_simpleLoopRelaxed)->RangeMultiplier(2)->Range(1, 1<<10)->UseRealTime()->Unit(benchmark::kNanosecond);
-BENCHMARK(BM_simpleLoopSeq)->RangeMultiplier(2)->Range(1, 1<<10)->UseRealTime()->Unit(benchmark::kNanosecond);
+BENCHMARK(BM_simpleLoopRelaxed)
+->RangeMultiplier(2)->Range(1, 1<<10)->UseRealTime()->
+Unit(benchmark::kNanosecond);
+BENCHMARK(BM_simpleLoopSeq)
+->RangeMultiplier(2)->Range(1, 1<<10)->UseRealTime()->
+Unit(benchmark::kNanosecond);
 
 BENCHMARK_MAIN();
\ No newline at end of file
diff --git a/src/main/cpp/benchmark/ProducerBenchmark.cpp b/src/main/cpp/benchmark/ProducerBenchmark.cpp
index 4300540..35dc0df 100644
--- a/src/main/cpp/benchmark/ProducerBenchmark.cpp
+++ b/src/main/cpp/benchmark/ProducerBenchmark.cpp
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #include <benchmark/benchmark.h>
 #include "rocketmq.h"
 #include "rocketmq-ons-cpp-full.h"
@@ -35,6 +52,8 @@
     graal_detach_thread(thread_);
 }
 
-BENCHMARK(BM_ProducerSendMessage)->RangeMultiplier(2)->Range(1<<6, 1<<10)->UseRealTime()->Unit(benchmark::kMillisecond);
+BENCHMARK(BM_ProducerSendMessage)
+->RangeMultiplier(2)->Range(1<<6, 1<<10)->UseRealTime()->
+Unit(benchmark::kMillisecond);
 
 BENCHMARK_MAIN();
diff --git a/src/main/cpp/demos/ConsumerDemo.cpp b/src/main/cpp/demos/ConsumerDemo.cpp
index 0df672a..407ef1e 100644
--- a/src/main/cpp/demos/ConsumerDemo.cpp
+++ b/src/main/cpp/demos/ConsumerDemo.cpp
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #include "ONSFactory.h"
 
 #include <iostream>
diff --git a/src/main/cpp/demos/MultiThreadProducerDemo.cpp b/src/main/cpp/demos/MultiThreadProducerDemo.cpp
index 867a736..9704ecf 100644
--- a/src/main/cpp/demos/MultiThreadProducerDemo.cpp
+++ b/src/main/cpp/demos/MultiThreadProducerDemo.cpp
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #include <iostream>
 #include <chrono>
 #include <thread>
diff --git a/src/main/cpp/demos/OrderConsumerDemo.cpp b/src/main/cpp/demos/OrderConsumerDemo.cpp
index 28f5ee5..a146a80 100644
--- a/src/main/cpp/demos/OrderConsumerDemo.cpp
+++ b/src/main/cpp/demos/OrderConsumerDemo.cpp
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #include "ONSFactory.h"
 
 #include <iostream>
diff --git a/src/main/cpp/demos/OrderProducerDemo.cpp b/src/main/cpp/demos/OrderProducerDemo.cpp
index 6bf6ed4..65ac634 100644
--- a/src/main/cpp/demos/OrderProducerDemo.cpp
+++ b/src/main/cpp/demos/OrderProducerDemo.cpp
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #include <iostream>
 #include <chrono>
 #include "ONSFactory.h"
diff --git a/src/main/cpp/demos/ProducerAsyncDemo.cpp b/src/main/cpp/demos/ProducerAsyncDemo.cpp
index 451ab8a..337c694 100644
--- a/src/main/cpp/demos/ProducerAsyncDemo.cpp
+++ b/src/main/cpp/demos/ProducerAsyncDemo.cpp
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #include <iostream>
 #include <chrono>
 #include <mutex>
diff --git a/src/main/cpp/demos/ProducerDemo.cpp b/src/main/cpp/demos/ProducerDemo.cpp
index 0b19174..73e0e41 100644
--- a/src/main/cpp/demos/ProducerDemo.cpp
+++ b/src/main/cpp/demos/ProducerDemo.cpp
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #include <iostream>
 #include <chrono>
 #include "ONSFactory.h"
diff --git a/src/main/cpp/demos/ProducerOnewayDemo.cpp b/src/main/cpp/demos/ProducerOnewayDemo.cpp
index 031bff3..890f1fb 100644
--- a/src/main/cpp/demos/ProducerOnewayDemo.cpp
+++ b/src/main/cpp/demos/ProducerOnewayDemo.cpp
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #include <iostream>
 #include <chrono>
 #include "ONSFactory.h"
diff --git a/src/main/cpp/demos/TransactionProducerDemo.cpp b/src/main/cpp/demos/TransactionProducerDemo.cpp
index 6044589..420afef 100644
--- a/src/main/cpp/demos/TransactionProducerDemo.cpp
+++ b/src/main/cpp/demos/TransactionProducerDemo.cpp
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #include <iostream>
 #include <chrono>
 #include "ONSFactory.h"
@@ -22,7 +39,6 @@
     }
 };
 
-
 int main() {
     std::cout << "=======Before sending message=======" << std::endl;
     ONSFactoryProperty factoryInfo;
diff --git a/src/main/cpp/include/Action.h b/src/main/cpp/include/Action.h
index 289f440..6a3f708 100644
--- a/src/main/cpp/include/Action.h
+++ b/src/main/cpp/include/Action.h
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef __ACTION_H__
 #define __ACTION_H__
 
@@ -5,10 +22,10 @@
 
 // consuming result
 enum Action {
-  // consume success, application could continue to consume next message
-  CommitMessage,
-  // consume fail, server will deliver this message later, application could
-  // continue to consume next message
-  ReconsumeLater
+    // consume success, application could continue to consume next message
+            CommitMessage,
+    // consume fail, server will deliver this message later, application could
+    // continue to consume next message
+            ReconsumeLater
 };
 #endif
diff --git a/src/main/cpp/include/ConsumeContext.h b/src/main/cpp/include/ConsumeContext.h
index abb59de..2887160 100644
--- a/src/main/cpp/include/ConsumeContext.h
+++ b/src/main/cpp/include/ConsumeContext.h
@@ -1,13 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef __CONSUMECONTEXT_H__
 #define __CONSUMECONTEXT_H__
+
 #include "ONSClient.h"
 
 namespace ons {
 
-class  ONSCLIENT_API ConsumeContext {
- public:
-  ConsumeContext() {}
-  virtual ~ConsumeContext() {}
-};
+    class ONSCLIENT_API ConsumeContext {
+    public:
+        ConsumeContext() {}
+
+        virtual ~ConsumeContext() {}
+    };
 }
 #endif
diff --git a/src/main/cpp/include/ConsumeOrderContext.h b/src/main/cpp/include/ConsumeOrderContext.h
index a196d5d..6915982 100644
--- a/src/main/cpp/include/ConsumeOrderContext.h
+++ b/src/main/cpp/include/ConsumeOrderContext.h
@@ -1,13 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef __CONSUMEORDERLYCONTEXT_H__
 #define __CONSUMEORDERLYCONTEXT_H__
+
 #include "ONSClient.h"
 
 namespace ons {
 
-class ONSCLIENT_API ConsumeOrderContext {
- public:
-  ConsumeOrderContext() {}
-  virtual ~ConsumeOrderContext() {}
-};
+    class ONSCLIENT_API ConsumeOrderContext {
+    public:
+        ConsumeOrderContext() {}
+
+        virtual ~ConsumeOrderContext() {}
+    };
 }
 #endif
diff --git a/src/main/cpp/include/LocalTransactionChecker.h b/src/main/cpp/include/LocalTransactionChecker.h
index 8601671..8972965 100644
--- a/src/main/cpp/include/LocalTransactionChecker.h
+++ b/src/main/cpp/include/LocalTransactionChecker.h
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef __LOCALTRANSACTIONCHECKER_H__
 #define __LOCALTRANSACTIONCHECKER_H__
 
@@ -5,12 +22,14 @@
 #include "TransactionStatus.h"
 
 namespace ons {
-class LocalTransactionChecker {
- public:
-	 LocalTransactionChecker() {}
-  virtual TransactionStatus check(Message& msg) = 0;
-  virtual ~LocalTransactionChecker() {}
-};
+    class LocalTransactionChecker {
+    public:
+        LocalTransactionChecker() {}
+
+        virtual TransactionStatus check(Message &msg) = 0;
+
+        virtual ~LocalTransactionChecker() {}
+    };
 }
 
 #endif
diff --git a/src/main/cpp/include/LocalTransactionExecuter.h b/src/main/cpp/include/LocalTransactionExecuter.h
index 1d7ea4f..faa3389 100644
--- a/src/main/cpp/include/LocalTransactionExecuter.h
+++ b/src/main/cpp/include/LocalTransactionExecuter.h
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef __LOCALTRANSACTIONEXECUTER_H__
 #define __LOCALTRANSACTIONEXECUTER_H__
 
@@ -5,12 +22,14 @@
 #include "TransactionStatus.h"
 
 namespace ons {
-class LocalTransactionExecuter {
- public:
-	 LocalTransactionExecuter() {}
-     virtual TransactionStatus execute(Message& msg) = 0;
-     virtual ~LocalTransactionExecuter() {}
-};
+    class LocalTransactionExecuter {
+    public:
+        LocalTransactionExecuter() {}
+
+        virtual TransactionStatus execute(Message &msg) = 0;
+
+        virtual ~LocalTransactionExecuter() {}
+    };
 }
 
 #endif
diff --git a/src/main/cpp/include/Message.h b/src/main/cpp/include/Message.h
index 8038e29..341e3a0 100755
--- a/src/main/cpp/include/Message.h
+++ b/src/main/cpp/include/Message.h
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef __MESSAGE_H__
 #define __MESSAGE_H__
 
@@ -8,93 +25,121 @@
 
 namespace ons {
 
-class  SystemPropKey {
- public:
-  SystemPropKey() {}
-  ~SystemPropKey() {}
-  static const char* TAG;
-  static const char* KEY;
-  static const char* MSGID;
-  static const char* RECONSUMETIMES;
-  static const char* STARTDELIVERTIME;
-};
+    class SystemPropKey {
+    public:
+        SystemPropKey() {}
 
-class  ONSCLIENT_API Message {
- public:
-  Message();
-  Message(const std::string& topic, const std::string& tags, const std::string& byte_body);
-  Message(const char* topic, const char* tags, const char* byte_body);
-  Message(const char* topic, size_t topic_size, const char* tags, size_t tags_size, const char* body, size_t body_size);
-  Message(const char* topic, const char* tags, const char* keys, const char* body);
+        ~SystemPropKey() {}
 
-  virtual ~Message();
+        static const char *TAG;
+        static const char *KEY;
+        static const char *MSGID;
+        static const char *RECONSUMETIMES;
+        static const char *STARTDELIVERTIME;
+    };
 
-  Message(const Message& other);
-  Message& operator=(const Message& other);
+    class ONSCLIENT_API Message {
+    public:
+        Message();
 
-  // userProperties was used to save user specific parameters which doesn't
-  // belong to SystemPropKey
-  void putUserProperties(const char* key, const char* value);
-	const char* getUserProperties(const char* key) const;
-  void setUserProperties(std::map<std::string, std::string>& userProperty);
-  std::map<std::string, std::string> getUserProperties() const;
+        Message(const std::string &topic, const std::string &tags, const std::string &byte_body);
 
-  // systemProperties only save parameters defined in SystemPropKey, please do
-  // not add other parameters into systemProperties, else it was not saved.
-  void putSystemProperties(const char* key, const char* value);
-	const char* getSystemProperties(const char* key) const;
-  void setSystemProperties(std::map<std::string, std::string>& systemProperty);
-  std::map<std::string, std::string> getSystemProperties() const;
+        Message(const char *topic, const char *tags, const char *byte_body);
 
-	const char* getTopic() const;
-  void setTopic(const char* topic);
+        Message(const char *topic, size_t topic_size, const char *tags, size_t tags_size, const char *body,
+                size_t body_size);
 
-	const char* getTag() const;
-  void setTag(const char* tags);
+        Message(const char *topic, const char *tags, const char *keys, const char *body);
 
-	const char* getKey() const;
-  void setKey(const char* keys);
+        virtual ~Message();
 
-	const char* getMsgID() const;
-  void setMsgID(const char* msgId);
+        Message(const Message &other);
 
-  const long long getStartDeliverTime() const;
-  void setStartDeliverTime(long long level);
+        Message &operator=(const Message &other);
 
-  const char* getBody() const;
-  const char* getByteBody(int *len) const;
-  const std::string getMsgBody() const;
-  const size_t getBodySize() const;
-  void setMsgBody(const std::string msgbody);
-  void setBody(unsigned char* byte_msgbody, int len);
+        // userProperties was used to save user specific parameters which doesn't
+        // belong to SystemPropKey
+        void putUserProperties(const char *key, const char *value);
 
-  const int getReconsumeTimes() const;
-  void setReconsumeTimes(int reconsumeTimes);
+        const char *getUserProperties(const char *key) const;
 
-  long long getStoreTimestamp() const;
-  void setStoreTimestamp(long long storeTimestamp);
+        void setUserProperties(std::map<std::string, std::string> &userProperty);
 
-  const std::string toString() const;
+        std::map<std::string, std::string> getUserProperties() const;
 
-  const std::string toSystemString() const;
+        // systemProperties only save parameters defined in SystemPropKey, please do
+        // not add other parameters into systemProperties, else it was not saved.
+        void putSystemProperties(const char *key, const char *value);
 
-  const std::string toUserString() const;
+        const char *getSystemProperties(const char *key) const;
 
-  long long getQueueOffset() const;
-  void setQueueOffset(long long queueOffset);
- protected:
-  void Init(const std::string& topic, const std::string& tags,
-            const std::string& keys, const std::string& body);
+        void setSystemProperties(std::map<std::string, std::string> &systemProperty);
 
- private:
-  std::string topic;
-  std::string body;
-  size_t body_size;
-  long long m_storeTimestamp;
-  long long m_queueOffset;
-  std::map<std::string, std::string> systemProperties;
-  std::map<std::string, std::string> userProperties;
-};
+        std::map<std::string, std::string> getSystemProperties() const;
+
+        const char *getTopic() const;
+
+        void setTopic(const char *topic);
+
+        const char *getTag() const;
+
+        void setTag(const char *tags);
+
+        const char *getKey() const;
+
+        void setKey(const char *keys);
+
+        const char *getMsgID() const;
+
+        void setMsgID(const char *msgId);
+
+        const long long getStartDeliverTime() const;
+
+        void setStartDeliverTime(long long level);
+
+        const char *getBody() const;
+
+        const char *getByteBody(int *len) const;
+
+        const std::string getMsgBody() const;
+
+        const size_t getBodySize() const;
+
+        void setMsgBody(const std::string msgbody);
+
+        void setBody(unsigned char *byte_msgbody, int len);
+
+        const int getReconsumeTimes() const;
+
+        void setReconsumeTimes(int reconsumeTimes);
+
+        long long getStoreTimestamp() const;
+
+        void setStoreTimestamp(long long storeTimestamp);
+
+        const std::string toString() const;
+
+        const std::string toSystemString() const;
+
+        const std::string toUserString() const;
+
+        long long getQueueOffset() const;
+
+        void setQueueOffset(long long queueOffset);
+
+    protected:
+        void Init(const std::string &topic, const std::string &tags,
+                  const std::string &keys, const std::string &body);
+
+    private:
+        std::string topic;
+        std::string body;
+        size_t body_size;
+        long long m_storeTimestamp;
+        long long m_queueOffset;
+        std::map<std::string, std::string> systemProperties;
+        std::map<std::string, std::string> userProperties;
+    };
 
 }  //<!end namespace;
 #endif
diff --git a/src/main/cpp/include/MessageListener.h b/src/main/cpp/include/MessageListener.h
index 5733d2f..ff34742 100644
--- a/src/main/cpp/include/MessageListener.h
+++ b/src/main/cpp/include/MessageListener.h
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef __MESSAGELISTENER_H__
 #define __MESSAGELISTENER_H__
 
@@ -7,13 +24,14 @@
 
 namespace ons {
 
-class  ONSCLIENT_API MessageListener {
- public:
-  MessageListener() {}
-  virtual ~MessageListener() {}
+    class ONSCLIENT_API MessageListener {
+    public:
+        MessageListener() {}
 
-  // interface of consuming message, should be realized by application
-  virtual Action consume(Message& message, ConsumeContext& context) = 0;
-};
+        virtual ~MessageListener() {}
+
+        // interface of consuming message, should be realized by application
+        virtual Action consume(Message &message, ConsumeContext &context) = 0;
+    };
 }
 #endif
diff --git a/src/main/cpp/include/MessageOrderListener.h b/src/main/cpp/include/MessageOrderListener.h
index 848dd20..7c6d5f1 100644
--- a/src/main/cpp/include/MessageOrderListener.h
+++ b/src/main/cpp/include/MessageOrderListener.h
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef __MESSAGEORDERLYLISTENER_H__
 #define __MESSAGEORDERLYLISTENER_H__
 
@@ -7,14 +24,15 @@
 
 namespace ons {
 
-class  MessageOrderListener {
- public:
-  MessageOrderListener() {}
-  virtual ~MessageOrderListener() {}
+    class MessageOrderListener {
+    public:
+        MessageOrderListener() {}
 
-  // interface of consuming message, should be realized by application
-  virtual OrderAction consume(Message& message,
-                              ConsumeOrderContext& context) = 0;
-};
+        virtual ~MessageOrderListener() {}
+
+        // interface of consuming message, should be realized by application
+        virtual OrderAction consume(Message &message,
+                                    ConsumeOrderContext &context) = 0;
+    };
 }
 #endif
diff --git a/src/main/cpp/include/MessageQueueONS.h b/src/main/cpp/include/MessageQueueONS.h
index bd8a8dc..63ad0d5 100755
--- a/src/main/cpp/include/MessageQueueONS.h
+++ b/src/main/cpp/include/MessageQueueONS.h
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef __MESSAGEQUEUEONS_H__
 #define __MESSAGEQUEUEONS_H__
 
@@ -8,32 +25,39 @@
 using namespace std;
 
 namespace ons {
-class MessageQueueONS {
- public:
-  MessageQueueONS();
-  MessageQueueONS(const string& topic, const string& brokerName, int queueId);
+    class MessageQueueONS {
+    public:
+        MessageQueueONS();
 
-  MessageQueueONS(const MessageQueueONS& other);
-  MessageQueueONS& operator=(const MessageQueueONS& other);
+        MessageQueueONS(const string &topic, const string &brokerName, int queueId);
 
-  string getTopic() const;
-  void setTopic(const string& topic);
+        MessageQueueONS(const MessageQueueONS &other);
 
-  string getBrokerName() const;
-  void setBrokerName(const string& brokerName);
+        MessageQueueONS &operator=(const MessageQueueONS &other);
 
-  int getQueueId() const;
-  void setQueueId(int queueId);
+        string getTopic() const;
 
-  bool operator==(const MessageQueueONS& mq) const;
-  bool operator<(const MessageQueueONS& mq) const;
-  int compareTo(const MessageQueueONS& mq) const;
+        void setTopic(const string &topic);
 
- private:
-  string m_topic;
-  string m_brokerName;
-  int m_queueId;
-};
+        string getBrokerName() const;
+
+        void setBrokerName(const string &brokerName);
+
+        int getQueueId() const;
+
+        void setQueueId(int queueId);
+
+        bool operator==(const MessageQueueONS &mq) const;
+
+        bool operator<(const MessageQueueONS &mq) const;
+
+        int compareTo(const MessageQueueONS &mq) const;
+
+    private:
+        string m_topic;
+        string m_brokerName;
+        int m_queueId;
+    };
 
 }  //<!end namespace;
 #endif
diff --git a/src/main/cpp/include/MessageQueueSelectorONS.h b/src/main/cpp/include/MessageQueueSelectorONS.h
index a82a285..6857bdd 100644
--- a/src/main/cpp/include/MessageQueueSelectorONS.h
+++ b/src/main/cpp/include/MessageQueueSelectorONS.h
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef _MESSAGEQUEUESELECTOR_H_
 #define _MESSAGEQUEUESELECTOR_H_
 
@@ -6,12 +23,13 @@
 
 namespace ons {
 
-class MessageQueueSelectorONS {
- public:
-  virtual ~MessageQueueSelectorONS() {}
-  virtual MessageQueueONS select(const vector<MessageQueueONS>& mqs,
-                                 const Message& msg, void* arg) = 0;
-};
+    class MessageQueueSelectorONS {
+    public:
+        virtual ~MessageQueueSelectorONS() {}
+
+        virtual MessageQueueONS select(const vector<MessageQueueONS> &mqs,
+                                       const Message &msg, void *arg) = 0;
+    };
 
 }  //<!end namespace;
 #endif  //<! _MQSELECTOR_H_
diff --git a/src/main/cpp/include/ONSCallback.h b/src/main/cpp/include/ONSCallback.h
index d529426..fdd53bc 100644
--- a/src/main/cpp/include/ONSCallback.h
+++ b/src/main/cpp/include/ONSCallback.h
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef __ONSCALLBACK_H__
 #define __ONSCALLBACK_H__
 
@@ -8,8 +25,10 @@
     class SendCallbackONS {
     public:
         virtual ~SendCallbackONS() {}
-        virtual void onSuccess(SendResultONS& sendResult) {};
-        virtual void onException(ONSClientException& e) {};
+
+        virtual void onSuccess(SendResultONS &sendResult) {};
+
+        virtual void onException(ONSClientException &e) {};
     };
 
 }  // end of namespace SendResultONS
diff --git a/src/main/cpp/include/ONSChannel.h b/src/main/cpp/include/ONSChannel.h
index 6f538af..40a9831 100644
--- a/src/main/cpp/include/ONSChannel.h
+++ b/src/main/cpp/include/ONSChannel.h
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef __ONSCHANNEL_H__
 #define __ONSCHANNEL_H__
 
diff --git a/src/main/cpp/include/ONSClient.h b/src/main/cpp/include/ONSClient.h
index 4ebc595..b9dab0b 100644
--- a/src/main/cpp/include/ONSClient.h
+++ b/src/main/cpp/include/ONSClient.h
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef __ONSCLIENT_H__
 #define __ONSCLIENT_H__
 
diff --git a/src/main/cpp/include/ONSClientException.h b/src/main/cpp/include/ONSClientException.h
index 76922f3..10fca70 100644
--- a/src/main/cpp/include/ONSClientException.h
+++ b/src/main/cpp/include/ONSClientException.h
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef __ONSCLIENTEXCEPTION_H__
 #define __ONSCLIENTEXCEPTION_H__
 
@@ -7,19 +24,24 @@
 
 namespace ons {
 
-class ONSCLIENT_API ONSClientException : public std::exception {
- public:
-  ONSClientException() throw();
-  virtual ~ONSClientException() throw();
-  ONSClientException(std::string msg, int error) throw();
-  const char* GetMsg() const throw();
-  const char* what() const throw();
-  int GetError() const throw();
+    class ONSCLIENT_API ONSClientException : public std::exception {
+    public:
+        ONSClientException() throw();
 
- private:
-  std::string m_msg;
-  int m_error;
-};
+        virtual ~ONSClientException() throw();
+
+        ONSClientException(std::string msg, int error) throw();
+
+        const char *GetMsg() const throw();
+
+        const char *what() const throw();
+
+        int GetError() const throw();
+
+    private:
+        std::string m_msg;
+        int m_error;
+    };
 }
 
 #endif
diff --git a/src/main/cpp/include/ONSFactory.h b/src/main/cpp/include/ONSFactory.h
index ecb531a..2ff00c4 100755
--- a/src/main/cpp/include/ONSFactory.h
+++ b/src/main/cpp/include/ONSFactory.h
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef __ONSFACTORY_H_
 #define __ONSFACTORY_H_
 
@@ -12,92 +29,133 @@
 #include "TransactionProducer.h"
 
 namespace ons {
-class ONSCLIENT_API ONSFactoryProperty {
- public:
-  ONSFactoryProperty();
-  virtual ~ONSFactoryProperty();
-  bool checkValidityOfFactoryProperties(const std::string& key,
-                                        const std::string& value) throw(ons::ONSClientException);
-  const char* getLogPath() const;
-  void setSendMsgTimeout(const int value);
-  void setSendMsgRetryTimes(const int value);
-  void setMaxMsgCacheSize(const int size);
-  void setOnsTraceSwitch(bool onswitch);
-  void setOnsChannel(ONSChannel onsChannel) throw(ons::ONSClientException);
-  void setFactoryProperty(const char* key, const char* value) throw(ons::ONSClientException);
-  void setFactoryProperties(std::map<std::string, std::string> factoryProperties);
-  std::map<std::string, std::string> getFactoryProperties() const;
-  const char* getProducerId() const;
-  const char* getConsumerId() const;
-  const char* getGroupId() const;
-  const char* getPublishTopics() const;
-  const char* getMessageModel() const;
-  const int getSendMsgTimeout() const;
-  const int getSendMsgRetryTimes() const;
-  const int getConsumeThreadNums() const;
-  const int getMaxMsgCacheSize() const;
-  const ONSChannel getOnsChannel() const;
-  const char* getChannel() const;
-  const char* getMessageContent() const;
-  const char* getNameSrvAddr() const;
-  const char* getNameSrvDomain() const;
-  const char* getAccessKey() const;
-  const char* getSecretKey() const;
-  const char* getConsumerInstanceName() const;
-  bool getOnsTraceSwitch() const;
-  const char* getInstanceId() const;
+    class ONSCLIENT_API ONSFactoryProperty {
+    public:
+        ONSFactoryProperty();
 
- public:
-  static const char* LogPath;
-  static const char* ProducerId;
-  static const char* ConsumerId;
-  static const char* GroupId;
-  static const char* PublishTopics;
-  static const char* MsgContent;
-  static const char* ONSAddr;
-  static const char* AccessKey;
-  static const char* SecretKey;
-  static const char* MessageModel;
-  static const char* BROADCASTING;
-  static const char* CLUSTERING;
-  static const char* SendMsgTimeoutMillis;
-  static const char* NAMESRV_ADDR;
-  static const char* ConsumeThreadNums;
-  static const char* OnsChannel;
-  static const char* MaxMsgCacheSize;
-  static const char* OnsTraceSwitch;
-  static const char* SendMsgRetryTimes;
-  static const char* ConsumerInstanceName;
-  static const char* InstanceId;
+        virtual ~ONSFactoryProperty();
 
- private:
-  std::map<std::string, std::string> m_onsFactoryProperties;
-};
+        bool checkValidityOfFactoryProperties(const std::string &key,
+                                              const std::string &value) throw(ons::ONSClientException);
 
-class ONSCLIENT_API ONSFactoryAPI {
- public:
-  ONSFactoryAPI();
-  virtual ~ONSFactoryAPI();
+        const char *getLogPath() const;
 
-  virtual ons::Producer* createProducer(ons::ONSFactoryProperty factoryProperty) throw(ons::ONSClientException);
-  virtual ons::OrderProducer* createOrderProducer(ons::ONSFactoryProperty factoryProperty) throw(
-      ons::ONSClientException);
-  virtual ons::OrderConsumer* createOrderConsumer(ons::ONSFactoryProperty factoryProperty) throw(
-      ons::ONSClientException);
-  virtual ons::TransactionProducer* createTransactionProducer(
-      ons::ONSFactoryProperty factoryProperty, ons::LocalTransactionChecker* checker) throw(ons::ONSClientException);
-  virtual ons::PullConsumer* createPullConsumer(ons::ONSFactoryProperty factoryProperty) throw(ons::ONSClientException);
-  virtual ons::PushConsumer* createPushConsumer(ons::ONSFactoryProperty factoryProperty) throw(ons::ONSClientException);
-};
+        void setSendMsgTimeout(const int value);
 
-class ONSCLIENT_API ONSFactory {
- public:
-  virtual ~ONSFactory();
-  static ons::ONSFactoryAPI* getInstance();
+        void setSendMsgRetryTimes(const int value);
 
- private:
-  ONSFactory();
-  static ons::ONSFactoryAPI* onsFactoryInstance;
-};
+        void setMaxMsgCacheSize(const int size);
+
+        void setOnsTraceSwitch(bool onswitch);
+
+        void setOnsChannel(ONSChannel onsChannel) throw(ons::ONSClientException);
+
+        void setFactoryProperty(const char *key, const char *value) throw(ons::ONSClientException);
+
+        void setFactoryProperties(std::map<std::string, std::string> factoryProperties);
+
+        std::map<std::string, std::string> getFactoryProperties() const;
+
+        const char *getProducerId() const;
+
+        const char *getConsumerId() const;
+
+        const char *getGroupId() const;
+
+        const char *getPublishTopics() const;
+
+        const char *getMessageModel() const;
+
+        const int getSendMsgTimeout() const;
+
+        const int getSendMsgRetryTimes() const;
+
+        const int getConsumeThreadNums() const;
+
+        const int getMaxMsgCacheSize() const;
+
+        const ONSChannel getOnsChannel() const;
+
+        const char *getChannel() const;
+
+        const char *getMessageContent() const;
+
+        const char *getNameSrvAddr() const;
+
+        const char *getNameSrvDomain() const;
+
+        const char *getAccessKey() const;
+
+        const char *getSecretKey() const;
+
+        const char *getConsumerInstanceName() const;
+
+        bool getOnsTraceSwitch() const;
+
+        const char *getInstanceId() const;
+
+    public:
+        static const char *LogPath;
+        static const char *ProducerId;
+        static const char *ConsumerId;
+        static const char *GroupId;
+        static const char *PublishTopics;
+        static const char *MsgContent;
+        static const char *ONSAddr;
+        static const char *AccessKey;
+        static const char *SecretKey;
+        static const char *MessageModel;
+        static const char *BROADCASTING;
+        static const char *CLUSTERING;
+        static const char *SendMsgTimeoutMillis;
+        static const char *NAMESRV_ADDR;
+        static const char *ConsumeThreadNums;
+        static const char *OnsChannel;
+        static const char *MaxMsgCacheSize;
+        static const char *OnsTraceSwitch;
+        static const char *SendMsgRetryTimes;
+        static const char *ConsumerInstanceName;
+        static const char *InstanceId;
+
+    private:
+        std::map<std::string, std::string> m_onsFactoryProperties;
+    };
+
+    class ONSCLIENT_API ONSFactoryAPI {
+    public:
+        ONSFactoryAPI();
+
+        virtual ~ONSFactoryAPI();
+
+        virtual ons::Producer *createProducer(ons::ONSFactoryProperty factoryProperty) throw(ons::ONSClientException);
+
+        virtual ons::OrderProducer *createOrderProducer(ons::ONSFactoryProperty factoryProperty) throw(
+        ons::ONSClientException);
+
+        virtual ons::OrderConsumer *createOrderConsumer(ons::ONSFactoryProperty factoryProperty) throw(
+        ons::ONSClientException);
+
+        virtual ons::TransactionProducer *createTransactionProducer(
+                ons::ONSFactoryProperty factoryProperty,
+                ons::LocalTransactionChecker *checker) throw(ons::ONSClientException);
+
+        virtual ons::PullConsumer *
+        createPullConsumer(ons::ONSFactoryProperty factoryProperty) throw(ons::ONSClientException);
+
+        virtual ons::PushConsumer *
+        createPushConsumer(ons::ONSFactoryProperty factoryProperty) throw(ons::ONSClientException);
+    };
+
+    class ONSCLIENT_API ONSFactory {
+    public:
+        virtual ~ONSFactory();
+
+        static ons::ONSFactoryAPI *getInstance();
+
+    private:
+        ONSFactory();
+
+        static ons::ONSFactoryAPI *onsFactoryInstance;
+    };
 }  // namespace ons
 #endif
diff --git a/src/main/cpp/include/OrderAction.h b/src/main/cpp/include/OrderAction.h
index 297d285..6cfa574 100644
--- a/src/main/cpp/include/OrderAction.h
+++ b/src/main/cpp/include/OrderAction.h
@@ -1,11 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef __ORDERACTION_H__
 #define __ORDERACTION_H__
 
 // order consuming result
 enum OrderAction {
-  // consume success, application could continue to consume next message
-  Success,
-  // consume fail, suspends the current queue
-  Suspend,
+    // consume success, application could continue to consume next message
+            Success,
+    // consume fail, suspends the current queue
+            Suspend,
 };
 #endif
diff --git a/src/main/cpp/include/OrderConsumer.h b/src/main/cpp/include/OrderConsumer.h
index cce53b6..a3018bf 100644
--- a/src/main/cpp/include/OrderConsumer.h
+++ b/src/main/cpp/include/OrderConsumer.h
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef __ORDERCONSUMER_H__
 #define __ORDERCONSUMER_H__
 
@@ -5,15 +22,18 @@
 
 namespace ons {
 
-class  ONSCLIENT_API OrderConsumer {
- public:
-  OrderConsumer() {}
-  virtual ~OrderConsumer() {}
+    class ONSCLIENT_API OrderConsumer {
+    public:
+        OrderConsumer() {}
 
-  virtual void start() = 0;
-  virtual void shutdown() = 0;
-  virtual void subscribe(const char* topic, const char* subExpression,
-                         MessageOrderListener* listener) = 0;
-};
+        virtual ~OrderConsumer() {}
+
+        virtual void start() = 0;
+
+        virtual void shutdown() = 0;
+
+        virtual void subscribe(const char *topic, const char *subExpression,
+                               MessageOrderListener *listener) = 0;
+    };
 }
 #endif
diff --git a/src/main/cpp/include/OrderProducer.h b/src/main/cpp/include/OrderProducer.h
index 8924996..fe6c42d 100644
--- a/src/main/cpp/include/OrderProducer.h
+++ b/src/main/cpp/include/OrderProducer.h
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef __ORDERLYPRODUCER_H__
 #define __ORDERLYPRODUCER_H__
 
@@ -6,18 +23,20 @@
 
 namespace ons {
 
-class ONSCLIENT_API OrderProducer {
- public:
-  OrderProducer() {}
-  virtual ~OrderProducer() {}
+    class ONSCLIENT_API OrderProducer {
+    public:
+        OrderProducer() {}
 
-  // before send msg, start must be called to allocate resources.
-  virtual void start() = 0;
-  // before exit ons, shutdown must be called to release all resources allocated
-  // by ons internally.
-  virtual void shutdown() = 0;
+        virtual ~OrderProducer() {}
 
-  virtual SendResultONS send(Message& msg, std::string shardingKey) = 0;
-};
+        // before send msg, start must be called to allocate resources.
+        virtual void start() = 0;
+
+        // before exit ons, shutdown must be called to release all resources allocated
+        // by ons internally.
+        virtual void shutdown() = 0;
+
+        virtual SendResultONS send(Message &msg, std::string shardingKey) = 0;
+    };
 }
 #endif
diff --git a/src/main/cpp/include/Producer.h b/src/main/cpp/include/Producer.h
index 2daf759..f961c11 100644
--- a/src/main/cpp/include/Producer.h
+++ b/src/main/cpp/include/Producer.h
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef __PRODUCER_H__
 #define __PRODUCER_H__
 
@@ -9,27 +26,31 @@
 
 namespace ons {
 
-class  ONSCLIENT_API Producer {
- public:
-  Producer()  {}
-  virtual ~Producer() {}
+    class ONSCLIENT_API Producer {
+    public:
+        Producer() {}
 
-  // before send msg, start must be called to allocate resources.
-  virtual void start() = 0;
-  // before exit ons, shutdown must be called to release all resources allocated
-  // by ons internally.
-  virtual void shutdown() = 0;
-  // retry max 3 times if send failed. if no exception throwed, it sends
-  // success;
-  virtual ons::SendResultONS send(Message& msg) throw(ons::ONSClientException) = 0;
-  virtual ons::SendResultONS send(Message& msg,
-      const MessageQueueONS& mq) throw(ons::ONSClientException) = 0;
+        virtual ~Producer() {}
 
-  // async send
-  virtual void sendAsync(Message& msg, ons::SendCallbackONS* callback) throw(ons::ONSClientException) = 0;
+        // before send msg, start must be called to allocate resources.
+        virtual void start() = 0;
 
-  // oneway send
-  virtual void sendOneway(Message& msg) throw(ons::ONSClientException) = 0;
-};
+        // before exit ons, shutdown must be called to release all resources allocated
+        // by ons internally.
+        virtual void shutdown() = 0;
+
+        // retry max 3 times if send failed. if no exception throwed, it sends
+        // success;
+        virtual ons::SendResultONS send(Message &msg) throw(ons::ONSClientException) = 0;
+
+        virtual ons::SendResultONS send(Message &msg,
+                                        const MessageQueueONS &mq) throw(ons::ONSClientException) = 0;
+
+        // async send
+        virtual void sendAsync(Message &msg, ons::SendCallbackONS *callback) throw(ons::ONSClientException) = 0;
+
+        // oneway send
+        virtual void sendOneway(Message &msg) throw(ons::ONSClientException) = 0;
+    };
 }
 #endif
diff --git a/src/main/cpp/include/PullConsumer.h b/src/main/cpp/include/PullConsumer.h
index 5f94e5a..29d4011 100755
--- a/src/main/cpp/include/PullConsumer.h
+++ b/src/main/cpp/include/PullConsumer.h
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef __PULLCONSUMER_H__
 #define __PULLCONSUMER_H__
 
@@ -8,31 +25,42 @@
 
 namespace ons {
 
-class ONSFactoryProperty;
+    class ONSFactoryProperty;
 
-class ONSCLIENT_API PullConsumer {
- public:
-  PullConsumer() {}
-  virtual ~PullConsumer() {}
+    class ONSCLIENT_API PullConsumer {
+    public:
+        PullConsumer() {}
 
-  virtual void start() = 0;
-  virtual void shutdown() = 0;
-  virtual void fetchSubscribeMessageQueues(
-      const std::string& topic, std::vector<MessageQueueONS>& mqs) = 0;
-  virtual PullResultONS pull(const MessageQueueONS& mq,
-                             const std::string& subExpression, long long offset,
-                             int maxNums) = 0;
-  virtual long long searchOffset(const MessageQueueONS& mq, long long timestamp) = 0;
-  virtual long long maxOffset(const MessageQueueONS& mq) = 0;
-  virtual long long minOffset(const MessageQueueONS& mq) = 0;
-  virtual void updateConsumeOffset(const MessageQueueONS& mq,
-                                   long long offset) = 0;
-  virtual void removeConsumeOffset(const MessageQueueONS& mq) = 0;
-  virtual long long fetchConsumeOffset(const MessageQueueONS& mq,
-                                       bool fromStore) = 0;
-  virtual void persistConsumerOffset4PullConsumer(const MessageQueueONS& mq)
-      throw(ons::ONSClientException) = 0;
-};
+        virtual ~PullConsumer() {}
+
+        virtual void start() = 0;
+
+        virtual void shutdown() = 0;
+
+        virtual void fetchSubscribeMessageQueues(
+                const std::string &topic, std::vector<MessageQueueONS> &mqs) = 0;
+
+        virtual PullResultONS pull(const MessageQueueONS &mq,
+                                   const std::string &subExpression, long long offset,
+                                   int maxNums) = 0;
+
+        virtual long long searchOffset(const MessageQueueONS &mq, long long timestamp) = 0;
+
+        virtual long long maxOffset(const MessageQueueONS &mq) = 0;
+
+        virtual long long minOffset(const MessageQueueONS &mq) = 0;
+
+        virtual void updateConsumeOffset(const MessageQueueONS &mq,
+                                         long long offset) = 0;
+
+        virtual void removeConsumeOffset(const MessageQueueONS &mq) = 0;
+
+        virtual long long fetchConsumeOffset(const MessageQueueONS &mq,
+                                             bool fromStore) = 0;
+
+        virtual void persistConsumerOffset4PullConsumer(const MessageQueueONS &mq)
+        throw(ons::ONSClientException) = 0;
+    };
 
 }
 #endif
diff --git a/src/main/cpp/include/PullResultONS.h b/src/main/cpp/include/PullResultONS.h
index 2d939ea..6f3987c 100644
--- a/src/main/cpp/include/PullResultONS.h
+++ b/src/main/cpp/include/PullResultONS.h
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef __PULLRESULTONS_H__
 #define __PULLRESULTONS_H__
 
@@ -7,34 +24,34 @@
 
 namespace ons {
 
-enum ONSPullStatus {
-  ONS_FOUND,
-  ONS_NO_NEW_MSG,
-  ONS_NO_MATCHED_MSG,
-  ONS_OFFSET_ILLEGAL,
-  ONS_BROKER_TIMEOUT  // indicate pull request timeout or received NULL response
-};
+    enum ONSPullStatus {
+        ONS_FOUND,
+        ONS_NO_NEW_MSG,
+        ONS_NO_MATCHED_MSG,
+        ONS_OFFSET_ILLEGAL,
+        ONS_BROKER_TIMEOUT  // indicate pull request timeout or received NULL response
+    };
 
-class ONSCLIENT_API PullResultONS {
- public:
-  PullResultONS(ONSPullStatus status)
-      : pullStatus(status), nextBeginOffset(0), minOffset(0), maxOffset(0) {}
+    class ONSCLIENT_API PullResultONS {
+    public:
+        PullResultONS(ONSPullStatus status)
+                : pullStatus(status), nextBeginOffset(0), minOffset(0), maxOffset(0) {}
 
-  PullResultONS(ONSPullStatus pullStatus, long long nextBeginOffset,
-                long long minOffset, long long maxOffset)
-      : pullStatus(pullStatus),
-        nextBeginOffset(nextBeginOffset),
-        minOffset(minOffset),
-        maxOffset(maxOffset) {}
+        PullResultONS(ONSPullStatus pullStatus, long long nextBeginOffset,
+                      long long minOffset, long long maxOffset)
+                : pullStatus(pullStatus),
+                  nextBeginOffset(nextBeginOffset),
+                  minOffset(minOffset),
+                  maxOffset(maxOffset) {}
 
-  virtual ~PullResultONS() {}
+        virtual ~PullResultONS() {}
 
- public:
-  ONSPullStatus pullStatus;
-  long long nextBeginOffset;
-  long long minOffset;
-  long long maxOffset;
-  std::vector<Message> msgFoundList;
-};
+    public:
+        ONSPullStatus pullStatus;
+        long long nextBeginOffset;
+        long long minOffset;
+        long long maxOffset;
+        std::vector<Message> msgFoundList;
+    };
 }
 #endif
diff --git a/src/main/cpp/include/PushConsumer.h b/src/main/cpp/include/PushConsumer.h
index 925858c..2356ec3 100644
--- a/src/main/cpp/include/PushConsumer.h
+++ b/src/main/cpp/include/PushConsumer.h
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef __PUSHCONSUMER_H__
 #define __PUSHCONSUMER_H__
 
@@ -5,16 +22,19 @@
 
 namespace ons {
 
-class  ONSCLIENT_API PushConsumer {
- public:
-  PushConsumer() {}
-  virtual ~PushConsumer() {}
+    class ONSCLIENT_API PushConsumer {
+    public:
+        PushConsumer() {}
 
-  virtual void start() = 0;
-  virtual void shutdown() = 0;
-  virtual void subscribe(const char* topic, const char* subExpression,
-                         MessageListener* listener) = 0;
-  // virtual void setNamesrvAddr(const std::string& nameSrvAddr) = 0;
-};
+        virtual ~PushConsumer() {}
+
+        virtual void start() = 0;
+
+        virtual void shutdown() = 0;
+
+        virtual void subscribe(const char *topic, const char *subExpression,
+                               MessageListener *listener) = 0;
+        // virtual void setNamesrvAddr(const std::string& nameSrvAddr) = 0;
+    };
 }
 #endif
diff --git a/src/main/cpp/include/SendResultONS.h b/src/main/cpp/include/SendResultONS.h
index d21ec12..24993ec 100644
--- a/src/main/cpp/include/SendResultONS.h
+++ b/src/main/cpp/include/SendResultONS.h
@@ -1,19 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef __SENDRESULTONS_H__
 #define __SENDRESULTONS_H__
+
 #include <string>
 #include "ONSClient.h"
 
 namespace ons {
 
-class  ONSCLIENT_API SendResultONS {
- public:
-  SendResultONS();
-  virtual ~SendResultONS();
-  void setMessageId(const std::string& msgId);
-	const char* getMessageId() const;
+    class ONSCLIENT_API SendResultONS {
+    public:
+        SendResultONS();
 
- private:
-  std::string messageId;
-};
+        virtual ~SendResultONS();
+
+        void setMessageId(const std::string &msgId);
+
+        const char *getMessageId() const;
+
+    private:
+        std::string messageId;
+    };
 }
 #endif
diff --git a/src/main/cpp/include/TransactionProducer.h b/src/main/cpp/include/TransactionProducer.h
index bceadb0..1fdb27b 100644
--- a/src/main/cpp/include/TransactionProducer.h
+++ b/src/main/cpp/include/TransactionProducer.h
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef __TRANSACTIONPRODUCER_H__
 #define __TRANSACTIONPRODUCER_H__
 
diff --git a/src/main/cpp/include/TransactionStatus.h b/src/main/cpp/include/TransactionStatus.h
index c47cd99..392178c 100644
--- a/src/main/cpp/include/TransactionStatus.h
+++ b/src/main/cpp/include/TransactionStatus.h
@@ -1,13 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef __TRANSACTIONSTATUS_H__
 #define __TRANSACTIONSTATUS_H__
 
 namespace ons {
 
-enum TransactionStatus {
-  CommitTransaction = 0,
-  RollbackTransaction = 1,
-  Unknow = 2,
-};
+    enum TransactionStatus {
+        CommitTransaction = 0,
+        RollbackTransaction = 1,
+        Unknow = 2,
+    };
 }
 
 #endif
diff --git a/src/main/cpp/sdk/ClientBase.cpp b/src/main/cpp/sdk/ClientBase.cpp
index a99b9a2..180e2bf 100644
--- a/src/main/cpp/sdk/ClientBase.cpp
+++ b/src/main/cpp/sdk/ClientBase.cpp
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #include "ClientBase.h"
 #include "UtilAll.h"
 
diff --git a/src/main/cpp/sdk/ClientBase.h b/src/main/cpp/sdk/ClientBase.h
index 3dfd83b..5e0de04 100644
--- a/src/main/cpp/sdk/ClientBase.h
+++ b/src/main/cpp/sdk/ClientBase.h
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef MQ_CLIENT_BASE_H
 #define MQ_CLIENT_BASE_H
 
diff --git a/src/main/cpp/sdk/ConsumerImpl.cpp b/src/main/cpp/sdk/ConsumerImpl.cpp
index 1bf9459..286e96d 100644
--- a/src/main/cpp/sdk/ConsumerImpl.cpp
+++ b/src/main/cpp/sdk/ConsumerImpl.cpp
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #include "ConsumerImpl.h"
 #include "common/Logger.h"
 #include "common/UtilAll.h"
diff --git a/src/main/cpp/sdk/ConsumerImpl.h b/src/main/cpp/sdk/ConsumerImpl.h
index 550adbc..3648946 100644
--- a/src/main/cpp/sdk/ConsumerImpl.h
+++ b/src/main/cpp/sdk/ConsumerImpl.h
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef MQ_CONSUMER_IMPL_H
 #define MQ_CONSUMER_IMPL_H
 
@@ -8,15 +25,20 @@
 
 namespace ons {
 
-class ConsumerImpl : public PushConsumer, public ClientBase {
- public:
-  ConsumerImpl();
-  ConsumerImpl(const ons::ONSFactoryProperty &factoryProperty) throw(ons::ONSClientException);
-  virtual ~ConsumerImpl();
-  void start();
-  void shutdown();
-  void subscribe(const char* topic, const char* subExpression, ons::MessageListener* listener);
-};
+    class ConsumerImpl : public PushConsumer, public ClientBase {
+    public:
+        ConsumerImpl();
+
+        ConsumerImpl(const ons::ONSFactoryProperty &factoryProperty) throw(ons::ONSClientException);
+
+        virtual ~ConsumerImpl();
+
+        void start();
+
+        void shutdown();
+
+        void subscribe(const char *topic, const char *subExpression, ons::MessageListener *listener);
+    };
 
 }  // namespace ons
 
diff --git a/src/main/cpp/sdk/Message.cpp b/src/main/cpp/sdk/Message.cpp
index 84bff8c..167282f 100644
--- a/src/main/cpp/sdk/Message.cpp
+++ b/src/main/cpp/sdk/Message.cpp
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #include "Message.h"
 #include "ONSClientException.h"
 #include "common/UtilAll.h"
diff --git a/src/main/cpp/sdk/MessageQueueONS.cpp b/src/main/cpp/sdk/MessageQueueONS.cpp
index 76c6147..2d9a108 100644
--- a/src/main/cpp/sdk/MessageQueueONS.cpp
+++ b/src/main/cpp/sdk/MessageQueueONS.cpp
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #include "MessageQueueONS.h"
 #include "ONSClientException.h"
 #include "UtilAll.h"
diff --git a/src/main/cpp/sdk/ONSClientException.cpp b/src/main/cpp/sdk/ONSClientException.cpp
index af2d32d..b5f8cd5 100644
--- a/src/main/cpp/sdk/ONSClientException.cpp
+++ b/src/main/cpp/sdk/ONSClientException.cpp
@@ -1,14 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #include "ONSClientException.h"
 #include <string>
 
 namespace ons {
 
     ONSClientException::ONSClientException() throw() {}
+
     ONSClientException::~ONSClientException() throw() {}
+
     ONSClientException::ONSClientException(std::string msg, int error) throw()
             : m_msg(msg), m_error(error) {}
 
-    const char* ONSClientException::what() const throw() { return m_msg.c_str(); }
-    const char* ONSClientException::GetMsg() const throw() { return m_msg.c_str(); }
+    const char *ONSClientException::what() const throw() { return m_msg.c_str(); }
+
+    const char *ONSClientException::GetMsg() const throw() { return m_msg.c_str(); }
+
     int ONSClientException::GetError() const throw() { return m_error; }
 }
diff --git a/src/main/cpp/sdk/ONSFactory.cpp b/src/main/cpp/sdk/ONSFactory.cpp
index d8af628..662df85 100644
--- a/src/main/cpp/sdk/ONSFactory.cpp
+++ b/src/main/cpp/sdk/ONSFactory.cpp
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #include "rocketmq.h"
 #include "ONSFactory.h"
 #include "ProducerImpl.h"
@@ -171,6 +188,7 @@
                 m_onsFactoryProperties.find(ConsumerId);
         return (it == m_onsFactoryProperties.end()) ? NULL_STRING : (*it).second.c_str();
     }
+
     const char *ONSFactoryProperty::getGroupId() const {
         map<string, string>::const_iterator it =
                 m_onsFactoryProperties.find(GroupId);
@@ -291,13 +309,13 @@
                 m_onsFactoryProperties.find(ConsumerInstanceName);
         return (it == m_onsFactoryProperties.end()) ? NULL_STRING : (*it).second.c_str();
     }
+
     const char *ONSFactoryProperty::getInstanceId() const {
         map<string, string>::const_iterator it =
                 m_onsFactoryProperties.find(InstanceId);
         return (it == m_onsFactoryProperties.end()) ? NULL_STRING : (*it).second.c_str();
     }
 
-
     class ONSFactoryInstance : public ONSFactoryAPI {
     public:
 
@@ -341,13 +359,13 @@
 using namespace ons;
 
 int validateProperty(ONSFactoryProperty factoryProperty) throw(ons::ONSClientException) {
-    if (NULL_STRING == factoryProperty.getAccessKey()){
+    if (NULL_STRING == factoryProperty.getAccessKey()) {
         throw ONSClientException(
                 FAQ::errorMessage("AccessKey must be set, please set it.",
                                   FAQ::CLIENT_CHECK_MSG_EXCEPTION),
                 -1);
     }
-    if (NULL_STRING == factoryProperty.getSecretKey()){
+    if (NULL_STRING == factoryProperty.getSecretKey()) {
         throw ONSClientException(
                 FAQ::errorMessage("SecretKey must be set, please set it.",
                                   FAQ::CLIENT_CHECK_MSG_EXCEPTION),
@@ -384,11 +402,11 @@
 }
 
 Producer *ONSFactoryInstance::createProducer(ons::ONSFactoryProperty factoryProperty) throw(ONSClientException) {
-    if (INNER == factoryProperty.getOnsChannel()){
+    if (INNER == factoryProperty.getOnsChannel()) {
         factoryProperty.setOnsTraceSwitch(false);
-        factoryProperty.setFactoryProperty(ONSFactoryProperty::AccessKey,"DefaultKey");
-        factoryProperty.setFactoryProperty(ONSFactoryProperty::SecretKey,"DefaultKey");
-        factoryProperty.setFactoryProperty(ONSFactoryProperty::NAMESRV_ADDR,"LocalDefault");
+        factoryProperty.setFactoryProperty(ONSFactoryProperty::AccessKey, "DefaultKey");
+        factoryProperty.setFactoryProperty(ONSFactoryProperty::SecretKey, "DefaultKey");
+        factoryProperty.setFactoryProperty(ONSFactoryProperty::NAMESRV_ADDR, "LocalDefault");
     }
     validateProperty(factoryProperty);
     ProducerImpl *producerImpl = new ProducerImpl(factoryProperty);
@@ -398,11 +416,11 @@
 
 OrderProducer *ONSFactoryInstance::createOrderProducer(ons::ONSFactoryProperty factoryProperty) throw(
 ONSClientException) {
-    if (INNER == factoryProperty.getOnsChannel()){
+    if (INNER == factoryProperty.getOnsChannel()) {
         factoryProperty.setOnsTraceSwitch(false);
-        factoryProperty.setFactoryProperty(ONSFactoryProperty::AccessKey,"DefaultKey");
-        factoryProperty.setFactoryProperty(ONSFactoryProperty::SecretKey,"DefaultKey");
-        factoryProperty.setFactoryProperty(ONSFactoryProperty::NAMESRV_ADDR,"LocalDefault");
+        factoryProperty.setFactoryProperty(ONSFactoryProperty::AccessKey, "DefaultKey");
+        factoryProperty.setFactoryProperty(ONSFactoryProperty::SecretKey, "DefaultKey");
+        factoryProperty.setFactoryProperty(ONSFactoryProperty::NAMESRV_ADDR, "LocalDefault");
     }
     validateProperty(factoryProperty);
     OrderProducerImpl *orderProducerImpl = new OrderProducerImpl(factoryProperty);
@@ -413,11 +431,11 @@
 
 OrderConsumer *ONSFactoryInstance::createOrderConsumer(ons::ONSFactoryProperty factoryProperty) throw(
 ONSClientException) {
-    if (INNER == factoryProperty.getOnsChannel()){
+    if (INNER == factoryProperty.getOnsChannel()) {
         factoryProperty.setOnsTraceSwitch(false);
-        factoryProperty.setFactoryProperty(ONSFactoryProperty::AccessKey,"DefaultKey");
-        factoryProperty.setFactoryProperty(ONSFactoryProperty::SecretKey,"DefaultKey");
-        factoryProperty.setFactoryProperty(ONSFactoryProperty::NAMESRV_ADDR,"LocalDefault");
+        factoryProperty.setFactoryProperty(ONSFactoryProperty::AccessKey, "DefaultKey");
+        factoryProperty.setFactoryProperty(ONSFactoryProperty::SecretKey, "DefaultKey");
+        factoryProperty.setFactoryProperty(ONSFactoryProperty::NAMESRV_ADDR, "LocalDefault");
     }
     validateProperty(factoryProperty);
     OrderConsumerImpl *consumer = new OrderConsumerImpl(factoryProperty);
@@ -428,11 +446,11 @@
 TransactionProducer *ONSFactoryInstance::createTransactionProducer(
         ons::ONSFactoryProperty factoryProperty,
         ons::LocalTransactionChecker *checker) throw(ons::ONSClientException) {
-    if (INNER == factoryProperty.getOnsChannel()){
+    if (INNER == factoryProperty.getOnsChannel()) {
         factoryProperty.setOnsTraceSwitch(false);
-        factoryProperty.setFactoryProperty(ONSFactoryProperty::AccessKey,"DefaultKey");
-        factoryProperty.setFactoryProperty(ONSFactoryProperty::SecretKey,"DefaultKey");
-        factoryProperty.setFactoryProperty(ONSFactoryProperty::NAMESRV_ADDR,"LocalDefault");
+        factoryProperty.setFactoryProperty(ONSFactoryProperty::AccessKey, "DefaultKey");
+        factoryProperty.setFactoryProperty(ONSFactoryProperty::SecretKey, "DefaultKey");
+        factoryProperty.setFactoryProperty(ONSFactoryProperty::NAMESRV_ADDR, "LocalDefault");
     }
     validateProperty(factoryProperty);
     if (checker == NULL) {
@@ -452,11 +470,11 @@
 
 PushConsumer *
 ONSFactoryInstance::createPushConsumer(ons::ONSFactoryProperty factoryProperty) throw(ons::ONSClientException) {
-    if (INNER == factoryProperty.getOnsChannel()){
+    if (INNER == factoryProperty.getOnsChannel()) {
         factoryProperty.setOnsTraceSwitch(false);
-        factoryProperty.setFactoryProperty(ONSFactoryProperty::AccessKey,"DefaultKey");
-        factoryProperty.setFactoryProperty(ONSFactoryProperty::SecretKey,"DefaultKey");
-        factoryProperty.setFactoryProperty(ONSFactoryProperty::NAMESRV_ADDR,"LocalDefault");
+        factoryProperty.setFactoryProperty(ONSFactoryProperty::AccessKey, "DefaultKey");
+        factoryProperty.setFactoryProperty(ONSFactoryProperty::SecretKey, "DefaultKey");
+        factoryProperty.setFactoryProperty(ONSFactoryProperty::NAMESRV_ADDR, "LocalDefault");
     }
     validateProperty(factoryProperty);
     ConsumerImpl *consumer = new ConsumerImpl(factoryProperty);
diff --git a/src/main/cpp/sdk/OrderConsumerImpl.cpp b/src/main/cpp/sdk/OrderConsumerImpl.cpp
index 8472895..496f263 100644
--- a/src/main/cpp/sdk/OrderConsumerImpl.cpp
+++ b/src/main/cpp/sdk/OrderConsumerImpl.cpp
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #include "OrderConsumerImpl.h"
 #include "rocketmq.h"
 #include "rocketmq-ons-cpp-full.h"
@@ -39,14 +56,14 @@
 #ifdef __cplusplus
 extern "C" {
 #endif
-int order_consumer_on_message(void *thread, void *opaque, char *topic, char *user_props, char *sys_props, char* body,
+int order_consumer_on_message(void *thread, void *opaque, char *topic, char *user_props, char *sys_props, char *body,
                               int body_len) {
     ons::MessageOrderListener *listener = reinterpret_cast<ons::MessageOrderListener *>(opaque);
     ons::Message message_;
     message_.setTopic(topic);
     ons::UtilAll::fill_message_props(message_, std::string(user_props), false);
     ons::UtilAll::fill_message_props(message_, std::string(sys_props), true);
-    message_.setBody(reinterpret_cast<unsigned char*>(body), body_len);
+    message_.setBody(reinterpret_cast<unsigned char *>(body), body_len);
     ons::ConsumeOrderContext ctx_;
     OrderAction action = listener->consume(message_, ctx_);
     switch (action) {
@@ -54,7 +71,7 @@
             return 0;
         case Suspend:
             spdlog::info("Consume Order Message failed, Topic:{}, MessageId:{}, RecosumeTimes:{}",
-                         message_.getTopic(),message_.getMsgID(),message_.getReconsumeTimes());
+                         message_.getTopic(), message_.getMsgID(), message_.getReconsumeTimes());
             return 1;
         default:
             return 1;
diff --git a/src/main/cpp/sdk/OrderConsumerImpl.h b/src/main/cpp/sdk/OrderConsumerImpl.h
index 32aa0bc..e6169bf 100644
--- a/src/main/cpp/sdk/OrderConsumerImpl.h
+++ b/src/main/cpp/sdk/OrderConsumerImpl.h
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef MQ_ORDER_CONSUMER_IMPL_H
 #define MQ_ORDER_CONSUMER_IMPL_H
 
@@ -9,15 +26,18 @@
 #include "ClientBase.h"
 
 namespace ons {
-class OrderConsumerImpl : public ons::OrderConsumer, ClientBase {
+    class OrderConsumerImpl : public ons::OrderConsumer, ClientBase {
     public:
-    OrderConsumerImpl(const ons::ONSFactoryProperty &property) throw (ons::ONSClientException);
-    virtual ~OrderConsumerImpl();
+        OrderConsumerImpl(const ons::ONSFactoryProperty &property) throw(ons::ONSClientException);
 
-    void start();
-    void shutdown();
-    void subscribe(const char* topic, const char* subExpression,
-                           ons::MessageOrderListener* listener);
+        virtual ~OrderConsumerImpl();
+
+        void start();
+
+        void shutdown();
+
+        void subscribe(const char *topic, const char *subExpression,
+                       ons::MessageOrderListener *listener);
     };
 }
 
diff --git a/src/main/cpp/sdk/OrderProducerImpl.cpp b/src/main/cpp/sdk/OrderProducerImpl.cpp
index 4cb5ff5..2e78f6f 100644
--- a/src/main/cpp/sdk/OrderProducerImpl.cpp
+++ b/src/main/cpp/sdk/OrderProducerImpl.cpp
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #include "OrderProducerImpl.h"
 #include "rocketmq.h"
 #include "rocketmq-ons-cpp-full.h"
@@ -42,7 +59,7 @@
     SendResultWrapper wrapper(sendResult);
     graal_isolatethread_t *thread_;
     ThreadAttachment attachment(&thread_);
-    send_order_message(thread_, instanceIndex_, &m, &sendResult,(char*)shardingKey.c_str());
+    send_order_message(thread_, instanceIndex_, &m, &sendResult, (char *) shardingKey.c_str());
     if (sendResult.error_no) {
         ONSClientException clientException(std::string(sendResult.error_msg), sendResult.error_no);
         throw clientException;
diff --git a/src/main/cpp/sdk/OrderProducerImpl.h b/src/main/cpp/sdk/OrderProducerImpl.h
index 31acbcb..f930696 100644
--- a/src/main/cpp/sdk/OrderProducerImpl.h
+++ b/src/main/cpp/sdk/OrderProducerImpl.h
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef MQ_ORDERPRODUCERIMPL_H
 #define MQ_ORDERPRODUCERIMPL_H
 
@@ -18,7 +35,7 @@
 
         void shutdown();
 
-        SendResultONS send(Message &msg,std::string ShardingKey) throw(ons::ONSClientException);
+        SendResultONS send(Message &msg, std::string ShardingKey) throw(ons::ONSClientException);
     };
 }  // namespace ons
 
diff --git a/src/main/cpp/sdk/ProducerImpl.cpp b/src/main/cpp/sdk/ProducerImpl.cpp
index 1ce810a..cd4085a 100644
--- a/src/main/cpp/sdk/ProducerImpl.cpp
+++ b/src/main/cpp/sdk/ProducerImpl.cpp
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #include "ProducerImpl.h"
 #include "rocketmq.h"
 #include "rocketmq-ons-cpp-full.h"
diff --git a/src/main/cpp/sdk/ProducerImpl.h b/src/main/cpp/sdk/ProducerImpl.h
index 0fa66a5..6fd1295 100644
--- a/src/main/cpp/sdk/ProducerImpl.h
+++ b/src/main/cpp/sdk/ProducerImpl.h
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef MQ_PRODUCER_IMPL_H
 #define MQ_PRODUCER_IMPL_H
 
diff --git a/src/main/cpp/sdk/RocketMQClient.h b/src/main/cpp/sdk/RocketMQClient.h
index 8032b71..93df96e 100644
--- a/src/main/cpp/sdk/RocketMQClient.h
+++ b/src/main/cpp/sdk/RocketMQClient.h
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef __ROCKETMQCLIENT_H__
 #define  __ROCKETMQCLIENT_H__
 
diff --git a/src/main/cpp/sdk/SendResultONS.cpp b/src/main/cpp/sdk/SendResultONS.cpp
index 51824ff..6f5b940 100644
--- a/src/main/cpp/sdk/SendResultONS.cpp
+++ b/src/main/cpp/sdk/SendResultONS.cpp
@@ -1,3 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 
 #include "SendResultONS.h"
 #include <string>
diff --git a/src/main/cpp/sdk/TransactionProducerImpl.cpp b/src/main/cpp/sdk/TransactionProducerImpl.cpp
index 6f1051d..31f8db8 100644
--- a/src/main/cpp/sdk/TransactionProducerImpl.cpp
+++ b/src/main/cpp/sdk/TransactionProducerImpl.cpp
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #include "TransactionProducerImpl.h"
 #include "rocketmq-ons-cpp-full.h"
 #include "Logger.h"
diff --git a/src/main/cpp/sdk/TransactionProducerImpl.h b/src/main/cpp/sdk/TransactionProducerImpl.h
index 221fa42..39bd529 100644
--- a/src/main/cpp/sdk/TransactionProducerImpl.h
+++ b/src/main/cpp/sdk/TransactionProducerImpl.h
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef __TRANSACTIONPRODUCERIMPL_H__
 #define __TRANSACTIONPRODUCERIMPL_H__
 
diff --git a/src/main/cpp/sdk/common/Common.h b/src/main/cpp/sdk/common/Common.h
index a813785..278b2e8 100644
--- a/src/main/cpp/sdk/common/Common.h
+++ b/src/main/cpp/sdk/common/Common.h
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef __SDK_COMMON_H
 #define __SDK_COMMON_H
 
diff --git a/src/main/cpp/sdk/common/Logger.cpp b/src/main/cpp/sdk/common/Logger.cpp
index 2f5e939..0df9643 100644
--- a/src/main/cpp/sdk/common/Logger.cpp
+++ b/src/main/cpp/sdk/common/Logger.cpp
@@ -1,5 +1,21 @@
-#include"Logger.h"
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 
+#include"Logger.h"
 #include <sys/stat.h>
 
 namespace rocketmq {
diff --git a/src/main/cpp/sdk/common/Logger.h b/src/main/cpp/sdk/common/Logger.h
index d4fbf0d..2d90237 100644
--- a/src/main/cpp/sdk/common/Logger.h
+++ b/src/main/cpp/sdk/common/Logger.h
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef MQ_LOGGER_H
 #define MQ_LOGGER_H
 
diff --git a/src/main/cpp/sdk/common/ONSClientAbstract.cpp b/src/main/cpp/sdk/common/ONSClientAbstract.cpp
index 852050a..548757c 100644
--- a/src/main/cpp/sdk/common/ONSClientAbstract.cpp
+++ b/src/main/cpp/sdk/common/ONSClientAbstract.cpp
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #include"ONSClientAbstract.h"
 #include<string>
 
diff --git a/src/main/cpp/sdk/common/ONSClientAbstract.h b/src/main/cpp/sdk/common/ONSClientAbstract.h
index 10e5e3c..50a1161 100644
--- a/src/main/cpp/sdk/common/ONSClientAbstract.h
+++ b/src/main/cpp/sdk/common/ONSClientAbstract.h
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef MQ_ONSCLIENTABSTRACT_H
 #define MQ_ONSCLIENTABSTRACT_H
 
diff --git a/src/main/cpp/sdk/common/UtilAll.cpp b/src/main/cpp/sdk/common/UtilAll.cpp
index 54d41c9..e6e9639 100644
--- a/src/main/cpp/sdk/common/UtilAll.cpp
+++ b/src/main/cpp/sdk/common/UtilAll.cpp
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #include "UtilAll.h"
 #include "rapidjson/document.h"
 #include "rapidjson/writer.h"
diff --git a/src/main/cpp/sdk/common/UtilAll.h b/src/main/cpp/sdk/common/UtilAll.h
index ce16a79..45baebe 100644
--- a/src/main/cpp/sdk/common/UtilAll.h
+++ b/src/main/cpp/sdk/common/UtilAll.h
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef MQ_UTILALL_H
 #define MQ_UTILALL_H
 
@@ -39,8 +56,8 @@
 
         static std::string to_string(const std::map<std::string, std::string> &prop);
 
-        static graal_isolate_t* get_isolate() {
-            static graal_isolate_t* singleton = nullptr;
+        static graal_isolate_t *get_isolate() {
+            static graal_isolate_t *singleton = nullptr;
             if (nullptr == singleton) {
                 if (graal_create_isolate(nullptr, &singleton, nullptr)) {
                     spdlog::error("Failed to create graal isolate");
@@ -103,7 +120,6 @@
         }
     };
 
-
     class MessageConverter {
     public:
         MessageConverter(message &m, const Message &msg) : m_(m), msg_(msg) {
@@ -138,7 +154,7 @@
 
     class ThreadAttachment {
     public:
-        ThreadAttachment(graal_isolatethread_t **thread) throw (ons::ONSClientException) {
+        ThreadAttachment(graal_isolatethread_t **thread) throw(ons::ONSClientException) {
             std::stringstream ss;
             ss << std::this_thread::get_id();
 
@@ -182,7 +198,7 @@
 
     class SendResultWrapper {
     public:
-        SendResultWrapper(send_result &sr) : sr_(sr){
+        SendResultWrapper(send_result &sr) : sr_(sr) {
             UtilAll::init_send_result(sr);
             sr_ = sr;
         }