...
Info |
---|
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
Azure Cosmos DB Java with Spring SDK
Supported Operations
Operations | Method Supported |
---|
Insert |
Expand |
---|
title | Insert Operation APIs |
---|
| - org.springframework.data.repository.CrudRepository.save
- org.springframework.data.repository.CrudRepository.saveAll
- org.springframework.data.repository.reactive.ReactiveCrudRepository.save
- org.springframework.data.repository.reactive.ReactiveCrudRepository.saveAll
- com.microsoft.azure.spring.data.cosmosdb.repository.DocumentDbRepository.save
- com.microsoft.azure.spring.data.cosmosdb.repository.DocumentDbRepository.saveAll
- com.microsoft.azure.spring.data.cosmosdb.repository.CosmosRepository
|
|
org.springframework.data.repository.CrudRepository
 | Azure Cosmos DB Async Java with Spring SDK- .save
- com.microsoft.azure.spring.data.cosmosdb.repository.CosmosRepository.saveAll
- com.microsoft.azure.spring.data.cosmosdb.repository.ReactiveCosmosRepository.save
- com.microsoft.azure.spring.data.cosmosdb.repository.ReactiveCosmosRepository.saveAll
- com.azure.spring.data.cosmos.repository.CosmosRepository.save
- com.azure.spring.data.cosmos.repository.CosmosRepository.saveAll
- com.azure.spring.data.cosmos.repository.ReactiveCosmosRepository.save
- com.azure.spring.data.cosmos.repository.ReactiveCosmosRepository.saveAll
- com.microsoft.azure.spring.data.cosmosdb.core.CosmosTemplate.insert
- com.microsoft.azure.spring.data.cosmosdb.core.ReactiveCosmosTemplate.insert
|
|
Select |
Expand |
---|
title | Select Operation APIs |
---|
| - org.springframework.data.repository.CrudRepository.existsById
- org.springframework.data.repository
|
|
.ReactiveCosmosRepository- .CrudRepository.findAll
- org.springframework.data.repository.CrudRepository.findById
- org.springframework.data.repository.PagingAndSortingRepository.findAll
- org.springframework.data.repository.reactive.ReactiveCrudRepository.existsById
- org.springframework.data.repository.reactive.ReactiveCrudRepository.findAll
- org.springframework.data.repository.reactive.ReactiveCrudRepository.findAllById
- org.springframework.data.repository.reactive.ReactiveCrudRepository
|
|
 | Supported Operations
