Testing the application
Before starting to work on our application from the performance window, let's get a bit familiar with it. We will not browse and test all the endpoints but just check how to get a price using the JAX-RS layer and WebSocket layer. In other words, we will define two customer use cases of our application.
The goal here is to ensure that we know how to use the application to be able to write test scenarios later. To do so, we will execute some requests manually on both fronts (HTTP and WebSocket).
Get a quote price the JAX-RS way
The endpoint we saw previously has been deployed on /<application_context>/api/quote/{quoteId}
with the context of the web application, application_context
. If you used the previous setup, it is, most likely, the artifact ID of the Maven project. Let's consider from now on that it is quote-manager
.
Here is what it returns for one of the quotes:
$ curl -v http://localhost:9090/quote-manager/api/quote/8 * Trying 127.0.0.1... * TCP_NODELAY set * Connected to localhost (127.0.0.1) port 9090 (#0) > GET /quote-manager/api/quote/8 HTTP/1.1 > Host: localhost:9090 > User-Agent: curl/7.52.1 > Accept: */* > < HTTP/1.1 200 OK < Server: Undefined Product Name - define product and version info in config/branding 0.0.0 < X-Powered-By: Servlet/3.1 JSP/2.3 (Undefined Product Name - define product and version info in config/branding 0.0.0 Java/Oracle Corporation/1.8) < Content-Type: application/json < Content-Length: 54 < * Curl_http_done: called premature == 0 * Connection #0 to host localhost left intact {"id":8,"name":"JOBS","customer_count":0,"value":59.4}
This kind of application often needs a kind of index endpoint to be able to browse quotes (in a nice user interface or a command-line interface, for instance). In our case, it is our find all endpoint, which supports pagination through the query parameters. Here is how to use it and the kind of data it returns:
$ curl -v http://localhost:9090/quote-manager/api/quote?from=0&to=5 * Trying 127.0.0.1... * TCP_NODELAY set * Connected to localhost (127.0.0.1) port 9090 (#0) > GET /quote-manager/api/quote?from=0 HTTP/1.1 > Host: localhost:9090 > User-Agent: curl/7.52.1 > Accept: */* > < HTTP/1.1 200 OK < Server: Undefined Product Name - define product and version info in config/branding 0.0.0 < X-Powered-By: Servlet/3.1 JSP/2.3 (Undefined Product Name - define product and version info in config/branding 0.0.0 Java/Oracle Corporation/1.8) < Content-Type: application/json < Content-Length: 575 < {"total":10,"items":[{"id":1,"name":"FLWS","customer_count":0,"value":9.0},{"id":2,"name":"VNET","customer_count":0,"value":5.19},{"id":3,"name":"XXII","customer_count":0,"value":2.2},{"id":4,"name":"TWOU","customer_count":0,"value":50.1},{"id":5,"name":"DDD","customer_count":0,"value":12.56},{"id":6,"name":"MMM","customer_count":0,"value":204.32},{"id":7,"name":"WBAI","customer_count":0,"value":10.34},{"id":8,"name":"JOBS","customer_count":0,"value":59.4},{"id":9,"name":"WUBA","customer_count":0,"value":62.63},{"id":10,"name":"CAFD","customer_count":0,"value":14.42}]}
Get the price, the WebSocket way
The WebSocket endpoint is deployed on /<application_context>/quote
, and some exchanges can look like the following:
connect> ws://localhost:9090/quote-manager/quote send> {"name":"VNET"} received< {"found":true,"value":5.19} send> {"name":"DDD"} received< {"found":true,"value":12.56} disconnect> Connection closed: Close status 1000 (Normal Closure)
What is interesting to see in this communication dump is the fact that the connection lasts for more than one request, and it is based on the symbol more than the identifier (compared to the previous JAX-RS samples).