diff --git a/servicegateway/deployment/pom.xml b/servicegateway/deployment/pom.xml
index 88d6f4e..2f025e9 100644
--- a/servicegateway/deployment/pom.xml
+++ b/servicegateway/deployment/pom.xml
@@ -18,22 +18,97 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.openo.gso.gui</groupId>
-        <artifactId>servicegateway</artifactId>
+        <artifactId>service-gateway-root</artifactId>
         <version>1.0.0-SNAPSHOT</version>
     </parent>
 
-    <artifactId>deployment</artifactId>
-    <name>deployment</name>
-    <packaging>jar</packaging>
+    <artifactId>service-gateway-deployment</artifactId>
+    <name>ServiceGatewayRootDeployment</name>
+    <packaging>pom</packaging>
 
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     </properties>
-    <dependencies>
-        <dependency>
-            <groupId>org.openo.common-services.common-utilities</groupId>
-            <artifactId>commonlib-cbb</artifactId>
-            <version>1.0.0-SNAPSHOT</version>
-        </dependency>
-    </dependencies>
+
+    <build>
+        <pluginManagement>
+            <plugins>
+                <plugin>
+                    <groupId>org.codehaus.gmaven</groupId>
+                    <artifactId>groovy-maven-plugin</artifactId>
+                    <version>2.0</version>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+        <plugins>
+            <plugin>
+                <groupId>org.codehaus.gmaven</groupId>
+                <artifactId>gmaven-plugin</artifactId>
+                <version>1.5</version>
+                <executions>
+                    <execution>
+                        <id>ServiceGateway package</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>execute</goal>
+                        </goals>
+                        <configuration>
+                            <source>
+                                System.out.println("******** Going to make release zip ********")
+
+                                deployFolder = "${project.build.directory}/deployoutput"
+                                deployUnzip = "${project.build.directory}/deployunzip"
+                                outfileName = "ServiceGateway-.${project.version}.zip"
+
+                                ant.delete(dir: "${deployFolder}")
+                                ant.mkdir(dir: "${deployFolder}")
+
+                                ant.delete(dir: "${deployUnzip}")
+                                ant.mkdir(dir: "${deployUnzip}")
+
+                                ant.mkdir(dir: "${deployUnzip}/webapps/ROOT")
+                                ant.mkdir(dir: "${deployUnzip}/webapps/openoui#servicegateway#v1")
+
+                                ant.copy(todir: "${deployUnzip}") {
+                                fileset(dir: "${basedir}/src/main/release"){
+                                exclude(name: "**/.gitignore")
+                                }
+                                }
+
+                                ant.copy(todir: "${deployUnzip}/webapps/ROOT") {
+                                fileset(dir: "${project.build.directory}/../../service/target/ROOT")
+                                }
+
+                                ant.zip(destfile: "${deployFolder}/${outfileName}") {
+                                fileset(dir: "${deployUnzip}")
+                                }
+                                System.out.println("******** completed. ************")
+                            </source>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+             <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>build-helper-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>attach-artifacts</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>attach-artifact</goal>
+                        </goals>
+                        <configuration>
+                            <artifacts>
+                                <artifact>
+                                    <file>${project.build.directory}/deployoutput/ServiceGateway-.${project.version}.zip</file>
+                                    <type>zip</type>
+                                </artifact>
+                            </artifacts>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
 </project>
diff --git a/servicegateway/deployment/src/main/release/bin/start.sh b/servicegateway/deployment/src/main/release/bin/start.sh
index 235b319..521ef3b 100644
--- a/servicegateway/deployment/src/main/release/bin/start.sh
+++ b/servicegateway/deployment/src/main/release/bin/start.sh
@@ -14,6 +14,8 @@
 # limitations under the License.
 #*******************************************************************************
 #!/bin/bash
+mkdir logs
+mkdir temp
 cd ..
 export CATALINA_BASE=$(cd `dirname $0`; pwd)
-catalina.sh start
\ No newline at end of file
+$CATALINA_HOME/bin/catalina.sh start
\ No newline at end of file
diff --git a/servicegateway/deployment/src/main/release/bin/stop.sh b/servicegateway/deployment/src/main/release/bin/stop.sh
index bcc6043..365da00 100644
--- a/servicegateway/deployment/src/main/release/bin/stop.sh
+++ b/servicegateway/deployment/src/main/release/bin/stop.sh
@@ -16,4 +16,4 @@
 #!/bin/bash
 cd ..
 export CATALINA_BASE=$(cd `dirname $0`; pwd)
