Welcome!

@CloudExpo Authors: Kevin Benedict, Elizabeth White, Liz McMillan, Pat Romanski, Yeshim Deniz

Related Topics: Wearables, Java IoT, Microservices Expo, @CloudExpo, @DevOpsSummit

Wearables: Article

Java Web Services Tutorial | @CloudExpo #DevOps #API #Java #Microservices

Web services have taken the development world by storm

Java Web Services Tutorial: Improve App Communication and Flexibility
By Eugen Paraschiv

Web services have taken the development world by storm, especially in recent years as they've become more and more widely adopted. There are naturally many reasons for this, but first, let's understand what exactly a web service is.

The World Wide Web Consortium (W3C) defines "web of services" as "message-based design frequently found on the Web and in enterprise software". Basically, a web service is a method of sending a message between two devices through a network.

In practical terms, this translates to an application which outputs communication in a standardized format for other client applications to receive and act on.

Web services have been adopted so quickly because they bring several important advantages:

  • Allow communication and interoperability between applications running on different platforms and built with different technologies
  • Enable different applications to share common standard formats and representations
  • Can be reused by many different types of applications
  • Are loosely coupled with other services
  • Allow flexibility in choosing the functionalities you need

Historically, there are two primary types of web services: SOAP (Simple Object Access Protocol) and REST (REpresentational State Transfer) services; the latter is more recent and more widely used today.

This article will detail both, but put a stronger focus on REST.

Differences between SOAP and REST web services
SOAP is a protocol for communication between applications and is an early standard for creating web services, developed by Microsoft in 1998. It relies heavily on XML and can only exchange XML messages and requires a complex parsing and processing stack.

One of the advantages of SOAP is that it supports multiple protocols, has built-in security and error handling, and is somewhat strictly regulated, which can lead to a higher level of standardization.

However, SOAP is also fairly difficult to use and requires significant resources, which excludes it as an option on some embedded or mobile devices.

By contrast, REST is lighter, faster, more flexible and, as such, easier to use. It can also output data in several formats including XML and JSON.

Here's a simple, high-level summary of the main differences between the two standards:

SOAP vs REST

You can read more about the differences between the two architectural approaches here.

SOAP Web Services
As we discussed earlier, SOAP is an XML-based protocol for application communication. Although it's definitely slower and more resource heavy than its REST counterpart, it is similarly platform and language independent.

In the Java ecosystem, Java EE provides the JAX-WS API to help you create SOAP-based web services.

With JAX-WS, you can define a SOAP service in both an RPC or Document style. Both styles consist of a set of annotations to be applied to your classes, based on which the XML files are generated.

Let's see an example of an RPC style web service. First, you need to create an interface or class with the proper annotations, which will declare the methods to be accessed by other applications:

@WebService
@SOAPBinding(style = SOAPBinding.Style.RPC)
public interface UserService {
@WebMethod
public void addUser(User user);

@WebMethod
public Users getUsers();
}

We used two primary annotations here - @WebService to declare the service interface, and @WebMethod for each method to be exposed.

The @SoapBinding annotation specifies the style of web service. A Document-style service is declared in a similar manner, replacing the @SoapBinding annotation with:

@SOAPBinding(style = SOAPBinding.Style.Document)

The difference between the two styles is in the way the XML files are generated.

Finally, you need to add an implementation class for the service interface:

@WebService(endpointInterface = "com.stackify.services .UserService")
public class DefaultUserImpl implements UserService {
ArrayList<User> usersList = new ArrayList<>();

@Override
public void addUser(User user) {
usersList.add(user);
}

@Override
public Users getUsers() {
Users users = new Users();
users.setUsers(usersList);
return users;
}
}C/code>

The implementing methods must be public, and must not be static or final. You can also make use of methods annotated with @PostConstruct and @PreDestroy for lifecycle event callbacks.

Note that creating the interface is optional for a JAX-WS web service implementation. You can add the annotations directly to the class, and JAX-WS will implicitly define a service endpoint interface.

Finally, to publish the web service, use the Endpoint class:

public class ServicePublisher {
public static void main(String[] args) {
Endpoint.publish("http://localhost :8080/users",new DefaultUserService());
}
}

If you run this application, you can see the XML describing your endpoint, written in WSDL (Web Service Description Language) format, by accessing the URL:

http://localhost:8080/users?wsdl

SOAP Web Service Client
To make use of the SOAP service, let's implement a simple client application.

One way to do this is by creating a Java project and importing the web service definitions from the web service WSDL document. After creating the project, open a command line and move to the source folder of the new project; then execute the command:

wsimport -s . http://localhost:8080/users?wsdl

This will have the effect of generating the following classes in your source folder:

Source Folder Classes

Now, you can easily make use of the generated classes:

