The goal of this project is to provide an easy, consistent framework for creating CRUD rest api’s for interacting with custom business data objects.
See the camunda-demo-starter
project to quickly start a fully functional Camunda 7 or 8 demo environment that includes this project.
Once the default demo is started, browse here to see the data api’s available:
This project is a Spring Boot Java Application and uses Spring, JPA, HATEOS, Lombok are used to quickly build CRUD API’s that are standardized and reusable.
Clone this project (the camunda-demo-starter
project) to your local machine
git clone https://github.com/camunda-consulting/camunda-demo-starter
The camunda-data-api-demo
directory contains all the relevant source code.
Build the project using maven
cd camunda-data-api-demo mvn clean install
Run the data api.
Note
|
Remember to stop the data-api container that is started by default as part of the camunda-demo-starter project
|
cd camunda-data-api-demo mvn clean spring-boot:run -Dspring-boot.run.profiles=data,user,case,cors
Two entities exist and work with the prebuilt demo (User and Case). They are preloaded with data. See the User
and Case
examples in the src/main/java/com/camunda/poc/starter/data
.
See the User
data api here: http://localhost:9000/api/users
See the Case
data api here: http://localhost:9000/api/cases
Note
|
The ReactJS Demo is configured to use the exposed Data API relatively easily |
In many cases you may need to add some customer data.
In order to add a new entity, it’s necessary to create a config
, entity
and Repository
to expose a new API.
For example, let’s say the customer would like to include an entity called TodoItem
.
Entities are simple java objects that represent the new business data. For example, create a new class named TodoItem
inside a new package named com.camunda.poc.starter.data.todo.entity
.
For example:
package com.camunda.poc.starter.data.todo.entity;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Getter;
import lombok.Setter;
import org.springframework.context.annotation.Profile;
import javax.persistence.*;
@Profile("todo")
@Entity(name="poc_todo")
@Getter
@Setter
public class TodoItem {
private static final long serialVersionUID = -209114353715280555L;
private @Version
@JsonIgnore
Long version;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(nullable=true)
private String title;
@Column(nullable=true)
private String details;
}
By default, entities will be saved to a postgresql database. If you followed the Quick Start
steps in the camunda-demo-starter
project, the postgres-camunda
container should be running.
Add a Spring Data JPA Repository like so:
package com.camunda.poc.starter.data.todo.repo;
import com.camunda.poc.starter.data.todo.entity.TodoItem;
import org.springframework.context.annotation.Profile;
import org.springframework.data.repository.PagingAndSortingRepository;
@Profile("todo")
public interface TodoItemRepository extends PagingAndSortingRepository<TodoItem, Long>{
}
The Config class is used to automatically create table objects in the database. Config class also controls the data that is pre-populated inside the postgresql db. When the camunda-data-api
project is run, listeners in the config class creates the db schema and refreshes data in the database.
For the TodoItem
example, copy the UserEntityCreateConfig.java
.
Remember to change this line to match the new Entity:
metadata.addAnnotatedClass(TodoItem.class);
and change the onApplicationEventCreateContact
method like so:
@EventListener
@org.springframework.core.annotation.Order(20)
public void onApplicationEventCreateContact(ContextRefreshedEvent event) throws SQLException {
if (repository.count() == 0) {
LOGGER.info("\n\n **** Create Todo Item Post Init Hook ***** \n\n ");
TodoItem todoItem = new TodoItem();
todoItem.setTitle("Add TodoItem Business Data Object");
todoItem.setDetails("... this will make the demo awesome!");
repository.save(todoItem);
LOGGER.info("\n\n **** TodoItem Created ****** \n\n");
}
}
When demoing or distributing it makes sense to build this project with docker-compose. When you follow the "Quick Start" steps in the camunda-demo-starter project, the docker image is already built and deployed as a GitHub Package. But, if you are customizing this project, you can also run the docker-compose command like so:
docker-compose -f docker-compose.data-api.yml up -d --build data-api