-catalina.sh stop
\ No newline at end of file
+$CATALINA_HOME/bin/catalina.sh stop
\ No newline at end of file
diff --git a/servicegateway/pom.xml b/servicegateway/pom.xml
index 3836dd5..4b2ed45 100644
--- a/servicegateway/pom.xml
+++ b/servicegateway/pom.xml
@@ -21,271 +21,129 @@
       <artifactId>gso-gui</artifactId>
       <version>1.0.0-SNAPSHOT</version>
     </parent>
-    <artifactId>servicegateway</artifactId>
-    <name>servicegateway</name>
+    <groupId>org.openo.gso.gui</groupId>
+    <artifactId>service-gateway-root</artifactId>
+    <version>1.0.0-SNAPSHOT</version>
+    <name>ServiceGatewayRoot</name>
     <packaging>pom</packaging>
 
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <cxf.version>3.1.6</cxf.version>
     </properties>
     <modules>
         <module>service</module>
         <module>deployment</module>
     </modules>
+    <scm>
+        <tag>HEAD</tag>
+    </scm>
+        <dependencies>
+        <dependency>
+            <groupId>org.openo.common-services.common-utilities</groupId>
+            <artifactId>commonlib-cbb</artifactId>
+            <version>1.0.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openo.common-services.common-utilities</groupId>
+            <artifactId>commonlib-restclient</artifactId>
+            <version>1.0.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cxf</groupId>
+            <artifactId>cxf-rt-frontend-jaxrs</artifactId>
+            <version>3.1.6</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-httpclient</groupId>
+            <artifactId>commons-httpclient</artifactId>
+            <version>3.1</version>
+        </dependency>
 
