Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added a module description based on Andreas' proposal #58

Merged
merged 3 commits into from
Nov 24, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
116 changes: 28 additions & 88 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,104 +1,44 @@
import org.asciidoctor.gradle.jvm.AsciidoctorTask
import java.text.SimpleDateFormat

plugins {
id "org.asciidoctor.jvm.base" version "3.3.2"
id "org.asciidoctor.jvm.convert" version "3.3.2"
id "org.asciidoctor.jvm.pdf" version "3.3.2"
id "java"
id "application"
}

def group = "org.isaqb"
def releaseVersion = System.getenv("RELEASE_VERSION")
def localVersion = "LocalBuild"
project.version = releaseVersion == null ? localVersion : releaseVersion
def curriculumFileName = "curriculum-eam"
def versionDate = new SimpleDateFormat("yyyyMMdd").format(new Date())
def languages = ["DE", "EN"]

repositories {
mavenCentral()
}

asciidoctorj {
version = '2.5.3'
dependencies {
implementation("org.asciidoctor:asciidoctorj:2.5.10")
implementation("org.asciidoctor:asciidoctorj-pdf:2.3.9")
}

ext {
today = new Date()
versionDate = new SimpleDateFormat("yyyyMMdd").format(today)

releaseVersion = System.getenv("RELEASE_VERSION")
localVersion = "LocalBuild"
project.version = releaseVersion == null ? localVersion : releaseVersion;

curriculumFileName = "curriculum-eam"
addSuffixToCurriculum = { suffix ->
for (extension in ["html", "pdf"]) {
File source = new File("${buildDir}/${curriculumFileName}.${extension}")
File target = new File("${buildDir}/${curriculumFileName}${suffix}.${extension}")

source.renameTo(target)
}
}
application {
mainClass.set("org.isaqb.asciidoc.Main")
applicationDefaultJvmArgs = [
"""-DprojectVersion=${project.version}""",
"""-DcurriculumFileName=${curriculumFileName}""",
"""-DversionDate=${versionDate}""",
"""-Dlanguages=${languages.join(',')}""",
"""--add-opens""", """java.base/sun.nio.ch=ALL-UNNAMED""",
"""--add-opens""", """java.base/java.io=ALL-UNNAMED"""]
}

apply from: 'scripts/includeLearningObjectives.gradle'



class RenderCurriculumTask extends AsciidoctorTask {
@Inject
RenderCurriculumTask(WorkerExecutor we, String curriculumFileName, String versionDate, String language) {
super(we)

forkOptions {
jvmArgs "--add-opens", "java.base/sun.nio.ch=ALL-UNNAMED", "--add-opens", "java.base/java.io=ALL-UNNAMED"
}


sourceDir = new File("./docs/")
baseDir = new File ("./docs/")
sources {
include "index.adoc"
include "${curriculumFileName}.adoc"
}
outputDir = new File("./build/")
outputOptions {
separateOutputDirs = false
backends 'pdf', 'html5'
}

def fileVersion = project.version.trim() + "-" + language

attributes = [
'icons' : 'font',
'version-label' : '',
'revnumber' : fileVersion,
'revdate' : versionDate,
'document-version' : fileVersion + "-" + versionDate,
'currentDate' : versionDate,
'language' : language,
'curriculumFileName': curriculumFileName,
'debug_adoc' : false,
'pdf-stylesdir' : '../pdf-theme/themes',
'pdf-fontsdir' : '../pdf-theme/fonts',
'pdf-style' : 'isaqb',
'stylesheet' : '../html-theme/adoc-github.css',
'stylesheet-dir' : '../html-theme'
]
}
}

task buildDocs {
group 'Documentation'
description 'Grouping task for generating all languages in several formats'
dependsOn "includeLearningObjectives", "renderDE", "renderEN"
}

task renderDE(type: RenderCurriculumTask,
constructorArgs: [curriculumFileName, versionDate, "DE"]) {
doLast {
addSuffixToCurriculum("-de")
}
}

task renderEN(type: RenderCurriculumTask,
constructorArgs: [curriculumFileName, versionDate, "EN"]) {
doLast {
addSuffixToCurriculum("-en")
}
tasks.register('buildDocs') {
description = 'Grouping task for generating all languages in several formats'
group = 'documentation'
dependsOn "includeLearningObjectives", "run"
}

apply from: 'scripts/includeLearningObjectives.gradle'

defaultTasks "buildDocs"
61 changes: 57 additions & 4 deletions docs/00b-basics/01-what-to-expect-of-this-module.adoc
Original file line number Diff line number Diff line change
@@ -1,14 +1,67 @@
// tag::DE[]
=== Was vermittelt das Modul „{curriculum-short}“?
programming-wolf marked this conversation as resolved.
Show resolved Hide resolved
Der Kurs "EAM: Enterprise Architecture Management für Softwarearchitekten" hat zum Ziel, die für einen Softwarearchitekten relevanten Themen aus dem Bereich EAM zu vermitteln.

Warum ist dieses Wissen für einen Softwarearchitekten von Bedeutung?
Die Informationssysteme in Organisationen werden kleinteiliger und zahlreicher. Dadurch steigt der Bedarf für Überblick und passende Gestaltung der Interaktionen. Prozess-Schritte (manuell oder automatisiert) werden unternehmensweit enger und kleinteiliger miteinander verzahnt. Deshalb müssen Organisationen einen Überblick über die verschiedenen Aspekte auf der Unternehmensebene bewahren und die Zusammenhänge zwischen diesen Aspekten erkennen und erklären können. Ein Treiber dafür sind auch die steigenden Compliance-Anforderungen in den Unternehmen, denn in einigen Branchen (z.B. Finanzindustrie) sind Unterlassungen in diesem Bereich sogar mit Gefängnisstrafen belegt.

Auf der anderen Seite hat sich der Aufgabenbereich von EAM in den letzten Jahren gewandelt: EAM verantwortet inzwischen, dass Veränderungen in verschiedenen Bereichen (Strategie, Geschäftsfähigkeiten, Wertströme, Technologien, Informationssysteme) zueinander konsistent sind und, dass dies bei der Architektur von Anwendungen entsprechend berücksichtigt wird.

Zusammenfassend kann man also sagen, dass Enterprisearchitektur eines Unternehmens und die Softwarearchitektur einer Anwendung Hand in Hand gehen müssen. Themen, die sich daraus für einen Softwarearchitekten ergeben sind z.B.:
* Voraussetzungen für Architekturen mit loser Kopplung, d.h. z.B. DDD, APIs etc.
* Anwendungsübergreifende Themen wie z.B. Anwendungsintegration, anwendungsübergreifende Prozess wie Logging, Sicherheit, etc.
* Auswirkungen von Entscheidungen in der Softwarearchitektur auf die Enterprisearchitektur und umgekehrt
* Einbettung einer Anwendung in einen unternehmensweiten Rahmen (u.a. Anforderungen aus dem Bereich Compliance bzw. Unternehmensstrategie) und Berücksichtigung der Abhängigkeiten bzw. Einflüsse in beide Richtungen

==== Abgrenzung
Der Kurs hat nicht primär die Enterprisearchitektur als Ziel, sondern er soll den Software-Architekten aus ihrer Sicht einen Überblick zum Thema EAM bieten und die gegenseitige Beeinflussung dieser beiden Architekturbereiche und Schnittstellen zwischen ihnen behandeln. Dadurch mag er aber auch für Enterprisearchitekten interessant sein, die einen Außenblick auf das Thema EAM bekommen wollen, um optimal mit Softwarearchitekt:innen zusammenzuarbeiten.

==== Voraussetzungen
Teilnehmer:innen sollten folgende Kenntnisse und/oder Erfahrung mitbringen:

* Grundlagen der Architekturentwicklung: Bedeutung und Abgrenzung von Architektur, Vorgehen, Einflüsse und Anforderungen, Architekturentscheidungen, Muster und Dokumentation mit Sichten, usw. wie im Kurs iSAQB CPSA Foundation Level vermittelt.

==== Hilfreich für das Verständnis einiger Konzepte sind darüber hinaus:
* Praktische Erfahrung im Architekturbereich und Einblick in mindestens eine moderne Technologie oder Plattform zur Entwicklung von verteilten Anwendungen
* Kenntnis typischer Herausforderungen im Bereich von Unternehmensarchitekturen:
** Definition von (IT-)Unternehmenszielen
** Strategische (IT-)Planung
** IT-Portfolio-Management
** Application Lifecycle Management
** IT-Infrastructure-Library (ITIL)

Das Modul präsentiert den Teilnehmerinnen und Teilnehmern {curriculum-name} als …
Am Ende des Moduls kennen die Teilnehmerinnen und Teilnehmer … und können …
// end::DE[]

// tag::EN[]
=== What does the module “{curriculum-short}” convey?
The course "EAM: Enterprise Architecture Management for Software Architects" teaches the topics relevant to a software architect in the field of EAM.

Why is this knowledge important for a software architect?
The information systems in organizations are becoming more fragmented and numerous. This increases the need for an overview and appropriate design of interactions. Process steps (manual or automated) are becoming more closely and intricately interlinked throughout the company. Organizations must therefore maintain an overview of the various aspects at the enterprise level and be able to recognize and explain the relationships between these aspects. One driver for this is the increasing compliance requirements in companies, since in some sectors (e.g. the financial industry) omissions in this area are even punishable by prison sentences.

On the other hand, the responsibilities of EAM have changed in recent years: EAM is now responsible for ensuring that changes in different areas (strategy, business capabilities, value streams , technologies, information systems) are cosistent with each other and that this is taken into account accordingly in the application architectures.

In summary, it can be said that the enterprise architecture of a company and the software architecture of an application unit must go hand in hand. Topics that arise from this for a software architect are e.g:
* Requirements for architectures with loose coupling, i.e. e.g. DDD, APIs etc.
* Cross-cutting concerns such as application integration, cross-application processes such as logging, security, etc.
* Effects of decisions in the software architecture on the enterprise architecture and vice versa
* Embedding an application in a company-wide framework (e.g. requirements from the area of compliance or corporate strategy) and consideration of dependencies or influences in both directions

==== Demarcation
The course is not primarily aimed at enterprise architecture but is intended to provide software architects with an overview of the topic of EAM from their perspective and to deal with the mutual influence of these two architecture areas and the interfaces between them. However, it may also be of interest to enterprise architects who want to gain an external perspective on the topic of EAM in order to work optimally with software architects.

==== Prerequisites
Participants should have the following knowledge and/or experience:
* Basics of architecture development: meaning and differentiation of architecture, approach, influences and requirements, architecture decisions, patterns and documentation with views, etc. as taught in the iSAQB CPSA Foundation Level course.

==== It is also helpful to understand some concepts:
* Practical experience in architecture and insight into at least one modern technology or platform for developing distributed applications.
* Knowledge of typical challenges in the area of enterprise architectures:
** Definition of (IT) business goals
** Strategic (IT) planning
** IT portfolio management
** Application lifecycle management
** IT Infrastructure Library (ITIL)

The module presents {curriculum-short} to the participants …
At the end of the module, the participants know … and are able to …
// end::EN[]

15 changes: 1 addition & 14 deletions docs/config/setup.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
:icons: font
:sectnumlevels: 2
:imagesdir: images
:chapter-label:
:!chapter-signifier:

// ":language:" denotes the language or the target document.
// currently only DE and EN are supported
Expand All @@ -23,16 +23,3 @@ ifeval::["{language}" == "EN"]
:curriculum-name: Enterprise Architecture Management (EAM) for Software Architects
:curriculum-header-title: iSAQB curriculum for Advanced Level: {curriculum-short}
endif::[]

// you might want to output some internal information...
ifdef::debug_adoc[]
[NOTE]
====
Current configuration:

* Language(s): {language}
* Document version: {document-version}
* Include-configuration: {include_configuration}

====
endif::debug_adoc[]
4 changes: 2 additions & 2 deletions docs/index_rc.adoc
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
include::config/setup.adoc[]

= image:isaqb-logo.jpg[width=150]Certified Professional for Software Architecture^(R)^ (CPSA)
- Advanced Level Curriculum TEMPLATE – Release Candidate -
- Curriculum {curriculum-name} [{curriculum-short}] – Release Candidate -

The international Software Architecture Qualification Board (link:https://isaqb.org[iSAQB]) defines curricula on several levels for software architects.

The **Release Candidates** of the **Advanced Level TEMPLATE** curriculum are currently maintained and published in both English (EN) and German (DE). Maintainers of this curriculum and voluntary reviewers collaborate on https://github.com/isaqb-org[GitHub] to improve the curriculum.
The **Release Candidates** of the **{curriculum-name} [{curriculum-short}]** advanced level curriculum are currently maintained and published in both English (EN) and German (DE). Maintainers of this curriculum and voluntary reviewers collaborate on https://github.com/isaqb-org[GitHub] to improve the curriculum.

== Current Release Candidate v2023.1

Expand Down
Binary file modified gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
4 changes: 3 additions & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
35 changes: 22 additions & 13 deletions gradlew
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
Expand All @@ -80,13 +80,11 @@ do
esac
done

APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit

APP_NAME="Gradle"
# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}

# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit

# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
Expand Down Expand Up @@ -133,22 +131,29 @@ location of your Java installation."
fi
else
JAVACMD=java
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
if ! command -v java >/dev/null 2>&1
then
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
fi

# Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC2039,SC3045
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
case $MAX_FD in #(
'' | soft) :;; #(
*)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC2039,SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
Expand Down Expand Up @@ -193,11 +198,15 @@ if "$cygwin" || "$msys" ; then
done
fi

# Collect all arguments for the java command;
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
# shell script including quotes and variable substitutions, so put them in
# double quotes to make sure that they get re-expanded; and
# * put everything else in single quotes, so that it's not re-expanded.

# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'

# Collect all arguments for the java command:
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# and any embedded shellness will be escaped.
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# treated as '${Hostname}' itself on the command line.

set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
Expand Down
1 change: 1 addition & 0 deletions gradlew.bat
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ if "%OS%"=="Windows_NT" setlocal

set DIRNAME=%~dp0
if "%DIRNAME%"=="" set DIRNAME=.
@rem This is normally unused
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%

Expand Down
2 changes: 1 addition & 1 deletion pdf-theme
Submodule pdf-theme updated 2 files
+12 −15 README.adoc
+11 −10 themes/isaqb-theme.yml
Loading