Page tree
Skip to end of metadata
Go to start of metadata

CAST supports Azure Cosmos DB via its NoSQL for Java extension. Details about the support provided for Java source code is explained below.

Supported Client Libraries

Supported Operations

OperationsMethod Supported
 Methods supported for insertv - v2
 Methods supported for insert - v4
 Methods supported for Update - v2

 Methods supported for update - v4
 Method supported for select - v2
 Methods supported for select - v4
 Methods supported for delete - v2
 Methods supported for delete - v4

Above mentioned methods are supported for both Synchronous and Asynchronous clients.



Java CosmosDB Database

Java CosmosDB Collection

Java Unknown CosmosDB Database

Java Unknown CosmosDB Collection


Links are created for transaction and function point needs:

Link typeSource and destination of linkMethods Supported

From Java CosmosDB Collection object to Java CosmosDB Database object

useLinkBetween the caller Java Method objects and Java CosmosDB Collection object
  • CreateCollection
  • CreateDocument
  • createItem
  • ReplaceDocument
  • replaceItem


  • ReadDocument
  • ReadDocuments
  • QueryDocuments
  • ReadCollection
  • queryItems
  • readItem
  • readAllItems
  • readMany
  • DeleteDocument
  • DeleteCollection
  • deleteItem

What results can you expect?

Once the analysis/snapshot generation is completed, you can view the results in the normal manner (for example via CAST Enlighten). Some examples are shown below.

Cosmos DB Client Creation

 CosmoDB Client creation
CosmoDB client creation
private static final String HOST = "[YOUR_ENDPOINT_HERE]";
 private static final String MASTER_KEY = "[YOUR_KEY_HERE]";
 private static DocumentClient documentClient = new DocumentClient(HOST, MASTER_KEY,
                 ConnectionPolicy.GetDefault(), ConsistencyLevel.Session);
 public static DocumentClient getDocumentClient() {
     return documentClient;
CosmoDb Async client creation
public AsyncDocumentClient client = new AsyncDocumentClient.Builder()

Insert Data Operation

 Insert Data Operation - v2
	public static Family andersenFamily = new Family();

	public void TestCreateDocument() throws DocumentClientException {
		// Insert your Java objects as documents
		System.out.println("Creating doc");


		this.client.createDocument("/dbs/familydb/colls/familycoll", andersenFamily, new RequestOptions(), true);

		System.out.println("Done Creating doc");

 Insert Data operation - v4
  public Single<OutcomingAccountStatus> createStatus(IncomingCreateAccountStatus incoming) {

    Mono<YapeAccountStatus> createYapeAccountStatus =
        defer(() -> {
          YapeAccountStatus yapeAccountStatus = new YapeAccountStatus();

          return cosmosAsyncDatabase.getContainer(CONTAINER_YAPE_ACCOUNT_STATUS)
                  new PartitionKey(yapeAccountStatus.getIdYapeAccount()),
                  new CosmosItemRequestOptions())
              .map(itemResponse -> yapeAccountStatus);

Select Operation

 Select Data Operation - v2
public void TestQueryDocuments() {

		System.out.println("Querying db...");
		FeedResponse<Document> queryResults = this.client.queryDocuments("/dbs/familydb/colls/familycoll",
				"SELECT * FROM Family WHERE = 'Andersen.1'", null);

		System.out.println("Running SQL query...");
		for (Document family : queryResults.getQueryIterable()) {
			System.out.println(String.format("\tRead %s", family));


public void TestReadDocument() throws DocumentClientException {
		this.client.readDocument("/dbs/familydb/colls/familycoll/docs/Andersen.1", null);

public void TestReadDocuments() throws DocumentClientException {
		this.client.readDocuments("/dbs/familydb", null);

 Update Data Operation - v4
private Mono<YapeAccountStatus> getLastStatusMono(String idYapeAccount) {
SqlQuerySpec sqsGetLastStatusQuery = SqlBuilder.create()
.query("select top 1 s.status from s where s.idYapeAccount = @idYapeAccount "
+ "and s.status != @statusDeleted order by s.creationDate desc")
new SqlParameter("@idYapeAccount", idYapeAccount),
new SqlParameter("@statusDeleted", AccountStatus.DELETED.getCode()))

CosmosQueryRequestOptions options = new CosmosQueryRequestOptions();
options.setPartitionKey(new PartitionKey(idYapeAccount));

return cosmosAsyncDatabase.getContainer(CONTAINER_YAPE_ACCOUNT_STATUS)
.queryItems(sqsGetLastStatusQuery, options, YapeAccountStatus.class)

Update Operation

 Update Data Operation - v2
public void TestReplaceDocument() throws DocumentClientException {
		// Update a property
		this.client.replaceDocument("/dbs/familydb/colls/familycoll/docs/Andersen.1", andersenFamily, null);

 Update Data Operation - v4
 private Mono<BlockedResources> replaceItem(BlockedResources blockedResources, CosmosItemRequestOptions options) {

    return getBlockedResourcesContainer().replaceItem(blockedResources, blockedResources.getId(),
        new PartitionKey(blockedResources.getResource()), options)
        .doOnSuccess(itemResponse -> blockedResources.set_etag(itemResponse.getETag()))
        .map(itemResponse -> blockedResources);

Delete Operation

 Delete Data Operation
public void TestDeleteDocument() throws DocumentClientException {
		this.client.deleteDocument("", null);

Support for Collection based methods are provided, for example:

  • createCollection
  • deleteCollection
  • readCollection


Major limitations

No support for Cassandra API, MongoDB API, Gremlin API, Table API or other APIs built by Microsoft for accessing an Azure Cosmos DB service. See the API reference here:

Minor limitations     

  • Database and collection names are resolved as known objects when a connection string is passed to the client directly:

    • Example: This connection string is passed to client - "/dbs/familydb/colls/familycoll" 

  • Database and collection are marked as Unknown when Database Collection and document objects are passed as an argument in CRUD methods.

  • Runtime Ambiguities are not resolved:

    • Example: Different databases are accessed in if/else cases based on some conditions

  • No labels