public class JAXWSClient
public static void main(String[] args) {
DefaultUserImplService service = new DefaultUserImplService();
User user = new User();
user.setEmail("[email protected]");
user.setName("John");

UserService port = service. getDefaultUserImplPort();
port.addUser(user);
Users users = port.getUsers();
System.out.println(users.getUsers() .iterator().next().getName());
}
}

REST Web Services
REST or REpresentational State Transfer, is an architectural style for building applications that can communicate over a network. The principles of REST were first laid out by Roy Fielding in his 2000 doctoral dissertation.

In a few short years, REST has overtaken SOAP in popularity due to its ease of use, speed, flexibility, and similarity to core architecture choices that power the web itself.

Here's an interesting graph that shows the popularity of both approaches in the Java ecosystem:

REST vs SOAP Popularity

Let's have a quick look at the core principles of a REST API:

  • it follows a client-server architecture
  • it's based on Resources accessible through their URIs
  • it uses unique Resource URIs
  • it's stateless and cacheable
  • Clients can manipulate Resources through their URIs
  • the web service can be layered
  • can run over a wide range of protocols (though most implementations run over HTTP/HTTPS)

REST With JAX-RS
For a clearer understanding of these principles, let's take a look at an implementation example. We're going to use the JAX-RS API to create a simple REST API as a good starting point for our discussion.

JAX-RS Annotations and Setup
Like JAX-WS, JAX-RS API relies heavily on annotations. Since this is only a specification - meaning a set of interfaces and annotations - you also need to choose an implementation of the spec.

In the example, we're going to use the reference implementation of JAX-RS, which is Jersey; another very popular implementation you can try is RESTEasy.

Let's start by first understanding the most important annotations in JAX-RS:

  • @Path - defines the path used to access the web service
  • @PathParam - injects values from the URL into a method parameter
  • @FormParam - injects values from an HTML form into a method parameter
  • @Produces - specifies the type of the response
  • @Consumes - specifies the type of the request data

The API also contains annotations corresponding to each HTTP verb: @GET, @POST, @PUT, @DELETE, @HEAD, @OPTIONS.

To start working with the Jersey JAX-RS implementation, you need to add the jersey-server dependency to your project classpath. If you're using Maven, this is easily done and will also bring in the required jsr311-api dependency:

<dependency>
<groupId>org.glassfish.jersey.containers </groupId>
<artifactId>jersey-container-servlet </artifactId>
<version>2.25.1</version>
</dependency>

In addition to this, you can also add the jersey-media-moxy library to enable the API to enable JSON representations:

<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
<version>2.25.1</version>
</dependency>

Having the option to use JSON as the primary representation media type can be quite powerful, not only for flexibility but also in terms of performance.

The JAX-RS Web Service
Now you can start writing the simple web service:

@Path("/users")
public class UserService {
private static List<User> users = new ArrayList<>();

@POST
@Consumes(MediaType.APPLICATION_JSON)
public Response addUser(User user) {
users.add(user);
return Response.ok().build();
}

@GET
@Produces(MediaType.APPLICATION_JSON)
public List<User> getUsers() {
return users;
}
}

Notice how we're creating two endpoints here - a /users POST endpoint for adding a User resources, and a /users GET endpoint for retrieving the list of users.

Next, you need to define the configuration - extending ResourceConfig and specifying the packages to be scanned for JAX-RS services:

public class ApplicationInitializer extends ResourceConfig {
public ApplicationInitializer() {
packages("com.stackify.services");
}
}

Finally, you need to add a web.xml file which registers the ServletContainer servlet and the ApplicationInitializer class:

<?xml version="1.0" encoding="UTF-8"?><?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">

<display-name>rest-server</display-name>
<servlet>
<servlet-name>rest-server</servlet-name>
<servlet-class>org.glassfish.jersey.servlet. ServletContainer</servlet-class> <init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.stackify. ApplicationInitializer</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>rest-server</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>

After running the application, you can access the endpoints at http://localhost:8080/rest-server/users.

Using curl, you can add a new user:

curl -i -X POST -H "Content-Type:application/json" -d "{"email":"[email protected]","name":"John"}" http://localhost:8080/rest-server/users

Then retrieve the collection resource using a simple GET:

curl -i -X GET http://localhost:8080/rest-server/users/

Testing the REST Web Service
As you're building a web service, you naturally need to test the functionality you're implementing. And, because is is an HTTP-based API, you can interact with it relatively simply, using a standard HTTP client.

That's exactly what we're going to do here - use a powerful client specifically focused on testing REST services - REST Assured:

<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<version>3.0.3</version>
</dependency>

REST Assured follows a typical BDD format, with each statement structured like this:

  • given - the section used to declare things like parameters or content type (optional)
  • when - the part where the HTTP method and URL to call are defined
  • then - the section where the response is verified

Let's take a look at a simple JUnit test for the REST service we developed previously:

@Test
public void whenAddUser_thenGetUserOk() {
RestAssured.baseURI = "http://localhost:8080/rest-server";

String json = "{\"email\":\"[email protected]\", \"name\":\"John\"}";
given()
.contentType("application/json")
.body(json)
.when()
.post("/users")
.then()
.statusCode(200);

when()
.get("/users")
.then()
.contentType("application/json")
.body("name", hasItem("John"))
.body("email", hasItem("[email protected]"));
}

In this quick test, we send a POST to the /users endpoint to create a new User. Then, we do a GET, retrieve all users and verify the response to check if it contains the new user we just created.

Of course, to run the test, you first need to make sure the API is running on localhost first.

Building a Client for the REST Service
Your web services will usually be consumed by a different client application that interacts with the API over HTTP.

Let's use Angular 4 to create a simple front-end client, with an HTML form to add a user and a table to display all users in the system.

Angular 4 is quite well-suited as a front-end framework for working with REST services - as it has first-class REST support with the Http module.

To start using the library, you first need to install node.js and npm, then download the Angular command line interface:

npm install -g @angular/cli

To setup a new Angular project, navigate to your project location and run:

ng new rest-client

The process of setting up the project can take a few minutes. At the end, a number of new files will be created.

In the src/app folder, let's create an app.service.ts file where a User class will be defined, as well as UserService which calls the two web services endpoints:

export class User {
constructor(
public email: string,
public name: string) { }
}

@Injectable()
export class UserService {
constructor(
private _http: Http){}

url = 'http://localhost:8080/rest-server/users';

addUser(user){
let headers = new Headers({'Content-Type': 'application/json'});
let options = new RequestOptions({ headers: headers});

return this._http.post(this.url, JSON.stringify(user), options)
.map(
(_response: Response) => {
return _response;
},
err => alert('Error adding user'));
}

getUsers() {
return this._http.get(this.url)
.map((_response: Response) => {
return _response.json();
});
}
}

Next, let's create an Angular Component that will make use of the UserService and create objects to bind to HTML elements:

@Component({
selector: 'users-page',
providers: [UserService],
templateUrl: './users.component.html',
styleUrls: ['./app.component.css']
})
export class UsersComponent {
title = 'Users';

constructor(
private _service:UserService){}

public user = {email: "", name: ""};
public res=[];

addUser() {
this._service.addUser(this.user)
.subscribe( () => this.getUsers());
}

getUsers() {
this._service.getUsers()
.subscribe(
users => { this.res=[];
users.forEach(usr => {
this.res.push(
new User(usr.email, usr.name))
});
});
}
}

The visual interface of the Angular application contains an HTML form and table, with data bindings:

<form>
Email: <input type="text" [(ngModel)]="user.email" name="email"/><br />
Name: <input type="text" [(ngModel)]="user.name" name="name"/><br />
<input type="submit" (click)="addUser()" value="Add User"/>
</form>

<table>
<tr *ngFor="let user of res" >
<td>{{user.email}} </td>
<td>{{user.name}} </td> </tr>
</table>

Let's define the main AppComponent that will include the UsersComponent:

@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
title = 'app';
}

This is all wrapped up in the main application module:

@NgModule({
declarations: [
AppComponent,
UsersComponent
],
imports: [
BrowserModule,
HttpModule,
FormsModule,
RouterModule.forRoot([
{ path: '', component: AppComponent },
{ path: 'users', component: UsersComponent }])],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }>

Finally, the UsersComponent is included in the main HTML page:

<!DOCTYPE html>
<html>
<head>
<title>REST Client</title>
<base href="/">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>

<body>
<users-page>loading users component</users-page>
</body>
</html>

To run the Angular application, go to the project directory in a command line, and simply run the command:

ng serve

The application can be accessed at the URL: http://localhost:4200/

Since the REST client and server run on different origins, by default the Angular client cannot access the REST endpoints, due to the CORS constraint in the browser. In order to allow cross-origin requests, let's add a filter to the REST web service application that adds an Access-Control-Allow-Origin header to every response:

@Provider
public class CorsFilter implements ContainerResponseFilter {

@Override
public void filter(ContainerRequestContext requestContext,
ContainerResponseContext response) throws IOException {
response.getHeaders().add ("Access-Control-Allow-Origin", "*");
response.getHeaders().add ("Access-Control-Allow-Headers", "origin, content-type, accept");
}
}

Finally, you will be able to communicate with the REST web service from the Angular application.

REST Services with Spring
As a strong alternative to JAX-RS, the Spring Framework also provides first-class support for quickly building a REST web service.

Simply put, Spring MVC offers a similar programming model, driven by the @RestController and @RequestMapping annotations, to expose the API to clients.

A good way to start bootstrapping a Spring application is making use of Spring Boot:

<parent>
<groupId>org.springframework.boot </groupId>
<artifactId>spring-boot-starter-parent </artifactId>
<version>1.5.4.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web </artifactId>
</dependency>
</dependencies>

After adding the necessary dependencies, you can create a @RestController annotated class with methods for each web service endpoint.

The example will be the same as the previous one - handing User resources - to better illustrate the differences and similarities between the two approaches:

@RestController
public class UserController {
private static List<User> users = new ArrayList<>();

@PostMapping(value = "/users", consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseStatus(HttpStatus.CREATED)
public void addUser(@RequestBody User user) {
users.add(user);
}

@GetMapping("/users")
public List<User> getUsers() {
return users;
}
}

With Spring, you have similar handy annotations, corresponding to each HTTP method, such as @PostMapping and @GetMapping. You can define the endpoint URL using the value attribute, or specify the media type consumed or produced by the service by using the consumes or produces attributes.

Of course, the REST support in Spring goes far beyond these simple operations and provides a full programming model to build APIs. If you'd like to go deeper into what's possible, have a look at the reference documentation here.

Best Practices for REST Services
Now that you've seen two different ways that you can build REST services, it's important to also discuss some best practices that will allow you to create more useful, standardized and easy to use APIs.

One of the most important principles to follow when building your REST service is the HATEOAS constraint.

HATEOAS stands for "Hypermedia as the Engine of Application State" and states that a client should be able to interact with a web service, by only using the hypermedia information provided by the service itself.

The main purpose of HATEOAS is to decouple client and server functionality so that changes to the service do not break client functionality, and the service can evolve independently of clients.

Simply put, in addition to the standard responses, a service implementing HATEOAS will also include links to provide the client with a set of available operations they can perform with the API.

Both JAX-RS and Spring provide support for building HATEOAS services.

Spring REST HATEOAS Support
Let's see an example of adding HATEOAS links to the previously developed Spring REST service.

First, you need to add the spring-boot-starter-hateoas dependency:

<dependency>
<groupId>org.springframework.boot </groupId>
<artifactId>spring-boot-starter-hateoas </artifactId>
</dependency>

Next, you have to modify the resource class User so that it extends the ResourceSupport class:

public class User extends ResourceSupport { ... }

Then you can modify the REST controller to add a link. Spring HATEOAS contains the Link class and helpful methods to obtain the URIs:

@GetMapping("/users")
public List<User> getUsers() {
users.forEach(user -> {
Link selfLink =
linkTo(methodOn(UserController.class) .getUsers())
.slash(user.getEmail())
.withSelfRel();

user.add(selfLink);
});
return users;
}

This simple implementation adds a Link to each User resource - pointing the client to the canonical URI of the resource - /users/{email}.

Once you expose that URI, you of course also have to define a method to handle that endpoint mapping as well:

@GetMapping("/users/{email}")
public User getUser(@PathVariable String email) {
return users.stream()
.filter(user -> !user.getEmail()
.equals(email))
.findAny()
.orElse(null);
}

Calling the /users endpoint will now return an enriched Resource:

[
{
"email": "[email protected]",
"name": "ana",
"links": [
{
"rel": "self",
"href": "http://localhost:[email protected]"
}
]
}
]

The standardization work in the REST ecosystem is making slow but steady progress; however, we're not yet at a point where documentation of the API isn't necessary.

Right now, documentation is actually very helpful and makes exploring and understanding the API a lot easier; that's why tools like Swagger and RAML have gained so much traction in recent years.

Documenting the API with Swagger
The documentation for your REST API can be created manually or with a documentation generation tool, such as Swagger.

Swagger is a specification that can be integrated with JAX-RS implementations, as well as with Spring REST implementations.

Let's set up Swagger in the simple Spring REST API we created, and have a look at the generated documentation.

First, you'll need the springfox-swagger2 dependency, as well as springfox-swagger-ui if you want a visual interface:

<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2 </artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui </artifactId>
<version>2.7.0</version>
</dependency>

In Spring Boot, the configuration only requires defining a Docket bean and adding the @EnableSwagger2 annotation:

@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage ("com.stackify.controllers"))
.paths(PathSelectors.any())
.build();
}
}

This is all that is needed to support Swagger documentation generation for your Spring REST API in a Spring Boot application.

Then you can access the documentation at /swagger-ui.html:

Swagger API Documentation

Notice how the each endpoint in the application is individually documented; you can expand each section to find details about the endpoint and even interact with it right from the Swagger UI.

Conclusion
Web Services have become a very common and powerful way of architecting web applications, and the adoption trends are still going strong with the major focus on microservices in the last couple of years.

Naturally, there are several mature frameworks available to implement both REST and SOAP services in the Java ecosystem. And beyond the server side, there's solid support to test and document web services running over HTTP.

And, of course, the upcoming first-class Spring support for reactive architectures promises to keep this momentum strong and to address some of the limitations of the HTTP protocol, leading to even more performant APIs.

The post Java Web Services Tutorial: Improve App Communication And Flexibility appeared first on Stackify.

Download Show Prospectus ▸ Here

