Skip to content

Commit ff52057

Browse files
committed
feat: initial code structure
Signed-off-by: Otavio Santana <otaviopolianasantana@gmail.com>
1 parent 8d88f8c commit ff52057

File tree

18 files changed

+446
-0
lines changed

18 files changed

+446
-0
lines changed

02-03-ddd/.gitignore

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
*.class
2+
*.log
3+
~*
4+
5+
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
6+
hs_err_pid*
7+
LICENSE
8+
9+
# Maven
10+
target/
11+
.m2/
12+
.mvn/timing.properties
13+
.mvn/wrapper/maven-wrapper.jar
14+
pom.xml.tag
15+
pom.xml.releaseBackup
16+
pom.xml.versionsBackup
17+
pom.xml.next
18+
dependency-reduced-pom.xml
19+
release.properties
20+
buildNumber.properties
21+
settings.xml
22+
.flattened-pom.xml
23+
24+
# Gradle
25+
.gradle/
26+
build/
27+
28+
# Package Files
29+
*.jar
30+
*.war
31+
*.nar
32+
*.ear
33+
*.zip
34+
*.tar.gz
35+
*.rar
36+
37+
# JetBrains
38+
.idea/
39+
*.ipr
40+
*.iws
41+
*.iml
42+
*.releaseBackup
43+
out/
44+
.idea_modules/
45+
atlassian-ide-plugin.xml
46+
47+
# Eclipse
48+
.settings/
49+
.settings
50+
.project
51+
.classpath
52+
.metadata
53+
bin/
54+
tmp/
55+
*.tmp
56+
*.bak
57+
*.swp
58+
*~.nib
59+
local.properties
60+
.settings/
61+
.loadpath
62+
.recommenders
63+
.externalToolBuilders/
64+
*.launch
65+
.factorypath
66+
.target
67+
.springBeans
68+
.recommenders/
69+
.apt_generated/
70+
.apt_generated_test/
71+
.cache-main
72+
.scala_dependencies
73+
.worksheet
74+
75+
# NetBeans
76+
nbproject/private/
77+
build/
78+
nbbuild/
79+
dist/
80+
nbdist/
81+
nbactions.xml
82+
nb-configuration.xml
83+
.nb-gradle/
84+
85+
# MacOS
86+
.DS_Store
87+
profile
88+
89+
# Asciidoctor
90+
.asciidoctor/
91+
92+
# Vim
93+
*.swp

