Exposing Cassandra as a Data Service
This tutorial will guide you on how to expose data stored in Cassandra as a data service. Also, see the samples in Data Integration Samples.
Prerequisites
Set up the Cassandra server with a keyspace and table for this tutorial:
Installing and starting Cassandra
A Cassandra server of version 3.0 should be already running in the default port. For instructions, go to Apache Cassandra Documentation.
- Get familiar with the basics of Cassandra, including the prerequisites for using Cassandra, by going through the following: https://wiki.apache.org/cassandra/GettingStarted.
- Get familiar with using the Cassandra CLI, by going through the following: http://wiki.apache.org/cassandra/CassandraCli.
- Functionality of the underlying connector used for the Cassandra datasource: https://www.datastax.com/documentation/developer/java-driver/2.0/index.html.
- Also, note that Cassandra requires the most stable version of Java 7 or 8 you can deploy; preferably the Oracle/Sun JVM.
Creating a keyspace and a table
Execute the SQL commands as given below.
Create the keyspace named UsersKS:
CREATE KEYSPACE UsersKS WITH replication = {'class':'SimpleStrategy', 'replication_factor':3};
Create the table named Users in the UsersKS keyspace:
CREATE TABLE UsersKS.Users (id uuid, name text, country text, age int, PRIMARY KEY (id));
Creating a data service
Now, let's start creating the data service from scratch:
Download the product installer from here, and run the installer.
Let's call the installation location of your product the <EI_HOME> directory. This is located in a place specific to your OS as shown below:OS Home directory Mac OS /Library/WSO2/EnterpriseIntegrator/6.4.0
Windows C:\Program Files\WSO2\EnterpriseIntegrator\6.4.0\
Ubuntu /usr/lib/wso2/EnterpriseIntegrator/6.4.0
CentOS /usr/lib64/EnterpriseIntegrator/6.4.0
Start the ESB profile:
- Log in to the management console of ESB profile of WSO2 EI using the following URL on your browser: "https://localhost:9443/carbon/".
- Click Create under the Data Service menu to open the Create Data Service window.
Enter the following data service name.
Data Service Name CassandraDataService - Leave the default values for the other fields.
- Click Next to go to the Datasources screen
Connecting to the datasource
Click Add New Datasource. and enter the following details:
Datasource ID Cassandra Datasource Type Select Cassandra as the datasource. Cassandra Server Enter localhost. The rest of the datasource properties are optional. See the descriptions given below.
Creating a query to ADD user information
Now let's write a query for adding user information to the Users table of the UsersKS keyspace in your Cassandra server.
Click Add New Query and enter the following details:
Query ID Enter addUsers as the query ID. Datasource Select the datasource for which you are going to write a query. Select the Cassandra datasource that you created previously. SQL In this field, enter the SQL statement describing the data that should be added to the Cassandra datasource.
INSERT INTO UsersKS.Users (id, name, country, age) values (:id, :name, :country, :age)
Click Generate Input Mapping to create the input mappings.
- Edit the id column and change the SQL Type to UUID.
- Save the mapping.
- Edit the age column and change the SQL Type to INTEGER.
- Save the mapping and click Main Configuration to return to the query. You will now have the following input mappings:
- Save the query.
Creating a query to GET data
Now let's start writing a query for getting data from the datasource. The query will specify the data that should be fetched by this query, and the format that should be used to display data when the query is invoked.
Click Add New Query and enter the following details:
Query ID Enter getUsersbyID as the query ID. Datasource Select the datasource for which you are going to write a query. Select the Cassandra datasource that you created previously. SQL In this field, enter the SQL statement describing the data that should be retrieved from the Cassandra datasource.
SELECT id, age, country, name FROM UsersKS.Users WHERE id = :id
Click Generate Input Mapping to create the input mapping. The id is the input as shown below.
- Edit the id column and change the SQL Type to UUID.
- Save the mapping and click Main Configuration to return to the query.
Click Generate Response to create the output mapping. This defines how the employee details retrieved from the datasource will be presented in the result. Note that, by default, the output type is XML.
- Save the query.
- Click Next to open the Operations screen.
Creating SOAP operationa to invoke the queries
Click Add New Operation and enter the following information.
Operation Name addUsersOp Query ID addUsers - Save the operation.
Click Add New Operation and enter the following information.
Operation Name getUsersbyIDOp Query ID getUsersbyID - Save the operation.
You can now invoke the data service query using SOAP.
Creating a REST resource to invoke the query
Now, let's create REST resources to invoke the query created above. Alternatively, you can create SOAP operations to invoke the queries. See the previous section for instructions.
Click Add New Resource and enter the following information.
Resource Path users Resource Method POST Query ID addUsers - Save the resource.
Click Add New Resource and enter the following information.
Resource Path users/{id} Resource Method GET Query ID getUsersbyID - Save the resource.
You can now invoke the data service query using REST.
Finish creating the data service
Once you have defined the operation, click Finish to complete the data service creation process. You will now be taken to the Deployed Services screen, which shows all the data services deployed on the server.
Invoking your data service using SOAP
You can try the data service you created by using the TryIt tool that is in your product by default.
- Go to the Deployed Services screen.
- Click the Try this service link for the Cassandra data service. The TryIt Tool will open with the data service.
Post new data
- Select the addUsersOp operation you created earlier.
You need to provide the user details. Be sure to enter a UUID value as the user ID.
Click Send.
Get data
- Select the getUsersbyIDOp operation you created earlier.
- Enter the UUID value that you entered as the user's ID previously.
Click Send to see the details of the user you added previously.
Invoking your data service using REST
The HTTP requests sent for each of the resources using cURL would be as follows:
Post new data
Create a file called users-payload.xml file, and define the XML payload for posting new data as shown below. Note that the id is a UUID value.
<_postusers> <id>a05cdd7a-3d6a-11e8-b467-0ed5f89f718b</id> <name>Peter Parker</name> <country>USA</country> <age>20</age> </_postusers>
Send the following HTTP request from the location where the users-payload.xml file is stored:
curl -X POST -H 'Accept: application/xml' -H 'Content-Type: application/xml' --data "@users-payload.xml" http://localhost:8280/services/CassandraDataService/users
Get data
The service can be invoked in REST-style via curl (http://curl.haxx.se). Shown below is the curl command to invoke the GET resource:
curl -X GET http://localhost:8280/services/CassandraDataService.HTTPEndpoint/users/a05cdd7a-3d6a-11e8-b467-0ed5f89f718b