-    <profiles>
-        <profile>
-            <activation>
-                <file>
-                    <exists>src/main/release/pub</exists>
-                </file>
-            </activation>
-            <build>
-                <plugins>
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-compiler-plugin</artifactId>
-                        <version>3.3</version>
-                        <configuration>
-                            <source>1.8</source>
-                            <target>1.8</target>
-                        </configuration>
-                    </plugin>
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-dependency-plugin</artifactId>
-                        <version>2.10</version>
-                        <executions>
-                            <execution>
-                                <id>copy-dependencies</id>
-                                <phase>package</phase>
-                                <goals>
-                                    <goal>copy-dependencies</goal>
-                                </goals>
-                                <configuration>
-                                    <outputDirectory>${project.build.directory}/deploydependencis</outputDirectory>
-                                    <overWriteReleases>false</overWriteReleases>
-                                    <overWriteSnapshots>false</overWriteSnapshots>
-                                    <overWriteIfNewer>true</overWriteIfNewer>
-                                    <includeScope>compile</includeScope>
-                                    <includeScope>runtime</includeScope>
-                                </configuration>
-                            </execution>
-                        </executions>
-                    </plugin>
-                    <plugin>
-                        <groupId>org.codehaus.gmaven</groupId>
-                        <artifactId>gmaven-plugin</artifactId>
-                        <version>1.5</version>
-                        <executions>
-                            <execution>
-                                <id>make new jar</id>
-                                <phase>package</phase>
-                                <goals>
-                                    <goal>execute</goal>
-                                </goals>
-                                <configuration>
-                                    <source>
-                                        private String getWebContextFromManifest(File warFile) {
-                                        String context = null;
-                                        java.util.jar.JarFile jarFile = null;
-                                        try {
-                                        jarFile = new java.util.jar.JarFile(warFile);
-                                        context =
-                                        jarFile.getManifest().getMainAttributes().getValue("WebContext-Name");
-                                        context = context == null ? "ROOT" : context;
-                                        context = context.replace("\", "/");
-                                        context = context.replaceAll("[/]{2,}", "/");
-                                        context = context.endsWith("/") ? context.substring(0, context.length() - 1) : context;
-                                        context = context.startsWith("/") ? context.substring(1, context.length()) : context;
-                                        context = context.replaceAll("/", "#");
-                                        return context;
-                                        } catch (Exception e) {
-                                        System.out.println("-------------------context eror: ",e);
-                                        context = "ROOT";
-                                        } finally {
-                                        if (jarFile != null) {
-                                        jarFile.close();
-                                        }
-                                        }
-                                        System.out.println("-------------------context is: " + context);
-                                        return context;
-                                        }
-
-                                        System.out.println("------------------------------1")
-                                        List contexts=new ArrayList();
-                                        deploydependencisdir = "${project.build.directory}/deploydependencis";
-                                        unzipdir =
-                                        "${project.build.directory}/deployunzip";
-                                        outputdir =
-                                        "${project.build.directory}/deployoutput";
-                                        resourcesdir =
-                                        "${project.basedir}/src/main/release";
-                                        jarsdir = "${unzipdir}/lib";
-                                        toolpath =
-                                        "${project.build.directory}/deployoutputjars";
-
-                                        System.out.println("------------------------------2")
-                                        ant = new AntBuilder()
-                                        ant.delete(dir: "${unzipdir}")
-                                        ant.mkdir(dir: "${unzipdir}")
-                                        ant.mkdir(dir:
-                                        toolpath)
-                                        ant.delete(dir: "${outputdir}")
-                                        ant.mkdir(dir: "${outputdir}")
-                                        ant.delete(dir: "${jarsdir}")
-                                        ant.mkdir(dir: "${jarsdir}")
-                                        outputFileName =
-                                        "${project.name}"
-
-                                        System.out.println("------------------------------3")
-                                        if(new
-                                        File("${deploydependencisdir}").exists()){
-                                        for (File file : new File("${deploydependencisdir}").listFiles())
-                                        {
-                                        String filePath = file.getAbsolutePath();
-                                        fileName = file.getName();
-                                        if (fileName.endsWith(".war")) {
-                                        context = getWebContextFromManifest(file)
-                                        ant.mkdir(dir: "${unzipdir}/webapps/" + context)
-                                        ant.unzip(src: filePath, dest: "${unzipdir}/webapps/" + context)
-                                        ant.copy(todir: toolpath) {
-                                        fileset(dir: "${unzipdir}/webapps/" + context + "/WEB-INF/lib") {
-                                        include(name: "*.jar")
-                                        }
-                                        }
-
-                                        }
-                                        }
-
-                                        contexts.add(toolpath)
-                                        ant.copy(todir: toolpath) {
-                                        fileset(dir: "${deploydependencisdir}") {
-                                        include(name: "*.jar")
-                                        }
-                                        }
-                                        }
+        <dependency>
+            <groupId>org.openo.gso</groupId>
+            <artifactId>org.openo.gso.commsvc.common</artifactId>
+            <version>1.0.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-beans</artifactId>
+            <version>3.1.0.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-context</artifactId>
+            <version>3.1.0.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-jdbc</artifactId>
+            <version>3.1.0.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-web</artifactId>
+            <version>3.1.0.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.core</artifactId>
+            <version>4.1.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.mybatis</groupId>
+            <artifactId>mybatis</artifactId>
+            <version>3.2.7</version>
+        </dependency>
+        <dependency>
+            <groupId>org.mybatis</groupId>
+            <artifactId>mybatis-spring</artifactId>
+            <version>1.2.0</version>
+            <type>jar</type>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.mchange</groupId>
+            <artifactId>c3p0</artifactId>
+            <version>0.9.2.1</version>
+            <type>jar</type>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.codehaus.jackson</groupId>
+            <artifactId>jackson-jaxrs</artifactId>
+            <version>1.9.2</version>
+        </dependency>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>javax.servlet-api</artifactId>
+            <version>3.1.0</version>
+        </dependency>        
+        <dependency>
+            <groupId>com.googlecode.jmockit</groupId>
+            <artifactId>jmockit</artifactId>
+            <version>1.1</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>4.12</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.jmockit</groupId>
+            <artifactId>jmockit-coverage</artifactId>
+            <version>1.18</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.h2database</groupId>
+            <artifactId>h2</artifactId>
+            <version>1.4.190</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
 
 
-                                        System.out.println("------------------------------4")
-                                        ant.copy(todir: toolpath) {
-                                        fileset(dir: "${project.build.directory}") {
-                                        include(name: "*.jar")
-                                        }
-                                        }
-
-                                        ant.copy(todir: "${unzipdir}") {
-                                        fileset(dir: "${resourcesdir}") {
-                                        include(name: "**")
-                                        }
-                                        }
-
-
-                                        /* compile python .py files. */
-                                        System.out.println("------------------------------5------------------")
-                                        pythonFile = "${project.basedir}/src/main/python";
-                                        if(new
-                                        File(pythonFile).exists()) {
-                                        try {
-                                        ant.exec(dir: "${project.basedir}/src/main/python", executable: "python") {
-                                        arg(value: "-m")
-                                        arg(value: "compileall")
-                                        arg(value: ".")
-                                        }
-
-                                        ant.copy(todir: "${unzipdir}") {
-                                        fileset(dir: "${project.basedir}/src/main/python") {
-                                        include(name: "**/*.*")
-                                        exclude(name: "**/*.py")
-                                        }
-                                        }
-                                        } catch (Exception eee) {
-                                        System.out.println("----------------&gt;&gt;&gt;"+eee.toString())
-                                        }
-                                        }
-
-                                        /* copy all dependencies to $APP_ROOT/lib. */
-                                        System.out.println("------------------------------6------------------")
-                                        for(String temPath : contexts)
-                                        {
-                                        if(new File(temPath).exists())
-                                        {
-                                        try {
-                                        for (File file : new File(temPath).listFiles()) {
-                                        fileName = file.getName();
-                                        if (fileName.endsWith(".jar")) {
-                                        ant.copy(file: file.getAbsolutePath(), todir: "${jarsdir}")
-                                        }
-                                        }
-                                        } catch (Exception e) {
-                                        e.printStackTrace()
-                                        }
-                                        }
-                                        }
-
-                                        /* deploy the upzip file to ${outputdir}/${outputFileName} */
-                                        System.out.println("------------------------------7------------------")
-                                        outputFileName =
-                                        outputFileName.endsWith("Deployment")?outputFileName:outputFileName+"Deployment";
-                                        outputFileName = outputFileName.substring(0, outputFileName.length() -
-                                        "Deployment".length());
-                                        outputFileName = outputFileName +
-                                        "-${project.version}.zip";
-
-                                        outputFileName = outputFileName.replace("-SNAPSHOT",
-                                        "." + new java.text.SimpleDateFormat("yyyyMMddHHmmss").format(
-                                        new Date()));
-
-                                        ant.delete(dir: "${unzipdir}/webapps/ROOT/WEB-INF/lib");
-                                        ant.mkdir(dir:
-                                        "${unzipdir}/webapps/ROOT/WEB-INF/lib");
-                                        ant.copy(todir:
-                                        "${unzipdir}/webapps/ROOT/WEB-INF/lib") {
-                                        fileset(dir: "${unzipdir}/lib") {
-                                        include(name: "org.openo.common-services.common-utilities.commonlib.db-*.jar")
-                                        include(name: "org.openo.common-services.common-utilities.commonlib.cbb-*.jar")
-                                        }
-                                        }
-
-                                        ant.delete() {
-                                        fileset(dir: "${unzipdir}/lib") {
-                                        include(name: "org.openo.common-services.common-utilities.commonlib.db-*.jar")
-                                        include(name: "org.openo.common-services.common-utilities.commonlib.cbb-*.jar")
-                                        }
-                                        }
-
-                                        /* generate dependencies.list in $APP_ROOT/lib. Requirement for install disk size. */
-                                        System.out.println("------------------------------8------------------")
-                                        dependenciesPath="${unzipdir}/lib";
-                                        try {
-                                        def writer = new File(dependenciesPath+"/dependencies.list").newWriter('UTF-8')
-                                        for (String fileName : new File(dependenciesPath).list()) {
-                                        if (fileName.endsWith(".jar")) {
-                                        writer.writeLine(fileName);
-                                        }
-                                        }
-                                        writer.close()
-                                        } catch (Exception e) {
-                                        e.printStackTrace()
-                                        }
-
-                                        /* make the archive. */
-                                        System.out.println("------------------------------9------------------")
-                                        ant.zip(destfile:
-                                        "${outputdir}/${outputFileName}") {
-                                        fileset(dir: "${unzipdir}") {
-                                        exclude(name: "**/.gitignore")
-                                        }
-                                        }
-
-                                        System.out.println("------------------------------done")
-                                    </source>
-                                </configuration>
-                            </execution>
-                        </executions>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
-    </profiles>
 </project>
diff --git a/servicegateway/service/pom.xml b/servicegateway/service/pom.xml
index 3ff6fdc..b0cd551 100644
--- a/servicegateway/service/pom.xml
+++ b/servicegateway/service/pom.xml
@@ -17,155 +17,63 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
-    <parent>
+    <parent> 
         <groupId>org.openo.gso.gui</groupId>
-        <artifactId>servicegateway</artifactId>
+        <artifactId>service-gateway-root</artifactId>
         <version>1.0.0-SNAPSHOT</version>
     </parent>
 
-    <artifactId>service</artifactId>
-    <name>service</name>
+    <artifactId>service-gateway-service</artifactId>
+    <name>ServiceGatewayService</name>
     <packaging>war</packaging>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.openo.common-services.common-utilities</groupId>
-            <artifactId>commonlib-cbb</artifactId>
-            <version>1.0.0-SNAPSHOT</version>
-        </dependency>
-        <!-- roa -->
-        <dependency>
-            <groupId>org.openo.common-services.common-utilities</groupId>
-            <artifactId>commonlib-restclient</artifactId>
-            <version>1.0.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.cxf</groupId>
-            <artifactId>cxf-rt-frontend-jaxrs</artifactId>
-            <version>3.1.6</version>
-        </dependency>
-        <dependency>
-            <groupId>commons-httpclient</groupId>
-            <artifactId>commons-httpclient</artifactId>
-            <version>3.1</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.openo.gso</groupId>
-            <artifactId>org.openo.gso.commsvc.common</artifactId>
-            <version>1.0.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-beans</artifactId>
-            <version>3.1.0.RELEASE</version>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-context</artifactId>
-            <version>3.1.0.RELEASE</version>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-jdbc</artifactId>
-            <version>3.1.0.RELEASE</version>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-web</artifactId>
-            <version>3.1.0.RELEASE</version>
-        </dependency>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <version>4.1.0</version>
-        </dependency>
-        <dependency>
-            <groupId>org.mybatis</groupId>
-            <artifactId>mybatis</artifactId>
-            <version>3.2.7</version>
-        </dependency>
-        <dependency>
-            <groupId>org.mybatis</groupId>
-            <artifactId>mybatis-spring</artifactId>
-            <version>1.2.0</version>
-            <type>jar</type>
-            <scope>compile</scope>
-        </dependency>
-        <dependency>
-            <groupId>com.mchange</groupId>
-            <artifactId>c3p0</artifactId>
-            <version>0.9.2.1</version>
-            <type>jar</type>
-            <scope>compile</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.codehaus.jackson</groupId>
-            <artifactId>jackson-jaxrs</artifactId>
-            <version>1.9.2</version>
-        </dependency>
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>javax.servlet-api</artifactId>
-            <version>3.1.0</version>
-        </dependency>        
-        <dependency>
-            <groupId>com.googlecode.jmockit</groupId>
-            <artifactId>jmockit</artifactId>
-            <version>1.1</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>4.12</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.jmockit</groupId>
-            <artifactId>jmockit-coverage</artifactId>
-            <version>1.18</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>com.h2database</groupId>
-            <artifactId>h2</artifactId>
-            <version>1.4.190</version>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-    
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <cxf.version>3.1.6</cxf.version>
+        <slf4j.version>1.6.1</slf4j.version>
+         <maven.test.skip>false</maven.test.skip>
+         <maven.test.failure.ignore>false</maven.test.failure.ignore>
+    </properties>
+   
+    <profiles>
+        <profile>
+            <id>all-tests</id>
+            <properties>
+                <build.profile.id>all-tests</build.profile.id>
+                <skip.unit.tests>false</skip.unit.tests>
+            </properties>
+        </profile>
+    </profiles>
     <build>
+        <finalName>ROOT</finalName>
         <plugins>
+        	<plugin>
+            	<groupId>org.apache.maven.plugins</groupId>
+            	<artifactId>maven-compiler-plugin</artifactId>
+            	<version>3.1</version>
+            	<configuration>
+               		<source>1.8</source>
+                	<target>1.8</target>
+            	</configuration>
+        	</plugin>
+            <!-- Used for unit tests -->
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-surefire-plugin</artifactId>
+                <version>2.19.1</version>
                 <configuration>
-                    <argLine>-XX:-UseSplitVerifier</argLine>
-                    <skipTests>true</skipTests>
+                    <forkMode>always</forkMode>
+                    <argLine>${surefireArgLine}</argLine>
+                    <skip>${maven.test.skip}</skip>
+                    <!-- 
+                    <testFailureIgnore>${maven.test.failure.ignore}</testFailureIgnore>
+                     -->
                     <testFailureIgnore>true</testFailureIgnore>
+                    <!-- Excludes integration tests when unit tests are run. -->
                     <excludes>
-                        <exclude>${excludesFile}</exclude>
+                        <exclude>**/IT*.java</exclude>
                     </excludes>
                 </configuration>
             </plugin>
-            
-            <plugin>
-                <groupId>org.codehaus.mojo</groupId>
-                <artifactId>cobertura-maven-plugin</artifactId>
-                <version>2.7</version>
-                <configuration>
-                    <formats>
-                        <format>html</format>
-                        <format>xml</format>
-                    </formats>
-                    <instrumentation>
-                        <excludes>
-                            <exclude>org/**/*Test.class</exclude>
-                        </excludes>
-                    </instrumentation>
-                </configuration>
-            </plugin>
         </plugins>
     </build>
 </project>
diff --git a/servicegateway/service/src/main/java/org/openo/gso/gui/servicegateway/roa/impl/ServiceGatewayRoaModuleImpl.java b/servicegateway/service/src/main/java/org/openo/gso/gui/servicegateway/roa/impl/ServiceGatewayRoaModuleImpl.java
index ff33751..3c47c65 100644
--- a/servicegateway/service/src/main/java/org/openo/gso/gui/servicegateway/roa/impl/ServiceGatewayRoaModuleImpl.java
+++ b/servicegateway/service/src/main/java/org/openo/gso/gui/servicegateway/roa/impl/ServiceGatewayRoaModuleImpl.java
@@ -124,4 +124,15 @@
 
         return Response.accepted().entity(result).build();
     }