DevOps at Cloud Expo taking place October 31 - November 2, 2017, at the Santa Clara Convention Center in Santa Clara, CA, will feature technical sessions from a rock star conference faculty and the leading industry players in the world.

Must Watch Video: Recap of @DevOpsSummit New York Javits Center

The widespread success of cloud computing is driving the DevOps revolution in enterprise IT. Now as never before, development teams must communicate and collaborate in a dynamic, 24/7/365 environment. There is no time to wait for long development cycles that produce software that is obsolete at launch. DevOps may be disruptive, but it is essential.

Nutanix DevOps Booth at @DevOpsSummit New York Javits Center

DevOps at Cloud Expo will expand the DevOps community, enable a wide sharing of knowledge, and educate delegates and technology providers alike. Recent research has shown that DevOps dramatically reduces development time, the amount of enterprise IT professionals put out fires, and support time generally. Time spent on infrastructure development is significantly increased, and DevOps practitioners report more software releases and higher quality. Sponsors of DevOps at Cloud Expo will benefit from unmatched branding, profile building and lead generation opportunities through:

  • Featured on-site presentation and ongoing on-demand webcast exposure to a captive audience of industry decision-makers.
  • Showcase exhibition during our new extended dedicated expo hours
  • Breakout Session Priority scheduling for Sponsors that have been guaranteed a 35 minute technical session
  • Online advertising in SYS-CON's i-Technology Publications
  • Capitalize on our Comprehensive Marketing efforts leading up to the show with print mailings, e-newsletters and extensive online media coverage.
  • Unprecedented PR Coverage: Editorial Coverage on DevOps Journal
  • Tweetup to over 75,000 plus followers
  • Press releases sent on major wire services to over 500 industry analysts.

For more information on sponsorship, exhibit, and keynote opportunities, contact Carmen Gonzalez by email at events (at) sys-con.com, or by phone 201 802-3021.

Most Popular Video: Sheng Liang's Containers Talk

@DevOpsSummit at Cloud Expo taking place October 31 - November 2, 2017, Santa Clara Convention Center, CA, and is co-located with the 21st International Cloud Expo and will feature technical sessions from a rock star conference faculty and the leading industry players in the world.

@DevOpsSummit  2017 Silicon Valley
(October 31 - November 2, 2017, Santa Clara Convention Center, CA)

@DevOpsSummit 2018 New York 
(June 12-14, 2018, Javits Center, Manhattan)

With major technology companies and startups seriously embracing Cloud strategies, now is the perfect time to attend 21st Cloud Expo, October 31 - November 2, 2017, at the Santa Clara Convention Center, CA, and June 12-14, 2018, at the Javits Center in New York City, NY, and learn what is going on, contribute to the discussions, and ensure that your enterprise is on the right path to Digital Transformation.

Track 1. Enterprise Cloud | Cloud-Native
Track 2.
Big Data | Analytics
Track 3. Internet of Things | IIoT | Smart Cities

Track 4. DevOps | Digital Transformation (DX)

Track 5. APIs | Cloud Security | Mobility

Track 6.
AI | ML | DL | Cognitive
Track 7.
Containers | Microservices | Serverless
Track 8. FinTech | InsurTech | Token Economy

Speaking Opportunities

The upcoming 21st International @CloudExpo@ThingsExpo, October 31 - November 2, 2017, Santa Clara Convention Center, CA, and June 12-14, 2018, at the Javits Center in New York City, NY announces that its Call For Papers for speaking opportunities is open. Themes and topics to be discussed include:

  • Agile
  • API management
  • APM
  • Application delivery
  • Cloud development
  • Configuration automation
  • Containers
  • Continuous delivery
  • Continuous integration
  • Continuous testing
  • DevOps anti-patterns
  • DevOps for legacy systems
  • DevOps skills and training
  • DevOps system architecture
  • Docker
  • Enterprise DevOps
  • Identity and access
  • IT orchestration
  • Kubernetes
  • Load testing
  • Microservices
  • Mobile DevOps
  • Monitoring
  • Network automation
  • Quality assurance
  • Release automation
  • Serverless
  • Scrum
  • Service virtualization
  • Teaming
  • Test automation
  • WebOps, CloudOps, ChatOps, NoOps

Submit your speaking proposal today! ▸ Here

Cloud Expo | @ThingsExpo 2017 Silicon Valley
(October 31 - November 2, 2017, Santa Clara Convention Center, CA)

Cloud Expo | @ThingsExpo 2018 New York 
(June 12-14, 2018, Javits Center, Manhattan)

Download Show Prospectus ▸ Here

Every Global 2000 enterprise in the world is now integrating cloud computing in some form into its IT development and operations. Midsize and small businesses are also migrating to the cloud in increasing numbers.  

Companies are each developing their unique mix of cloud technologies and services, forming multi-cloud and hybrid cloud architectures and deployments across all major industries. Cloud-driven thinking has become the norm in financial services, manufacturing, telco, healthcare, transportation, energy, media, entertainment, retail and other consumer industries, and the public sector.

