# dennisholee/springdojo architecture

> Architecture diagram of the GitHub repository dennisholee/springdojo, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/dennisholee/springdojo
- Repository: https://github.com/dennisholee/springdojo

## Overview

This repository is a collection of independent Java/Spring examples, not one integrated application. The sampled code covers document retrieval and knowledge-graph ingestion, AI-assisted configuration and data modelling, tool-using agents, and a distributed customer-domain onboarding example. The graph shows those demonstrated workflows and their explicit dependencies; no README was supplied, and unsampled modules are not connected speculatively.

Main entry points: [`47_NativeDistributedSQL/src/main/java/io/forest/cdm/onboarding/OnboardingService.java`](https://github.com/dennisholee/springdojo/blob/master/47_NativeDistributedSQL/src/main/java/io/forest/cdm/onboarding/OnboardingService.java) (Onboarding orchestration), [`36_RAG/src/main/java/io/forest/rag/IngestionPipeline.java`](https://github.com/dennisholee/springdojo/blob/master/36_RAG/src/main/java/io/forest/rag/IngestionPipeline.java) (URL ingestion), [`44_SpringAIDeepDive/src/main/java/io/forest/springai/Pipeline.java`](https://github.com/dennisholee/springdojo/blob/master/44_SpringAIDeepDive/src/main/java/io/forest/springai/Pipeline.java) (RAG evaluation demo), [`40_DataModelling/src/main/java/io/forest/datamodel/Pipeline.java`](https://github.com/dennisholee/springdojo/blob/master/40_DataModelling/src/main/java/io/forest/datamodel/Pipeline.java) (Schema enrichment)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_rag["Retrieval and graphs"]
  node_rag_ingest["URL ingestion"]
  node_docling["Docling reader"]
  node_token_split["Token splitting"]
  node_vector_store[("Vector store")]
  node_kg_ingest["Graph ingestion"]
  node_neo4j_store[("Neo4j vector store")]
  node_deep_dive["RAG evaluation demo<br/>[Pipeline.java]"]
  node_chat_model{{"Chat model"}}
end

subgraph group_ai["AI demonstrations"]
  node_gen_config["Config generation<br/>[Pipeline.java]"]
  node_model_services{{"OpenAI / Mistral APIs"}}
  node_data_model["Schema enrichment<br/>[Pipeline.java]"]
  node_schema_generator["Schema generator"]
  node_agent_service["Tool-using agent<br/>[AgentService.java]"]
  node_mcp_tools["MCP tool callbacks"]
end

subgraph group_cdm["Customer domain"]
  node_onboarding["Onboarding orchestration"]
  node_party["Party service<br/>[PartyService.java]"]
  node_relationship["Relationship service"]
  node_product["Product holding"]
  node_contact["Contact point service"]
  node_distributed_db[("Distributed SQL database")]
end

subgraph group_examples["Other examples"]
  node_link_service["Reactive link example<br/>[LinkService.java]"]
  node_party_test["Party service example<br/>[PartyService.java]"]
  node_party_repo_test["Party repository"]
  node_address_api{{"Address API"}}
end

node_developer(("User / operator"))

node_developer -->|"supplies URL"| node_rag_ingest
node_rag_ingest -->|"reads document"| node_docling
node_rag_ingest -->|"chunks text"| node_token_split
node_rag_ingest -->|"adds chunks"| node_vector_store
node_developer -->|"starts ingestion"| node_kg_ingest
node_kg_ingest -->|"provides store"| node_neo4j_store
node_developer -->|"submits query"| node_deep_dive
node_deep_dive -->|"indexes and searches"| node_vector_store
node_deep_dive -->|"requests answer"| node_chat_model
node_deep_dive -->|"evaluates relevance"| node_chat_model
node_developer -->|"starts demo"| node_gen_config
node_gen_config -->|"prompts models"| node_model_services
node_developer -->|"starts demo"| node_data_model
node_data_model -->|"generates schema"| node_schema_generator
node_data_model -->|"enriches data"| node_chat_model
node_developer -->|"submits message"| node_agent_service
node_agent_service -->|"dispatches tool calls"| node_mcp_tools
node_agent_service -->|"sends prompt"| node_chat_model
node_developer -->|"requests onboarding"| node_onboarding
node_onboarding -->|"creates party"| node_party
node_onboarding -->|"creates relationship"| node_relationship
node_onboarding -->|"creates contact point"| node_contact
node_onboarding -->|"creates holding"| node_product
node_product -->|"checks party"| node_party
node_party -->|"reads and writes"| node_distributed_db
node_relationship -->|"reads and writes"| node_distributed_db
node_product -->|"reads and writes"| node_distributed_db
node_developer -->|"requests endpoint"| node_link_service
node_developer -->|"requests party"| node_party_test
node_party_test -->|"reads and saves"| node_party_repo_test
node_party_test -->|"fetches address"| node_address_api

click node_rag_ingest "https://github.com/dennisholee/springdojo/blob/master/36_RAG/src/main/java/io/forest/rag/IngestionPipeline.java"
click node_docling "https://github.com/dennisholee/springdojo/blob/master/36_RAG/src/main/java/io/forest/rag/DoclingDocumentReader.java"
click node_token_split "https://github.com/dennisholee/springdojo/blob/master/36_RAG/src/main/java/io/forest/rag/IngestionPipeline.java"
click node_kg_ingest "https://github.com/dennisholee/springdojo/blob/master/38_KnowledgeGraph/src/main/java/io/forest/kg/IngestionPipeline.java"
click node_neo4j_store "https://github.com/dennisholee/springdojo/blob/master/38_KnowledgeGraph/src/main/java/io/forest/kg/IngestionPipeline.java"
click node_deep_dive "https://github.com/dennisholee/springdojo/blob/master/44_SpringAIDeepDive/src/main/java/io/forest/springai/Pipeline.java"
click node_gen_config "https://github.com/dennisholee/springdojo/blob/master/39_GenConfig/src/main/java/io/forest/genconfig/Pipeline.java"
click node_data_model "https://github.com/dennisholee/springdojo/blob/master/40_DataModelling/src/main/java/io/forest/datamodel/Pipeline.java"
click node_agent_service "https://github.com/dennisholee/springdojo/blob/master/41_MultiAgent/src/main/java/io/forest/multiagent/AgentService.java"
click node_onboarding "https://github.com/dennisholee/springdojo/blob/master/47_NativeDistributedSQL/src/main/java/io/forest/cdm/onboarding/OnboardingService.java"
click node_party "https://github.com/dennisholee/springdojo/blob/master/47_NativeDistributedSQL/src/main/java/io/forest/cdm/party/PartyService.java"
click node_relationship "https://github.com/dennisholee/springdojo/blob/master/47_NativeDistributedSQL/src/main/java/io/forest/cdm/relationship/RelationshipService.java"
click node_product "https://github.com/dennisholee/springdojo/blob/master/47_NativeDistributedSQL/src/main/java/io/forest/cdm/productholding/ProductHoldingService.java"
click node_contact "https://github.com/dennisholee/springdojo/blob/master/47_NativeDistributedSQL/src/main/java/io/forest/cdm/onboarding/OnboardingService.java"
click node_link_service "https://github.com/dennisholee/springdojo/blob/master/01_WebReflex/src/main/java/com/acme/LinkService.java"
click node_party_test "https://github.com/dennisholee/springdojo/blob/master/33_TestContext/src/main/java/io/forest/testcontext/PartyService.java"
click node_party_repo_test "https://github.com/dennisholee/springdojo/blob/master/33_TestContext/src/main/java/io/forest/testcontext/PartyRepository.java"
click node_address_api "https://github.com/dennisholee/springdojo/blob/master/33_TestContext/src/main/java/io/forest/testcontext/AddressAPIClient.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_rag_ingest,node_docling,node_token_split,node_vector_store,node_kg_ingest,node_neo4j_store,node_deep_dive,node_chat_model,node_developer toneBlue
class node_gen_config,node_model_services,node_data_model,node_schema_generator,node_agent_service,node_mcp_tools toneAmber
class node_onboarding,node_party,node_relationship,node_product,node_contact,node_distributed_db toneMint
class node_link_service,node_party_test,node_party_repo_test,node_address_api toneRose
```

## Components

### Retrieval and graphs

- [URL ingestion](https://github.com/dennisholee/springdojo/blob/master/36_RAG/src/main/java/io/forest/rag/IngestionPipeline.java): `36_RAG/src/main/java/io/forest/rag/IngestionPipeline.java`
- [Docling reader](https://github.com/dennisholee/springdojo/blob/master/36_RAG/src/main/java/io/forest/rag/DoclingDocumentReader.java): `36_RAG/src/main/java/io/forest/rag/DoclingDocumentReader.java`
- [Token splitting](https://github.com/dennisholee/springdojo/blob/master/36_RAG/src/main/java/io/forest/rag/IngestionPipeline.java): `36_RAG/src/main/java/io/forest/rag/IngestionPipeline.java`
- **Vector store**
- [Graph ingestion](https://github.com/dennisholee/springdojo/blob/master/38_KnowledgeGraph/src/main/java/io/forest/kg/IngestionPipeline.java): `38_KnowledgeGraph/src/main/java/io/forest/kg/IngestionPipeline.java`
- [Neo4j vector store](https://github.com/dennisholee/springdojo/blob/master/38_KnowledgeGraph/src/main/java/io/forest/kg/IngestionPipeline.java): `38_KnowledgeGraph/src/main/java/io/forest/kg/IngestionPipeline.java`
- [RAG evaluation demo](https://github.com/dennisholee/springdojo/blob/master/44_SpringAIDeepDive/src/main/java/io/forest/springai/Pipeline.java): `44_SpringAIDeepDive/src/main/java/io/forest/springai/Pipeline.java`
- **Chat model**

### AI demonstrations

- [Config generation](https://github.com/dennisholee/springdojo/blob/master/39_GenConfig/src/main/java/io/forest/genconfig/Pipeline.java): `39_GenConfig/src/main/java/io/forest/genconfig/Pipeline.java`
- **OpenAI / Mistral APIs**
- [Schema enrichment](https://github.com/dennisholee/springdojo/blob/master/40_DataModelling/src/main/java/io/forest/datamodel/Pipeline.java): `40_DataModelling/src/main/java/io/forest/datamodel/Pipeline.java`
- **Schema generator**
- [Tool-using agent](https://github.com/dennisholee/springdojo/blob/master/41_MultiAgent/src/main/java/io/forest/multiagent/AgentService.java): `41_MultiAgent/src/main/java/io/forest/multiagent/AgentService.java`
- **MCP tool callbacks**

### Customer domain

- [Onboarding orchestration](https://github.com/dennisholee/springdojo/blob/master/47_NativeDistributedSQL/src/main/java/io/forest/cdm/onboarding/OnboardingService.java): `47_NativeDistributedSQL/src/main/java/io/forest/cdm/onboarding/OnboardingService.java`
- [Party service](https://github.com/dennisholee/springdojo/blob/master/47_NativeDistributedSQL/src/main/java/io/forest/cdm/party/PartyService.java): `47_NativeDistributedSQL/src/main/java/io/forest/cdm/party/PartyService.java`
- [Relationship service](https://github.com/dennisholee/springdojo/blob/master/47_NativeDistributedSQL/src/main/java/io/forest/cdm/relationship/RelationshipService.java): `47_NativeDistributedSQL/src/main/java/io/forest/cdm/relationship/RelationshipService.java`
- [Product holding](https://github.com/dennisholee/springdojo/blob/master/47_NativeDistributedSQL/src/main/java/io/forest/cdm/productholding/ProductHoldingService.java): `47_NativeDistributedSQL/src/main/java/io/forest/cdm/productholding/ProductHoldingService.java`
- [Contact point service](https://github.com/dennisholee/springdojo/blob/master/47_NativeDistributedSQL/src/main/java/io/forest/cdm/onboarding/OnboardingService.java): `47_NativeDistributedSQL/src/main/java/io/forest/cdm/onboarding/OnboardingService.java`
- **Distributed SQL database**

### Other examples

- [Reactive link example](https://github.com/dennisholee/springdojo/blob/master/01_WebReflex/src/main/java/com/acme/LinkService.java): `01_WebReflex/src/main/java/com/acme/LinkService.java`
- [Party service example](https://github.com/dennisholee/springdojo/blob/master/33_TestContext/src/main/java/io/forest/testcontext/PartyService.java): `33_TestContext/src/main/java/io/forest/testcontext/PartyService.java`
- [Party repository](https://github.com/dennisholee/springdojo/blob/master/33_TestContext/src/main/java/io/forest/testcontext/PartyRepository.java): `33_TestContext/src/main/java/io/forest/testcontext/PartyRepository.java`
- [Address API](https://github.com/dennisholee/springdojo/blob/master/33_TestContext/src/main/java/io/forest/testcontext/AddressAPIClient.java): `33_TestContext/src/main/java/io/forest/testcontext/AddressAPIClient.java`

### Other components

- **User / operator**

## Connections

- User / operator → URL ingestion: supplies URL
- URL ingestion → Docling reader: reads document
- URL ingestion → Token splitting: chunks text
- URL ingestion → Vector store: adds chunks
- User / operator → Graph ingestion: starts ingestion
- Graph ingestion → Neo4j vector store: provides store
- User / operator → RAG evaluation demo: submits query
- RAG evaluation demo → Vector store: indexes and searches
- RAG evaluation demo → Chat model: requests answer
- RAG evaluation demo → Chat model: evaluates relevance
- User / operator → Config generation: starts demo
- Config generation → OpenAI / Mistral APIs: prompts models
- User / operator → Schema enrichment: starts demo
- Schema enrichment → Schema generator: generates schema
- Schema enrichment → Chat model: enriches data
- User / operator → Tool-using agent: submits message
- Tool-using agent → MCP tool callbacks: dispatches tool calls
- Tool-using agent → Chat model: sends prompt
- User / operator → Onboarding orchestration: requests onboarding
- Onboarding orchestration → Party service: creates party
- Onboarding orchestration → Relationship service: creates relationship
- Onboarding orchestration → Contact point service: creates contact point
- Onboarding orchestration → Product holding: creates holding
- Product holding → Party service: checks party
- Party service → Distributed SQL database: reads and writes
- Relationship service → Distributed SQL database: reads and writes
- Product holding → Distributed SQL database: reads and writes
- User / operator → Reactive link example: requests endpoint
- User / operator → Party service example: requests party
- Party service example → Party repository: reads and saves
- Party service example → Address API: fetches address
