Wetclinic

The System Context diagram for the Spring PetClinic system.

@startuml(id=context)
scale max 2000x1409
title Spring PetClinic - System Context
caption The System Context diagram for the Spring PetClinic system.

skinparam {
  shadowing false
  arrowColor #707070
  actorBorderColor #707070
  componentBorderColor #707070
  rectangleBorderColor #707070
  noteBackgroundColor #ffffff
  noteBorderColor #707070
}
actor "Clinic Employee" <<Person>> as 2 #519823
note right of 2
  An employee of the clinic
end note
rectangle 1 <<Software System>> #6cb33e [
  Spring PetClinic
  --
  Allows employees to view and
  manage information regarding
  the veterinarians, the
  clients, and their pets.
]
2 .[#707070].> 1 : Uses
@enduml

The System Context diagram for the Spring PetClinic system

Spring PetClinic - Containers

@startuml(id=containers)
scale max 2000x1409
title Spring PetClinic - Containers
caption The Containers diagram for the Spring PetClinic system.

skinparam {
  shadowing false
  arrowColor #707070
  actorBorderColor #707070
  componentBorderColor #707070
  rectangleBorderColor #707070
  noteBackgroundColor #ffffff
  noteBorderColor #707070
}
actor "Clinic Employee" <<Person>> as 2 #519823
note right of 2
  An employee of the clinic
end note
package "Spring PetClinic" <<Software System>> {
  database 5 <<Relational Database Schema>> #91d366 [
    Database
    --
    Stores information regarding
    the veterinarians, the
    clients, and their pets.
  ]
  rectangle 4 <<Java and Spring>> #91d366 [
    Web Application
    --
    Allows employees to view and
    manage information regarding
    the veterinarians, the
    clients, and their pets.
  ]
}
2 .[#707070].> 4 : <<HTTPS>>\nUses
4 .[#707070].> 5 : <<JDBC>>\nReads from and writes to
@enduml

Spring PetClinic - Containers

Spring PetClinic - Web Application - Components

@startuml(id=components)
scale max 1413x2000
title Spring PetClinic - Web Application - Components
caption The Components diagram for the Spring PetClinic web application.

skinparam {
  shadowing false
  arrowColor #707070
  actorBorderColor #707070
  componentBorderColor #707070
  rectangleBorderColor #707070
  noteBackgroundColor #ffffff
  noteBorderColor #707070
}
actor "Clinic Employee" <<Person>> as 2 #519823
note right of 2
  An employee of the clinic
end note
database 5 <<Relational Database Schema>> #91d366 [
  Database
  --
  Stores information regarding
  the veterinarians, the
  clients, and their pets.
]
package "Web Application" <<Java and Spring>> {
  component 13 <<Spring Service>> #6cb33e [
    ClinicService
    --
    Mostly used as a facade so
    all controllers have a single
    point of entry
  ]
  component 9 <<Spring MVC Controller>> #d4f3c0 [
    CrashController
    --
    Controller used to showcase
    what happens when an
    exception is thrown
  ]
  component "OwnerController" <<Spring MVC Controller>> as 10 #d4f3c0
  component 16 <<Spring Repository>> #95d46c [
    OwnerRepository
    --
    Repository class for Owner
    domain objects All method
    names are compliant with
    Spring Data naming
    conventions so this interface
    can easily be exten...
  ]
  component "PetController" <<Spring MVC Controller>> as 12 #d4f3c0
  component 15 <<Spring Repository>> #95d46c [
    PetRepository
    --
    Repository class for Pet
    domain objects All method
    names are compliant with
    Spring Data naming
    conventions so this interface
    can easily be extende...
  ]
  component "VetController" <<Spring MVC Controller>> as 11 #d4f3c0
  component 17 <<Spring Repository>> #95d46c [
    VetRepository
    --
    Repository class for Vet
    domain objects All method
    names are compliant with
    Spring Data naming
    conventions so this interface
    can easily be extende...
  ]
  component "VisitController" <<Spring MVC Controller>> as 8 #d4f3c0
  component 14 <<Spring Repository>> #95d46c [
    VisitRepository
    --
    Repository class for Visit
    domain objects All method
    names are compliant with
    Spring Data naming
    conventions so this interface
    can easily be exten...
  ]
}
2 .[#707070].> 9 : <<HTTP>>\nUses
2 .[#707070].> 10 : <<HTTP>>\nUses
2 .[#707070].> 12 : <<HTTP>>\nUses
2 .[#707070].> 11 : <<HTTP>>\nUses
2 .[#707070].> 8 : <<HTTP>>\nUses
13 .[#707070].> 16 
13 .[#707070].> 15 
13 .[#707070].> 17 
13 .[#707070].> 14 
10 .[#707070].> 13 
16 .[#707070].> 5 : <<JDBC>>\nReads from and writes to
12 .[#707070].> 13 
15 .[#707070].> 5 : <<JDBC>>\nReads from and writes to
15 .[#707070].> 16 
15 .[#707070].> 14 
11 .[#707070].> 13 
17 .[#707070].> 5 : <<JDBC>>\nReads from and writes to
8 .[#707070].> 13 
14 .[#707070].> 5 : <<JDBC>>\nReads from and writes to
@enduml

Spring PetClinic - Containers

Web Application - Dynamic

@startuml(id=viewListOfVets)
scale max 2000x1409
title Web Application - Dynamic
caption Shows how the "view list of vets" feature works.

skinparam {
  shadowing false
  arrowColor #707070
  actorBorderColor #707070
  componentBorderColor #707070
  rectangleBorderColor #707070
  noteBackgroundColor #ffffff
  noteBorderColor #707070
}
participant "VetController" as 11 <<Spring MVC Controller>> #d4f3c0
participant "ClinicService" as 13 <<Spring Service>> #6cb33e
participant "VetRepository" as 17 <<Spring Repository>> #95d46c
actor "Clinic Employee" as 2 <<Person>> #519823
database "Database" as 5 <<Relational Database Schema>> #91d366
2 -[#707070]> 11 : 1. Requests list of vets from /vets
11 -[#707070]> 13 : 2. Calls findVets
13 -[#707070]> 17 : 3. Calls findAll
17 -[#707070]> 5 : 4. select * from vets
@enduml

Web Application - Dynamic

Web Application - Deployment

@startuml(id=liveDeployment)
scale max 2000x1409
title Spring PetClinic - Deployment - Default
caption An example live deployment scenario for the Spring PetClinic software system.

skinparam {
  shadowing false
  arrowColor #707070
  actorBorderColor #707070
  componentBorderColor #707070
  rectangleBorderColor #707070
  noteBackgroundColor #ffffff
  noteBorderColor #707070
}
node "Database Server - Primary" <<Ubuntu 12.04 LTS>> as 58 {
  node "MySQL - Primary" <<MySQL 5.5.x>> as 59 {
    database "Database" <<Relational Database Schema>> as 60 #91d366
  }
}
node "Database Server - Secondary" <<Ubuntu 12.04 LTS>> as 64 {
  node "MySQL - Secondary" <<MySQL 5.5.x>> as 65 {
    database "Database" <<Relational Database Schema>> as 66 #91d366
  }
}
node "Web Server (x2)" <<Ubuntu 12.04 LTS>> as 53 {
  node "Apache Tomcat" <<Apache Tomcat 7.x>> as 54 {
    rectangle "Web Application" <<Java and Spring>> as 55 #91d366
  }
}
59 .[#707070].> 65 : Replicates data to
55 .[#707070].> 60 : <<JDBC>>\nReads from and writes to
55 .[#707070].> 66 : <<JDBC>>\nReads from and writes to
@enduml

liveDeployment

--

@startuml(id=developmentDeployment)
scale max 2000x1409
title Spring PetClinic - Deployment - Default
caption An example development deployment scenario for the Spring PetClinic software system.

skinparam {
  shadowing false
  arrowColor #707070
  actorBorderColor #707070
  componentBorderColor #707070
  rectangleBorderColor #707070
  noteBackgroundColor #ffffff
  noteBorderColor #707070
}
node "Developer Laptop" <<Windows 7+ or macOS>> as 37 {
  node "Docker Container - Web Server" <<Docker>> as 38 {
    node "Apache Tomcat" <<Apache Tomcat 7.x>> as 39 {
      rectangle "Web Application" <<Java and Spring>> as 40 #91d366
    }
  }
  node "Docker Container - Database Server" <<Docker>> as 41 {
    node "Database Server" <<HSQLDB>> as 42 {
      database "Database" <<Relational Database Schema>> as 43 #91d366
    }
  }
}
40 .[#707070].> 43 : <<JDBC>>\nReads from and writes to
@enduml

developmentDeployment

--

@startuml(id=stagingDeployment)
scale max 2000x1409
title Spring PetClinic - Deployment - Default
caption An example staging deployment scenario for the Spring PetClinic software system.

skinparam {
  shadowing false
  arrowColor #707070
  actorBorderColor #707070
  componentBorderColor #707070
  rectangleBorderColor #707070
  noteBackgroundColor #ffffff
  noteBorderColor #707070
}
node "Staging Server" <<Ubuntu 12.04 LTS>> as 45 {
  node "Apache Tomcat" <<Apache Tomcat 7.x>> as 46 {
    rectangle "Web Application" <<Java and Spring>> as 47 #91d366
  }
  node "MySQL" <<MySQL 5.5.x>> as 49 {
    database "Database" <<Relational Database Schema>> as 50 #91d366
  }
}
47 .[#707070].> 50 : <<JDBC>>\nReads from and writes to
@enduml

stagingDeployment

Credits: https://structurizr.com/share/1/plantuml