Operations | Method Supported |
---|
Insert | |
Select | - existsById
- findById
- findAll
- findAllById
- count
|
Delete | deletedeleteAlldeleteByIddeleteAllById- .findById
- org.springframework.data.repository.reactive.ReactiveSortingRepository.findAll
- com.azure.spring.data.cosmos.repository.CosmosRepository.findById
- com.azure.spring.data.cosmos.repository.CosmosRepository.findAll
- com.azure.spring.data.cosmos.repository.CosmosRepository.existsById
- com.azure.spring.data.cosmos.repository.CosmosRepository.count
- com.azure.spring.data.cosmos.repository.CosmosRepository.findAllById
- com.azure.spring.data.cosmos.repository.ReactiveCosmosRepository.findbyId
- com.azure.spring.data.cosmos.repository.ReactiveCosmosRepository.findAll
- com.azure.spring.data.cosmos.repository.ReactiveCosmosRepository.existsById
- com.azure.spring.data.cosmos.repository.ReactiveCosmosRepository.count
- com.azure.spring.data.cosmos.repository.ReactiveCosmosRepository.findAllById
- com.microsoft.azure.spring.data.cosmosdb.repository.CosmosRepository.findById
- com.microsoft.azure.spring.data.cosmosdb.repository.CosmosRepository.findAll
- com.microsoft.azure.spring.data.cosmosdb.repository.CosmosRepository.existsById
- com.microsoft.azure.spring.data.cosmosdb.repository.CosmosRepository.findAllById
- com.microsoft.azure.spring.data.cosmosdb.repository.CosmosRepository.count
- com.microsoft.azure.spring.data.cosmosdb.repository.DocumentDbRepository.findAll
- com.microsoft.azure.spring.data.cosmosdb.repository.DocumentDbRepository.existsById
- com.microsoft.azure.spring.data.cosmosdb.repository.DocumentDbRepository.findAllById
- com.microsoft.azure.spring.data.cosmosdb.repository.DocumentDbRepository.count
- com.microsoft.azure.spring.data.cosmosdb.repository.ReactiveSortingRepository.findAll
- com.microsoft.azure.spring.data.cosmosdb.core.CosmosOperations.findAll
- com.microsoft.azure.spring.data.cosmosdb.core.CosmosOperations.find
- com.microsoft.azure.spring.data.cosmosdb.core.CosmosOperations.findByIds
- com.microsoft.azure.spring.data.cosmosdb.core.CosmosOperations.exists
- com.microsoft.azure.spring.data.cosmosdb.core.CosmosOperations.count
- com.microsoft.azure.spring.data.cosmosdb.core.CosmosOperations.findById
- com.microsoft.azure.spring.data.cosmosdb.core.CosmosTemplate.findById
- com.microsoft.azure.spring.data.cosmosdb.core.ReactiveCosmosOperations.findAll
- com.microsoft.azure.spring.data.cosmosdb.core.ReactiveCosmosOperations.find
- com.microsoft.azure.spring.data.cosmosdb.core.ReactiveCosmosOperations.findByIds
- com.microsoft.azure.spring.data.cosmosdb.core.ReactiveCosmosOperations.exists
- com.microsoft.azure.spring.data.cosmosdb.core.ReactiveCosmosOperations.count
- com.microsoft.azure.spring.data.cosmosdb.core.ReactiveCosmosOperations.findById
- com.microsoft.azure.spring.data.cosmosdb.core.ReactiveCosmosTemplate.findById
- com.microsoft.azure.spring.data.cosmosdb.repository.ReactiveCosmosRepository.findById
- com.microsoft.azure.spring.data.cosmosdb.repository.ReactiveCosmosRepository.findAll
- com.microsoft.azure.spring.data.cosmosdb.repository.ReactiveCosmosRepository.count
- com.microsoft.azure.spring.data.cosmosdb.repository.ReactiveCosmosRepository.findAllById
- com.microsoft.azure.spring.data.cosmosdb.repository.ReactiveCosmosRepository.existsById
|
|
Delete |
Expand |
---|
title | Delete Operation APIs |
---|
| - org.springframework.data.repository.CrudRepository.delete
- org.springframework.data.repository.CrudRepository.deleteById
- org.springframework.data.repository.CrudRepository.deleteAllById
- org.springframework.data.repository.CrudRepository.deleteAll
- org.springframework.data.repository.reactive.ReactiveCrudRepository.delete
- org.springframework.data.repository.reactive.ReactiveCrudRepository.deleteAll
- org.springframework.data.repository.reactive.ReactiveCrudRepository.deleteAllById
- org.springframework.data.repository.reactive.ReactiveCrudRepository.deleteById
- com.azure.spring.data.cosmos.repository.CosmosRepository.deleteById
- com.azure.spring.data.cosmos.repository.CosmosRepository.delete
- com.azure.spring.data.cosmos.repository.CosmosRepository.deleteAll
- com.azure.spring.data.cosmos.repository.ReactiveCosmosRepository.deletebyId
- com.azure.spring.data.cosmos.repository.ReactiveCosmosRepository.deleteAll
- com.azure.spring.data.cosmos.repository.ReactiveCosmosRepository.delete
- com.microsoft.azure.spring.data.cosmosdb.core.CosmosOperations.deleteAll
- com.microsoft.azure.spring.data.cosmosdb.core.CosmosOperations.delete
- com.microsoft.azure.spring.data.cosmosdb.core.CosmosOperations.deleteCollection
- com.microsoft.azure.spring.data.cosmosdb.core.ReactiveCosmosOperations.deleteAll
- com.microsoft.azure.spring.data.cosmosdb.core.ReactiveCosmosOperations.delete
- com.microsoft.azure.spring.data.cosmosdb.core.ReactiveCosmosOperations.deleteCollection
- com.microsoft.azure.spring.data.cosmosdb.repository.ReactiveCosmosRepository.deleteById
- com.microsoft.azure.spring.data.cosmosdb.repository.ReactiveCosmosRepository.deleteAll
- com.microsoft.azure.spring.data.cosmosdb.repository.ReactiveCosmosRepository.delete
- com.microsoft.azure.spring.data.cosmosdb.repository.CosmosRepository.deleteById
- com.microsoft.azure.spring.data.cosmosdb.repository.DocumentDbRepository.deletebyId
- com.microsoft.azure.spring.data.cosmosdb.repository.DocumentDbRepository.deleteAll
- com.microsoft.azure.spring.data.cosmosdb.repository.DocumentDbRepository.delete
|
|
Info |
---|
Above mentioned methods are supported for both Synchronous and Asynchronous clients. |
Objects
Icon | Description |
---|
Image Modified
| Java CosmosDB Database |
Image Modified
| Java CosmosDB Collection |
Image Modified
| Java Unknown CosmosDB Database |
Image Modified
| Java Unknown CosmosDB Collection |
Links
Links are created for transaction and function point needs:
Link type | Source and destination of link | Methods Supported |
---|
parentLink | Between CosmosDB Database object and CosmosDB Collection |
|
useInsertLink | Between the caller Java Method objects and CosmosDB Collection | |
useSelectLink | - existsById
- findById
- findAll
- findAllById
- count
|
useDeleteLink | - delete
- deleteAll
- deleteById
- deleteAllById
|
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.
CosmosDB Database Connection from Properties File
Expand |
---|
|
Code Block |
---|
language | text |
---|
title | application.properties |
---|
| azure.cosmosdb.uri=https://cosmoswithspring.documents.azure.com:443/
azure.cosmosdb.key=2VanbwRYNeJKCUjb5StsnBKaatDcKGRUckHnlSUVSJXifWL3exjwjP2o6rJpt8fY24MRmtnctzcE8hWAlBsRZw==
azure.cosmosdb.database=cosmoswithspring |
Code Block |
---|
language | java |
---|
title | Cosmos DB Client Creation |
---|
| @Configuration
@EnableDocumentDbRepositories
public class AppConfig extends AbstractDocumentDbConfiguration {
@Value("${azure.documentdb.uri}")
private String uri;
@Value("${azure.documentdb.key}")
private String key;
@Value("${azure.documentdb.database}")
private String dbName;
public DocumentClient documentClient() {
return new DocumentClient(uri, key, ConnectionPolicy.GetDefault(), ConsistencyLevel.Session);
}
public String getDatabase() {
return dbName;
}
}
|