Cloud Expo is the single show where technology buyers and vendors can meet to experience and discus cloud computing and all that it entails. Sponsors of Cloud Expo will benefit from unmatched branding, profile building and lead generation opportunities through:

  • Featured on-site presentation and ongoing on-demand webcast exposure to a captive audience of industry decision-makers.
  • Showcase exhibition during our new extended dedicated expo hours
  • Breakout Session Priority scheduling for Sponsors that have been guaranteed a 35-minute technical session
  • Online advertising in SYS-CON's i-Technology Publications
  • Capitalize on our Comprehensive Marketing efforts leading up to the show with print mailings, e-newsletters and extensive online media coverage.
  • Unprecedented PR Coverage: Editorial Coverage on Cloud Computing Journal.
  • Tweetup to over 75,000 plus followers
  • Press releases sent on major wire services to over 500 industry analysts.

For more information on sponsorship, exhibit, and keynote opportunities, contact Carmen Gonzalez by email at events (at) sys-con.com, or by phone 201 802-3021.

The World's Largest "Cloud Digital Transformation" Event

@CloudExpo | @ThingsExpo 2017 Silicon Valley
(Oct. 31 - Nov. 2, 2017, Santa Clara Convention Center, CA)

@CloudExpo | @ThingsExpo 2018 New York 
(June 12-14, 2018, Javits Center, Manhattan)

Full Conference Registration Gold Pass and Exhibit Hall ▸ Here

Register For @CloudExpo ▸ Here via EventBrite

Register For @ThingsExpo ▸ Here via EventBrite

Register For @DevOpsSummit ▸ Here via EventBrite

Sponsorship Opportunities

Sponsors of Cloud Expo | @ThingsExpo will benefit from unmatched branding, profile building and lead generation opportunities through:

  • Featured on-site presentation and ongoing on-demand webcast exposure to a captive audience of industry decision-makers
  • Showcase exhibition during our new extended dedicated expo hours
  • Breakout Session Priority scheduling for Sponsors that have been guaranteed a 35 minute technical session
  • Online targeted advertising in SYS-CON's i-Technology Publications
  • Capitalize on our Comprehensive Marketing efforts leading up to the show with print mailings, e-newsletters and extensive online media coverage
  • Unprecedented Marketing Coverage: Editorial Coverage on ITweetup to over 100,000 plus followers, press releases sent on major wire services to over 500 industry analysts

For more information on sponsorship, exhibit, and keynote opportunities, contact Carmen Gonzalez (@GonzalezCarmen) today by email at events (at) sys-con.com, or by phone 201 802-3021.

Secrets of Sponsors and Exhibitors ▸ Here
Secrets of Cloud Expo Speakers ▸ Here

All major researchers estimate there will be tens of billions devices - computers, smartphones, tablets, and sensors - connected to the Internet by 2020. This number will continue to grow at a rapid pace for the next several decades.

With major technology companies and startups seriously embracing Cloud strategies, now is the perfect time to attend @CloudExpo@ThingsExpo, October 31 - November 2, 2017, at the Santa Clara Convention Center, CA, and June 12-4, 2018, at the Javits Center in New York City, NY, and learn what is going on, contribute to the discussions, and ensure that your enterprise is on the right path to Digital Transformation.

Delegates to Cloud Expo | @ThingsExpo will be able to attend 8 simultaneous, information-packed education tracks.

There are over 120 breakout sessions in all, with Keynotes, General Sessions, and Power Panels adding to three days of incredibly rich presentations and content.

Join Cloud Expo | @ThingsExpo conference chair Roger Strukhoff (@IoT2040), October 31 - November 2, 2017, Santa Clara Convention Center, CA, and June 12-14, 2018, at the Javits Center in New York City, NY, for three days of intense Enterprise Cloud and 'Digital Transformation' discussion and focus, including Big Data's indispensable role in IoT, Smart Grids and (IIoT) Industrial Internet of Things, Wearables and Consumer IoT, as well as (new) Digital Transformation in Vertical Markets.

Financial Technology - or FinTech - Is Now Part of the @CloudExpo Program!

Accordingly, attendees at the upcoming 21st Cloud Expo | @ThingsExpo October 31 - November 2, 2017, Santa Clara Convention Center, CA, and June 12-14, 2018, at the Javits Center in New York City, NY, will find fresh new content in a new track called FinTech, which will incorporate machine learning, artificial intelligence, deep learning, and blockchain into one track.

Financial enterprises in New York City, London, Singapore, and other world financial capitals are embracing a new generation of smart, automated FinTech that eliminates many cumbersome, slow, and expensive intermediate processes from their businesses.

