# parasoft/parabank architecture

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

- Interactive diagram: https://gitdiagram.com/parasoft/parabank
- Repository: https://github.com/parasoft/parabank

## Overview

ParaBank is a demo online-banking application with REST and SOAP services. A typical workflow enters through the web/API layer, reaches banking operations, and uses DAO-backed persistence; the documented product also includes loan processing, administration, and a separate bookstore example. The sampled evidence supports key manager-to-DAO dependencies and REST/SOAP client access, but not every controller-to-service route or the full loan and bookstore wiring, so those links are omitted or marked unverified.

Main entry points: [`src/main/java/com/parasoft/parabank/domain/logic/impl/BankManagerImpl.java`](https://github.com/parasoft/parabank/blob/master/src/main/java/com/parasoft/parabank/domain/logic/impl/BankManagerImpl.java) (Bank operations), [`src/main/java/com/parasoft/parabank/dao`](https://github.com/parasoft/parabank/tree/master/src/main/java/com/parasoft/parabank/dao) (Bank DAO interfaces), [`src/main/java/com/parasoft/parabank/web/controller/RestServiceProxyController.java`](https://github.com/parasoft/parabank/blob/master/src/main/java/com/parasoft/parabank/web/controller/RestServiceProxyController.java) (REST service proxy), [`src/main/java/com/parasoft/parabank/util/AccessModeController.java`](https://github.com/parasoft/parabank/blob/master/src/main/java/com/parasoft/parabank/util/AccessModeController.java) (Service access modes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web and APIs"]
  node_webui["Banking web flows"]
  node_restproxy["REST service proxy"]
  node_bankapi["REST and SOAP contract"]
  node_accessmode["Service access modes"]
end

subgraph group_banking["Banking domain"]
  node_bankmanager["Bank operations"]
  node_bankmodels["Banking records"]
  node_transactions["Transaction search"]
  node_admin["Administration"]
  node_news["News management"]
end

subgraph group_storage["Persistence"]
  node_dao["Bank DAO interfaces"]
  node_jdbc["JDBC implementations"]
  node_hsqldb[("HyperSQL database")]
end

subgraph group_loans["Loan processing"]
  node_loanproviders["Loan providers"]
  node_loanservice["Loan processor service"]
end

subgraph group_bookstore["Bookstore example"]
  node_bookcart["Cart management<br/>[CartManager.java]"]
  node_bookservice["Book cart service<br/>[CartService.java]"]
  node_bookdb[("Bookstore database<br/>[BookStoreDB.java]")]
end

node_customer(("Bank customer"))

node_customer -.->|"uses"| node_webui
node_customer -.->|"calls"| node_restproxy
node_restproxy -->|"delegates to"| node_accessmode
node_accessmode -->|"calls SOAP"| node_bankapi
node_accessmode -->|"calls REST"| node_bankapi
node_restproxy -->|"uses operations"| node_bankmanager
node_bankmanager -->|"uses DAOs"| node_dao
node_dao -.->|"implemented by"| node_jdbc
node_jdbc -.->|"persists to"| node_hsqldb
node_bankmanager -->|"operates on"| node_bankmodels
node_transactions -->|"filters records"| node_bankmodels
node_admin -->|"uses admin DAO"| node_dao
node_news -.->|"uses news DAO"| node_dao
node_bankmanager -->|"requests loan"| node_loanproviders
node_loanservice -.->|"dispatches"| node_loanproviders
node_bookservice -->|"delegates to"| node_bookcart
node_bookcart -.->|"uses storage"| node_bookdb

click node_webui "https://github.com/parasoft/parabank/tree/master/src/main/java/com/parasoft/parabank/web/controller"
click node_restproxy "https://github.com/parasoft/parabank/blob/master/src/main/java/com/parasoft/parabank/web/controller/RestServiceProxyController.java"
click node_bankapi "https://github.com/parasoft/parabank/blob/master/src/main/java/com/parasoft/parabank/service/ParaBankService.java"
click node_accessmode "https://github.com/parasoft/parabank/blob/master/src/main/java/com/parasoft/parabank/util/AccessModeController.java"
click node_bankmanager "https://github.com/parasoft/parabank/blob/master/src/main/java/com/parasoft/parabank/domain/logic/impl/BankManagerImpl.java"
click node_bankmodels "https://github.com/parasoft/parabank/tree/master/src/main/java/com/parasoft/parabank/domain"
click node_transactions "https://github.com/parasoft/parabank/blob/master/src/main/java/com/parasoft/parabank/dao/jdbc/JdbcTransactionQueryRestrictor.java"
click node_admin "https://github.com/parasoft/parabank/blob/master/src/main/java/com/parasoft/parabank/domain/logic/impl/AdminManagerImpl.java"
click node_news "https://github.com/parasoft/parabank/blob/master/src/main/java/com/parasoft/parabank/domain/logic/impl/NewsManagerImpl.java"
click node_dao "https://github.com/parasoft/parabank/tree/master/src/main/java/com/parasoft/parabank/dao"
click node_jdbc "https://github.com/parasoft/parabank/tree/master/src/main/java/com/parasoft/parabank/dao/jdbc"
click node_loanproviders "https://github.com/parasoft/parabank/tree/master/src/main/java/com/parasoft/parabank/messaging"
click node_loanservice "https://github.com/parasoft/parabank/blob/master/src/main/java/com/parasoft/parabank/service/LoanProcessorServiceImpl.java"
click node_bookcart "https://github.com/parasoft/parabank/blob/master/src/main/java/com/parasoft/bookstore/CartManager.java"
click node_bookservice "https://github.com/parasoft/parabank/blob/master/src/main/java/com/parasoft/bookstore/CartService.java"
click node_bookdb "https://github.com/parasoft/parabank/blob/master/src/main/java/com/parasoft/bookstore/BookStoreDB.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_webui,node_restproxy,node_bankapi,node_accessmode toneBlue
class node_bankmanager,node_bankmodels,node_transactions,node_admin,node_news toneAmber
class node_dao,node_jdbc,node_hsqldb toneMint
class node_loanproviders,node_loanservice toneRose
class node_bookcart,node_bookservice,node_bookdb,node_customer toneIndigo
```

## Components

### Web and APIs

- [Banking web flows](https://github.com/parasoft/parabank/tree/master/src/main/java/com/parasoft/parabank/web/controller): `src/main/java/com/parasoft/parabank/web/controller`
- [REST service proxy](https://github.com/parasoft/parabank/blob/master/src/main/java/com/parasoft/parabank/web/controller/RestServiceProxyController.java): `src/main/java/com/parasoft/parabank/web/controller/RestServiceProxyController.java`
- [REST and SOAP contract](https://github.com/parasoft/parabank/blob/master/src/main/java/com/parasoft/parabank/service/ParaBankService.java): `src/main/java/com/parasoft/parabank/service/ParaBankService.java`
- [Service access modes](https://github.com/parasoft/parabank/blob/master/src/main/java/com/parasoft/parabank/util/AccessModeController.java): `src/main/java/com/parasoft/parabank/util/AccessModeController.java`

### Banking domain

- [Bank operations](https://github.com/parasoft/parabank/blob/master/src/main/java/com/parasoft/parabank/domain/logic/impl/BankManagerImpl.java): `src/main/java/com/parasoft/parabank/domain/logic/impl/BankManagerImpl.java`
- [Banking records](https://github.com/parasoft/parabank/tree/master/src/main/java/com/parasoft/parabank/domain): `src/main/java/com/parasoft/parabank/domain`
- [Transaction search](https://github.com/parasoft/parabank/blob/master/src/main/java/com/parasoft/parabank/dao/jdbc/JdbcTransactionQueryRestrictor.java): `src/main/java/com/parasoft/parabank/dao/jdbc/JdbcTransactionQueryRestrictor.java`
- [Administration](https://github.com/parasoft/parabank/blob/master/src/main/java/com/parasoft/parabank/domain/logic/impl/AdminManagerImpl.java): `src/main/java/com/parasoft/parabank/domain/logic/impl/AdminManagerImpl.java`
- [News management](https://github.com/parasoft/parabank/blob/master/src/main/java/com/parasoft/parabank/domain/logic/impl/NewsManagerImpl.java): `src/main/java/com/parasoft/parabank/domain/logic/impl/NewsManagerImpl.java`

### Persistence

- [Bank DAO interfaces](https://github.com/parasoft/parabank/tree/master/src/main/java/com/parasoft/parabank/dao): `src/main/java/com/parasoft/parabank/dao`
- [JDBC implementations](https://github.com/parasoft/parabank/tree/master/src/main/java/com/parasoft/parabank/dao/jdbc): `src/main/java/com/parasoft/parabank/dao/jdbc`
- **HyperSQL database**

### Loan processing

- [Loan providers](https://github.com/parasoft/parabank/tree/master/src/main/java/com/parasoft/parabank/messaging): `src/main/java/com/parasoft/parabank/messaging`
- [Loan processor service](https://github.com/parasoft/parabank/blob/master/src/main/java/com/parasoft/parabank/service/LoanProcessorServiceImpl.java): `src/main/java/com/parasoft/parabank/service/LoanProcessorServiceImpl.java`

### Bookstore example

- [Cart management](https://github.com/parasoft/parabank/blob/master/src/main/java/com/parasoft/bookstore/CartManager.java): `src/main/java/com/parasoft/bookstore/CartManager.java`
- [Book cart service](https://github.com/parasoft/parabank/blob/master/src/main/java/com/parasoft/bookstore/CartService.java): `src/main/java/com/parasoft/bookstore/CartService.java`
- [Bookstore database](https://github.com/parasoft/parabank/blob/master/src/main/java/com/parasoft/bookstore/BookStoreDB.java): `src/main/java/com/parasoft/bookstore/BookStoreDB.java`

### Other components

- **Bank customer**

## Connections

- Bank customer → Banking web flows: uses
- Bank customer → REST service proxy: calls
- REST service proxy → Service access modes: delegates to (evidence: `src/main/java/com/parasoft/parabank/web/controller/RestServiceProxyController.java`)
- Service access modes → REST and SOAP contract: calls SOAP (evidence: `src/main/java/com/parasoft/parabank/util/AccessModeController.java`)
- Service access modes → REST and SOAP contract: calls REST (evidence: `src/main/java/com/parasoft/parabank/util/AccessModeController.java`)
- REST service proxy → Bank operations: uses operations (evidence: `src/main/java/com/parasoft/parabank/web/controller/RestServiceProxyController.java`)
- Bank operations → Bank DAO interfaces: uses DAOs (evidence: `src/main/java/com/parasoft/parabank/domain/logic/impl/BankManagerImpl.java`)
- Bank DAO interfaces → JDBC implementations: implemented by
- JDBC implementations → HyperSQL database: persists to
- Bank operations → Banking records: operates on (evidence: `src/main/java/com/parasoft/parabank/domain/logic/impl/BankManagerImpl.java`)
- Transaction search → Banking records: filters records (evidence: `src/main/java/com/parasoft/parabank/dao/jdbc/JdbcTransactionQueryRestrictor.java`)
- Administration → Bank DAO interfaces: uses admin DAO (evidence: `src/main/java/com/parasoft/parabank/domain/logic/impl/AdminManagerImpl.java`)
- News management → Bank DAO interfaces: uses news DAO (evidence: `src/main/java/com/parasoft/parabank/domain/logic/impl/NewsManagerImpl.java`)
- Bank operations → Loan providers: requests loan (evidence: `src/main/java/com/parasoft/parabank/domain/logic/impl/BankManagerImpl.java`)
- Loan processor service → Loan providers: dispatches
- Book cart service → Cart management: delegates to (evidence: `src/main/java/com/parasoft/bookstore/CartService.java`)
- Cart management → Bookstore database: uses storage