+
+	public IServiceGateway getServiceGateway() 
+	{
+		return serviceGateway;
+	}
+
+	public void setServiceGateway(IServiceGateway serviceGateway) 
+	{
+		this.serviceGateway = serviceGateway;
+	}
+    
 }
diff --git a/servicegateway/service/src/main/resources/spring/service.xml b/servicegateway/service/src/main/resources/spring/service.xml
index c328d86..39e5ea7 100644
--- a/servicegateway/service/src/main/resources/spring/service.xml
+++ b/servicegateway/service/src/main/resources/spring/service.xml
@@ -26,7 +26,6 @@
     http://www.huawei.com/schema/oms/oms.xsd
     http://cxf.apache.org/jaxrs 
     http://cxf.apache.org/schemas/jaxrs.xsd">
-
     <!-- these are included in the dependency jar -->
     <import resource="classpath:META-INF/cxf/cxf.xml" />
     <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
@@ -35,8 +34,7 @@
     <jaxrs:server id="sampleServer" address="/">    
         <!-- registering beans -->
         <jaxrs:serviceBeans>
-            <ref bean="ServicemgrRoaModuleImpl"></ref>
-            <ref bean="ServicePackageModuleImpl"></ref>
+            <ref bean="serviceGatewayRoaModuleImpl"></ref>            
         </jaxrs:serviceBeans>
         <!-- registering providers -->
         <jaxrs:providers>
@@ -65,9 +63,10 @@
     <bean id="Activator" class="org.openo.gso.gui.servicegateway.activator.Activator" init-method="start" destroy-method="stop">
     </bean>
     
-    <bean id="ServicGatewayRoaModuleImpl" class="org.openo.gso.gui.servicegateway.roa.impl.ServicGatewayRoaModuleImpl">
-        <property name="ServiceGateway" ref="ServiceGateway"></property>
+    <bean id="serviceGatewayRoaModuleImpl" class="org.openo.gso.gui.servicegateway.roa.impl.ServiceGatewayRoaModuleImpl">
+        <property name="serviceGateway" ref="serviceGateway"></property>
     </bean>    
-    
-    </bean>
+	
+	<bean id="serviceGateway" class="org.openo.gso.gui.servicegateway.service.impl.ServiceGatewayImpl">        
+    </bean>  
 </beans>
\ No newline at end of file