FinTech brings efficiency as well as the ability to deliver new services and a much improved customer experience throughout the global financial services industry. FinTech is a natural fit with cloud computing, as new services are quickly developed, deployed, and scaled on public, private, and hybrid clouds.

More than US$20 billion in venture capital is being invested in FinTech this year. @CloudExpo is pleased to bring you the latest FinTech developments as an integral part of our program, starting at the 21st International Cloud Expo October 31 - November 2, 2017 in Silicon Valley, and June 12-14, 2018, in New York City.

@CloudExpo is accepting submissions for this new track, so please visit www.CloudComputingExpo.com for the latest information.

About SYS-CON Media & Events

SYS-CON Media (www.sys-con.com) has since 1994 been connecting technology companies and customers through a comprehensive content stream - featuring over forty focused subject areas, from Cloud Computing to Web Security - interwoven with market-leading full-scale conferences produced by SYS-CON Events. The company's internationally recognized brands include among others Cloud Expo® (@CloudExpo), Big Data Expo® (@BigDataExpo), DevOps Summit (@DevOpsSummit), @ThingsExpo® (@ThingsExpo), Containers Expo (@ContainersExpo) and Microservices Expo (@MicroservicesE).

Cloud Expo®, Big Data Expo® and @ThingsExpo® are registered trademarks of Cloud Expo, Inc., a SYS-CON Events company.

More Stories By Stackify Blog

Stackify offers the only developers-friendly solution that fully integrates error and log management with application performance monitoring and management. Allowing you to easily isolate issues, identify what needs to be fixed quicker and focus your efforts – Support less, Code more. Stackify provides software developers, operations and support managers with an innovative cloud based solution that gives them DevOps insight and allows them to monitor, detect and resolve application issues before they affect the business to ensure a better end user experience. Start your free trial now stackify.com

