blob: ccc77e0416100923748f85156aed615897275c25 [file] [log] [blame] [view]
---
title: "Running Mode"
lang: en
ref: run-mode
permalink: /docs/users/run-mode/
excerpt: "Running Mode"
last_modified_at: 2017-06-06T10:01:43-04:00
redirect_from:
- /theme-setup/
---
{% include toc %}
Currently, ServiceComb microservice framework support two kind of deploy mode: standalone mode and web container mode. You are advised to to use standalone to to start your services.
## Standalone Mode
A standalone container is loaded with a simple Main to start Spring. Because the service usually does not need the Web container feature, such as Tomcat/JBoss.
It is not necessary to unload services using the Web container. The microservice framework provides the standalone deployment mode.
The service container is only a simple Main method, and a simple Spring container is loaded to expose services.
### Procedure
* **Step 1** Compile the Main function to initialize logs and load service configurations. The contents are as follows:
```java
import org.apache.servicecomb.foundation.common.utils.BeanUtils;
import org.apache.servicecomb.foundation.common.utils.Log4jUtils;
public class MainServer {
public static void main(String[] args) throws Exception {
 Log4jUtils.init(); #Log initialization
 BeanUtils.init(); # Spring bean initialization
// other codes omitted
}
}
```
* **Step 2** Run MainServer to start process and expose services.
NOTE: If the rest network is used, change transparent in the POM file to the cse-transport-rest-vertx package.
## WEB Container Mode
If you need to load the microservice to the web container, create a sersvlet project package. You do not need to write or write a small number of boot codes as needed.
### Development Example
**Step 1** Create a servlet project and modify the web.xml file as follows:
```xml
<web-app>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:META-INF/spring/*.bean.xml
classpath*:app-config.xml
</param-value>
</context-param>
<listener>
<listener-class>org.apache.servicecomb.transport.rest.servlet.RestServletContextListener</listener-class>
</listener>
<servlet>
<servlet-name>RestServlet</servlet-name>
<servlet-class>org.apache.servicecomb.transport.rest.servlet.RestServlet</servlet-class>
<load-on-startup>1</load-on-startup>
<async-supported>true</async-supported>
</servlet>
<servlet-mapping>
<servlet-name>RestServlet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
```
* **Step 2 Modify the POM file**
```xml
<dependencies>
<dependency>
<groupId>org.apache.servicecomb</groupId>
<artifactId>transport-rest-servlet</artifactId>
</dependency>
</dependencies>
<build>
<finalName>test</finalName>
</build>
```
**NOTICE:**
1. The Restful call must be separated from other static resources (such as HTML and js) in the web container. The next segment of webroot should have a keyword, such as rest in this example (/test/rest) in web.xml
2. The Tomcat is used as an example. Each WAR package has unique webroot, which must be a basePath prefix. For example , if webroot is test, all the API definitions of the microservice must start with /test.
3. When the microservice is loaded to the web container and the HTTP and HTTPS ports are opened using the web container, which must meet requirements for the web container rules.