|
Select Operation
Expand |
---|
|
Code Block |
---|
language | java |
---|
title | CreateDocument |
---|
| @Autowired
private AlertRepository alertRepository;
@GetMapping("/all")
public Iterable getAllAlerts() {
if (StreamSupport.stream(alertRepository.findAll().spliterator(), false).count() > 0) {
return alertRepository.findAll();
} else {
throw new ValidationException("No records found.");
}
}
@GetMapping("/count")
public long countAlert() {
if (StreamSupport.stream(alertRepository.findAll().spliterator(), false).count() > 0) {
return alertRepository.count();
} else {
throw new ValidationException("No records found.");
}
}
|
 
|
Insert Operation
Expand |
---|
|
Code Block |
---|
language | java |
---|
title | QueryDocuments |
---|
| @PostMapping("/add")
public StatusMessage addAlert(@Valid @RequestBody Alert alert) {
Alert returnedAlert = alertRepository.save(alert);
if (returnedAlert.getAlertId().isEmpty()) {
throw new ValidationException("Error accessing Cosmos database.");
}
return new StatusMessage("200", "Alert Added");
} |

|
Delete Operation
Expand |
---|
|
Code Block |
---|
language | java |
---|
title | DeleteDocument |
---|
| @GetMapping("/deleteall")
public StatusMessage deleteAllAlert() {
alertRepository.deleteAll();
return new StatusMessage("200", "Alert Deleted");
}
@DeleteMapping("/delete/{id}")
public StatusMessage deleteAlert(@PathVariable String id) throws NotFoundException {
//Optional<Alert> returnedAlert = alertRepository.findById(id);
if (!alertRepository.existsById(id)) {
throw new NotFoundException("No alert found with id: " + id);
}
alertRepository.deleteById(id);
return new StatusMessage("200", "alert deleted.");
}
|
 