@CloudExpo Stories
SYS-CON Events announced today that Massive Networks will exhibit at SYS-CON's 21st International Cloud Expo®, which will take place on Oct 31 – Nov 2, 2017, at the Santa Clara Convention Center in Santa Clara, CA. Massive Networks mission is simple. To help your business operate seamlessly with fast, reliable, and secure internet and network solutions. Improve your customer's experience with outstanding connections to your cloud.
DevOps is under attack because developers don’t want to mess with infrastructure. They will happily own their code into production, but want to use platforms instead of raw automation. That’s changing the landscape that we understand as DevOps with both architecture concepts (CloudNative) and process redefinition (SRE). Rob Hirschfeld’s recent work in Kubernetes operations has led to the conclusion that containers and related platforms have changed the way we should be thinking about DevOps and...
Everything run by electricity will eventually be connected to the Internet. Get ahead of the Internet of Things revolution and join Akvelon expert and IoT industry leader, Sergey Grebnov, in his session at @ThingsExpo, for an educational dive into the world of managing your home, workplace and all the devices they contain with the power of machine-based AI and intelligent Bot services for a completely streamlined experience.
Because IoT devices are deployed in mission-critical environments more than ever before, it’s increasingly imperative they be truly smart. IoT sensors simply stockpiling data isn’t useful. IoT must be artificially and naturally intelligent in order to provide more value In his session at @ThingsExpo, John Crupi, Vice President and Engineering System Architect at Greenwave Systems, will discuss how IoT artificial intelligence (AI) can be carried out via edge analytics and machine learning techn...
FinTechs use the cloud to operate at the speed and scale of digital financial activity, but are often hindered by the complexity of managing security and compliance in the cloud. In his session at 20th Cloud Expo, Sesh Murthy, co-founder and CTO of Cloud Raxak, showed how proactive and automated cloud security enables FinTechs to leverage the cloud to achieve their business goals. Through business-driven cloud security, FinTechs can speed time-to-market, diminish risk and costs, maintain continu...
When shopping for a new data processing platform for IoT solutions, many development teams want to be able to test-drive options before making a choice. Yet when evaluating an IoT solution, it’s simply not feasible to do so at scale with physical devices. Building a sensor simulator is the next best choice; however, generating a realistic simulation at very high TPS with ease of configurability is a formidable challenge. When dealing with multiple application or transport protocols, you would be...
Existing Big Data solutions are mainly focused on the discovery and analysis of data. The solutions are scalable and highly available but tedious when swapping in and swapping out occurs in disarray and thrashing takes place. The resolution for thrashing through machine learning algorithms and support nomenclature is through simple techniques. Organizations that have been collecting large customer data are increasingly seeing the need to use the data for swapping in and out and thrashing occurs ...
As many know, the first generation of Cloud Management Platform (CMP) solutions were designed for managing virtual infrastructure (IaaS) and traditional applications. But that’s no longer enough to satisfy evolving and complex business requirements. In his session at 21st Cloud Expo, Scott Davis, Embotics CTO, will explore how next-generation CMPs ensure organizations can manage cloud-native and microservice-based application architectures, while also facilitating agile DevOps methodology. He wi...
SYS-CON Events announced today that Datera, that offers a radically new data management architecture, has been named "Exhibitor" of SYS-CON's 21st International Cloud Expo ®, which will take place on Oct 31 - Nov 2, 2017, at the Santa Clara Convention Center in Santa Clara, CA. Datera is transforming the traditional datacenter model through modern cloud simplicity. The technology industry is at another major inflection point. The rise of mobile, the Internet of Things, data storage and Big...
SYS-CON Events announced today that GrapeUp, the leading provider of rapid product development at the speed of business, will exhibit at SYS-CON's 21st International Cloud Expo®, which will take place October 31-November 2, 2017, at the Santa Clara Convention Center in Santa Clara, CA. Grape Up is a software company, specialized in cloud native application development and professional services related to Cloud Foundry PaaS. With five expert teams that operate in various sectors of the market acr...
Blockchain is a shared, secure record of exchange that establishes trust, accountability and transparency across business networks. Supported by the Linux Foundation's open source, open-standards based Hyperledger Project, Blockchain has the potential to improve regulatory compliance, reduce cost as well as advance trade. Are you curious about how Blockchain is built for business? In her session at 21st Cloud Expo, René Bostic, Technical VP of the IBM Cloud Unit in North America, will discuss th...
SYS-CON Events announced today that CA Technologies has been named "Platinum Sponsor" of SYS-CON's 21st International Cloud Expo®, which will take place October 31-November 2, 2017, at the Santa Clara Convention Center in Santa Clara, CA. CA Technologies helps customers succeed in a future where every business - from apparel to energy - is being rewritten by software. From planning to development to management to security, CA creates software that fuels transformation for companies in the applic...
In his opening keynote at 20th Cloud Expo, Michael Maximilien, Research Scientist, Architect, and Engineer at IBM, discussed the full potential of the cloud and social data requires artificial intelligence. By mixing Cloud Foundry and the rich set of Watson services, IBM's Bluemix is the best cloud operating system for enterprises today, providing rapid development and deployment of applications that can take advantage of the rich catalog of Watson services to help drive insights from the vast t...
There is only one world-class Cloud event on earth, and that is Cloud Expo – which returns to Silicon Valley for the 21st Cloud Expo at the Santa Clara Convention Center, October 31 - November 2, 2017. Every Global 2000 enterprise in the world is now integrating cloud computing in some form into its IT development and operations. Midsize and small businesses are also migrating to the cloud in increasing numbers. Companies are each developing their unique mix of cloud technologies and service...
Cloud adoption is often driven by a desire to increase efficiency, boost agility and save money. All too often, however, the reality involves unpredictable cost spikes and lack of oversight due to resource limitations. In his session at 20th Cloud Expo, Joe Kinsella, CTO and Founder of CloudHealth Technologies, tackled the question: “How do you build a fully optimized cloud?” He will examine: Why TCO is critical to achieving cloud success – and why attendees should be thinking holistically ab...
WebRTC is great technology to build your own communication tools. It will be even more exciting experience it with advanced devices, such as a 360 Camera, 360 microphone, and a depth sensor camera. In his session at @ThingsExpo, Masashi Ganeko, a manager at INFOCOM Corporation, will introduce two experimental projects from his team and what they learned from them. "Shotoku Tamago" uses the robot audition software HARK to track speakers in 360 video of a remote party. "Virtual Teleport" uses a...
Internet of @ThingsExpo, taking place October 31 - November 2, 2017, at the Santa Clara Convention Center in Santa Clara, CA, is co-located with 21st Cloud Expo and will feature technical sessions from a rock star conference faculty and the leading industry players in the world. The Internet of Things (IoT) is the most profound change in personal and enterprise IT since the creation of the Worldwide Web more than 20 years ago. All major researchers estimate there will be tens of billions devic...
An increasing number of companies are creating products that combine data with analytical capabilities. Running interactive queries on Big Data requires complex architectures to store and query data effectively, typically involving data streams, an choosing efficient file format/database and multiple independent systems that are tied together through custom-engineered pipelines. In his session at @BigDataExpo at @ThingsExpo, Tomer Levi, a senior software engineer at Intel’s Advanced Analytics ...
As DevOps methodologies expand their reach across the enterprise, organizations face the daunting challenge of adapting related cloud strategies to ensure optimal alignment, from managing complexity to ensuring proper governance. How can culture, automation, legacy apps and even budget be reexamined to enable this ongoing shift within the modern software factory?
While some vendors scramble to create and sell you a fancy solution for monitoring your spanking new Amazon Lambdas, hear how you can do it on the cheap using just built-in Java APIs yourself. By exploiting a little-known fact that Lambdas aren’t exactly single-threaded, you can effectively identify hot spots in your serverless code. In his session at @DevOpsSummit at 21st Cloud Expo, Dave Martin, Product owner at CA Technologies, will give a live demonstration and code walkthrough, showing how ...