02-03-ddd/pom.xml

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
3+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
7+
<groupId>expert.os.workshop</groupId>
8+
<artifactId>02-03-ddd</artifactId>
9+
<version>1.0-SNAPSHOT</version>
10+
11+
<name>02-03-ddd</name>
12+
<url>http://www.os.expert</url>
13+
14+
<properties>
15+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
16+
<maven.compiler.source>21</maven.compiler.source>
17+
<maven.compiler.target>21</maven.compiler.target>
18+
<junit.version>6.0.0-M1</junit.version>
19+
<mockito.verson>5.18.0</mockito.verson>
20+
<maven.checkstyle.plugin.version>3.1.0</maven.checkstyle.plugin.version>
21+
<maven.compile.version>3.8.1</maven.compile.version>
22+
<maven.surefire.plugin.version>2.22.2</maven.surefire.plugin.version>
23+
<maven-source-plugin.version>3.2.1</maven-source-plugin.version>
24+
<maven-javadoc-plugin.vesion>3.3.0</maven-javadoc-plugin.vesion>
25+
<weld.se.core.version>6.0.3.Final</weld.se.core.version>
26+
</properties>
27+
28+
<dependencies>
29+
<dependency>
30+
<groupId>org.javamoney.moneta</groupId>
31+
<artifactId>moneta-core</artifactId>
32+
<version>1.4.5</version>
33+
</dependency>
34+
<dependency>
35+
<groupId>org.jboss.weld.se</groupId>
36+
<artifactId>weld-se-shaded</artifactId>
37+
<version>${weld.se.core.version}</version>
38+
</dependency>
39+
<dependency>
40+
<groupId>org.junit.jupiter</groupId>
41+
<artifactId>junit-jupiter-engine</artifactId>
42+
<version>${junit.version}</version>
43+
<scope>test</scope>
44+
</dependency>
45+
<dependency>
46+
<groupId>org.junit.jupiter</groupId>
47+
<artifactId>junit-jupiter-params</artifactId>
48+
<version>${junit.version}</version>
49+
<scope>test</scope>
50+
</dependency>
51+
<dependency>
52+
<groupId>org.mockito</groupId>
53+
<artifactId>mockito-core</artifactId>
54+
<version>${mockito.verson}</version>
55+
<scope>test</scope>
56+
</dependency>
57+
<dependency>
58+
<groupId>org.mockito</groupId>
59+
<artifactId>mockito-junit-jupiter</artifactId>
60+
<version>${mockito.verson}</version>
61+
<scope>test</scope>
62+
</dependency>
63+
<dependency>
64+
<groupId>org.assertj</groupId>
65+
<artifactId>assertj-core</artifactId>
66+
<version>4.0.0-M1</version>
67+
<scope>test</scope>
68+
</dependency>
69+
70+
</dependencies>
71+
72+
<build>
73+
<plugins>
74+
<plugin>
75+
<groupId>org.apache.maven.plugins</groupId>
76+
<artifactId>maven-compiler-plugin</artifactId>
77+
<version>${maven.compile.version}</version>
78+
</plugin>
79+
<plugin>
80+
<groupId>org.apache.maven.plugins</groupId>
81+
<artifactId>maven-javadoc-plugin</artifactId>
82+
<version>${maven-javadoc-plugin.vesion}</version>
83+
<executions>
84+
<execution>
85+
<id>attach-javadocs</id>
86+
<goals>
87+
<goal>jar</goal>
88+
</goals>
89+
</execution>
90+
</executions>
91+
<configuration>
92+
<source>${maven.compiler.source}</source>
93+
</configuration>
94+
</plugin>
95+
<plugin>
96+
<groupId>org.apache.maven.plugins</groupId>
97+
<artifactId>maven-source-plugin</artifactId>
98+
<version>${maven-source-plugin.version}</version>
99+
<executions>
100+
<execution>
101+
<id>attach-sources</id>
102+
<goals>
103+
<goal>jar</goal>
104+
</goals>
105+
</execution>
106+
</executions>
107+
</plugin>
108+
<plugin>
109+
<groupId>org.apache.maven.plugins</groupId>
110+
<artifactId>maven-surefire-plugin</artifactId>
111+
<version>${maven.surefire.plugin.version}</version>
112+
</plugin>
113+
</plugins>
114+
</build>
115+
116+
</project>
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package expert.os.examples;
2+
3+
import jakarta.enterprise.inject.se.SeContainer;
4+
import jakarta.enterprise.inject.se.SeContainerInitializer;
5+
6+
public class App {
7+
8+
public static void main(String[] args) {
9+
try(SeContainer container = SeContainerInitializer.newInstance().initialize()) {
10+
PaymentService paymentService = container.select(PaymentService.class, PaymentFilter.of(PaymentType.CREDIT_CARD))
11+
.get();
12+
String processed = paymentService.processPayment("Order #12345");
13+
14+
System.out.println("Processed Payment: " + processed);
15+
16+
News news = new News("CDI in action", "Breaking News: CDI in Action!");
17+
18+
NewsService newsService = container.select(NewsService.class).get();
19+
newsService.publish(news);
20+
21+
Worker worker = container.select(Worker.class).get();
22+
String crudOperation = worker.task("CRUD Operation");
23+
System.out.println("Worker Task Result: " + crudOperation);
24+
25+
}
26+
}
27+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package expert.os.examples;
2+
3+
4+
import jakarta.enterprise.context.ApplicationScoped;
5+
import jakarta.enterprise.inject.Default;
6+
7+
@ApplicationScoped
8+
@Payment(PaymentType.CREDIT_CARD)
9+
@Default
10+
public class CreditCardPaymentService implements PaymentService {
11+
@Override
12+
public String processPayment(String paymentDetails) {
13+
return "Credit Card payment processed for: " + paymentDetails;
14+
}
15+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package expert.os.examples;
2+
3+
public class Magazine {
4+
5+
public void printNews(News news) {
6+
System.out.println("Magazine: " + news.get());
7+
}
8+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package expert.os.examples;
2+
3+
import jakarta.annotation.Priority;
4+
import jakarta.decorator.Decorator;
5+
import jakarta.decorator.Delegate;
6+
import jakarta.enterprise.context.ApplicationScoped;
7+
import jakarta.enterprise.inject.Any;
8+
import jakarta.inject.Inject;
9+
10+
@Decorator
11+
@Priority(50)
12+
public class Manager implements Worker {
13+
14+
@Inject
15+
@Delegate
16+
@Any
17+
private Worker worker;
18+
19+
@Override
20+
public String task(String task) {
21+
return "Sending an email to the boss about: " + task + "\n" +
22+
worker.task(task) + "\n" +
23+
"And now I will take a coffee break.";
24+
}
25+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package expert.os.examples;
2+
3+
import java.util.function.Supplier;
4+
5+
public class News implements Supplier<String> {
6+
7+
private final String title;
8+
private final String content;
9+
10+
public News(String title, String content) {
11+
this.title = title;
12+
this.content = content;
13+
}
14+
15+
@Override
16+
public String get() {
17+
return "News Title: " + title + "\nContent: " + content;
18+
}
19+
20+
@Override
21+
public String toString() {
22+
return get();
23+
}
24+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package expert.os.examples;
2+
3+
import jakarta.enterprise.context.ApplicationScoped;
4+
import jakarta.enterprise.event.Observes;
5+
6+
@ApplicationScoped
7+
public class NewsPaper {
8+
9+
public void printNews(@Observes News news) {
10+
System.out.println("Printing News Paper: " + news.get());
11+
}
12+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package expert.os.examples;
2+
3+
import jakarta.enterprise.context.ApplicationScoped;
4+
import jakarta.enterprise.event.Event;
5+
import jakarta.inject.Inject;
6+
7+
@ApplicationScoped
8+
public class NewsService {
9+
10+
11+
private final Event<News> newsEvent;
12+
13+
@Inject
14+
public NewsService(Event<News> newsEvent) {
15+
this.newsEvent = newsEvent;
16+
}
17+
18+
public void publish(News news) {
19+
newsEvent.fire(news);
20+
}
21+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package expert.os.examples;
2+
3+
import jakarta.enterprise.context.ApplicationScoped;
4+
import jakarta.inject.Qualifier;
5+
6+
import java.lang.annotation.Retention;
7+
import java.lang.annotation.RetentionPolicy;
8+
import java.lang.annotation.Target;
9+
10+
11+
@Qualifier
12+
@Retention(RetentionPolicy.RUNTIME)
13+
@Target({java.lang.annotation.ElementType.FIELD,
14+
java.lang.annotation.ElementType.PARAMETER,
15+
java.lang.annotation.ElementType.TYPE,
16+
java.lang.annotation.ElementType.METHOD})
17+
public @interface Payment {
18+
19+
PaymentType value() default PaymentType.CREDIT_CARD;
20+
}
21+
22+

0 commit comments

Comments
 (0)