|
Query Method Support
Expand |
---|
|
Code Block |
---|
language | java |
---|
title | Repo with query method |
---|
| @Repository
public interface AlertRepository extends CosmosRepository<Alert, String> {
// repo for alert
List<Alert> findById(String priority);
} |
Code Block |
---|
language | java |
---|
title | Controller |
---|
| @GetMapping("find/{id}")
public Alert findAlert(@PathVariable String id) throws NotFoundException {
return alertRepository.findById(id).orElseThrow(
() -> new NotFoundException("No alert found with id: " + id)
);
} |

|
Query Methods with @Query annotation
Expand |
---|
|
Code Block |
---|
language | java |
---|
title | Repository with @query methods |
---|
| @Repository
public interface AddressRepository extends CosmosRepository<Address, String> {
void deleteByPostalCodeAndCity(String postalCode, String city);
void deleteByCity(String city);
Iterable<Address> findByPostalCodeAndCity(String postalCode, String city);
Iterable<Address> findByCity(String city);
Iterable<Address> findByCityIn(List<String> cities);
Iterable<Address> findByPostalCode(String postalCode);
Iterable<Address> findByPostalCodeInAndCity(List<String> postalCodes, String city);
Iterable<Address> findByStreetOrCity(String street, String city);
@Query("select * from a where a.city = @city")
List<Address> annotatedFindListByCity(@Param("city") String city);
@Query("select * from a where a.city = @city")
Page<Address> annotatedFindByCity(@Param("city") String city, Pageable pageable);
} |
Code Block |
---|
| public void testAnnotatedQuery() {
addressRepository.saveAll(Arrays.asList(Address.TEST_ADDRESS1_PARTITION1, Address.TEST_ADDRESS1_PARTITION2));
final List<Address> result = addressRepository.annotatedFindListByCity(Address.TEST_ADDRESS1_PARTITION1.getCity());
assertThat(result).isNotNull();
assertThat(result.size()).isEqualTo(1);
assertThat(result.get(0)).isEqualTo(Address.TEST_ADDRESS1_PARTITION1);
} |
Image Added
|
Asynchronous API
Expand |
---|
title | All corresponding methods are represented and results are very similar to its Synchronous counterpart |
---|
|
Code Block |
---|
language | java |
---|
title | Async Client creation |
---|
| import com.microsoft.azure.spring.data.cosmosdb.repository.ReactiveCosmosRepository;
import info.hayslip.AlertHoarder.models.Alert;
import org.springframework.stereotype.Repository;
@Repository
public interface AlertReactRepository extends ReactiveCosmosRepository<Alert, String> {
// repo for alert
} |
|
Evolutions
...
...
Limitations
- Database/Collection is created as unknown, if the name is not retrieved from the properties file or if the name could not be resolved.
Future Scope
- To Support Query Methods using @Query annotation