From 768e6471085635c66c8128b100e628e9fcdae29b Mon Sep 17 00:00:00 2001 From: Besok Date: Sat, 2 Nov 2019 11:29:52 +0000 Subject: [PATCH] add saga init dsc --- pom.xml | 2 + saga/README.md | 45 +++++++++++ saga/pom.xml | 44 +++++++++++ stirring-clicker/pom.xml | 28 +++++++ .../ie/home/besok/stirrings/Application.java | 15 ++++ .../java/ie/home/besok/stirrings/Counter.java | 14 ++++ .../ie/home/besok/stirrings/FileStorage.java | 37 +++++++++ .../java/ie/home/besok/stirrings/Gui.java | 73 ++++++++++++++++++ stirring-clicker/src/main/resources/1.png | Bin 0 -> 4434 bytes stirring-clicker/src/main/resources/2.jpg | Bin 0 -> 3603 bytes stirring-clicker/src/main/resources/3.jpg | Bin 0 -> 2903 bytes .../home/besok/stirrings/FileStorageTest.java | 25 ++++++ 12 files changed, 283 insertions(+) create mode 100644 saga/README.md create mode 100644 saga/pom.xml create mode 100644 stirring-clicker/pom.xml create mode 100644 stirring-clicker/src/main/java/ie/home/besok/stirrings/Application.java create mode 100644 stirring-clicker/src/main/java/ie/home/besok/stirrings/Counter.java create mode 100644 stirring-clicker/src/main/java/ie/home/besok/stirrings/FileStorage.java create mode 100644 stirring-clicker/src/main/java/ie/home/besok/stirrings/Gui.java create mode 100644 stirring-clicker/src/main/resources/1.png create mode 100644 stirring-clicker/src/main/resources/2.jpg create mode 100644 stirring-clicker/src/main/resources/3.jpg create mode 100644 stirring-clicker/src/test/java/ie/home/besok/stirrings/FileStorageTest.java diff --git a/pom.xml b/pom.xml index 22dedc14a..4e8b76c78 100644 --- a/pom.xml +++ b/pom.xml @@ -183,6 +183,8 @@ data-locality subclass-sandbox circuit-breaker + role-object + saga diff --git a/saga/README.md b/saga/README.md new file mode 100644 index 000000000..12e4c8482 --- /dev/null +++ b/saga/README.md @@ -0,0 +1,45 @@ +--- +layout: pattern +title: Saga +folder: Communication +permalink: /patterns/saga/ +categories: Behavioral +tags: + - Java + - Difficulty-Expert + - Idiom + - Distributed communication +--- + +## Also known as +This pattern has a similar goal with two-phase commit (XA transaction) + +## Intent +This pattern is used in distributed services to perform a group of operations atomically. +This is an analog of transaction in a database but in terms of microservices architecture this is performed in a distributed environment + +## Explanation +A saga is a sequence of local transactions in a certain context. If one transaction fails for some reason, +the saga executes compensating transactions(rollbacks) to undo the impact of the preceding transactions. +There are two types of Saga: + +- Choreography-Based Saga. +In this approach, there is no central orchestrator. +Each service participating in the Saga performs their transaction and publish events. +The other services act upon those events and perform their transactions. +Also, they may or not publish other events based on the situation. + +- Orchestration-Based Saga +In this approach, there is a Saga orchestrator that manages all the transactions and directs +the participant services to execute local transactions based on events. +This orchestrator can also be though of as a Saga Manager. + +## Applicability +Use the Saga pattern, if: +- you need to perform a group of operations related to different microservices atomically +- you need to rollback changes in different places in case of failure one of the operation +- you need to take care of data consistency in different places including different databases +- you can not use 2PC(two phase commit) + +## Credits +- [pattern description](https://microservices.io/patterns/data/saga.html) \ No newline at end of file diff --git a/saga/pom.xml b/saga/pom.xml new file mode 100644 index 000000000..26c331237 --- /dev/null +++ b/saga/pom.xml @@ -0,0 +1,44 @@ + + + + 4.0.0 + + com.iluwatar + java-design-patterns + 1.22.0-SNAPSHOT + + + saga + + + junit + junit + test + + + + diff --git a/stirring-clicker/pom.xml b/stirring-clicker/pom.xml new file mode 100644 index 000000000..b0d223016 --- /dev/null +++ b/stirring-clicker/pom.xml @@ -0,0 +1,28 @@ + + + 4.0.0 + + ie.home.besok + move-clicker + 1.0 + + 1.8 + 1.8 + + + + + org.projectlombok + lombok + 1.18.10 + + + + junit + junit + 4.12 + + + \ No newline at end of file diff --git a/stirring-clicker/src/main/java/ie/home/besok/stirrings/Application.java b/stirring-clicker/src/main/java/ie/home/besok/stirrings/Application.java new file mode 100644 index 000000000..0835470bc --- /dev/null +++ b/stirring-clicker/src/main/java/ie/home/besok/stirrings/Application.java @@ -0,0 +1,15 @@ +package ie.home.besok.stirrings; + +import java.awt.*; +import java.io.IOException; + +public class Application { + public static void main(String[] args) throws IOException { + FileStorage storage = new FileStorage(); + + EventQueue.invokeLater(() -> { + Gui gui = new Gui(storage); + gui.setVisible(true); + }); + } +} diff --git a/stirring-clicker/src/main/java/ie/home/besok/stirrings/Counter.java b/stirring-clicker/src/main/java/ie/home/besok/stirrings/Counter.java new file mode 100644 index 000000000..b0f93f9d7 --- /dev/null +++ b/stirring-clicker/src/main/java/ie/home/besok/stirrings/Counter.java @@ -0,0 +1,14 @@ +package ie.home.besok.stirrings; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +public class Counter { + public Map count(List dates){ + return null; + } +} diff --git a/stirring-clicker/src/main/java/ie/home/besok/stirrings/FileStorage.java b/stirring-clicker/src/main/java/ie/home/besok/stirrings/FileStorage.java new file mode 100644 index 000000000..c5784eb50 --- /dev/null +++ b/stirring-clicker/src/main/java/ie/home/besok/stirrings/FileStorage.java @@ -0,0 +1,37 @@ +package ie.home.besok.stirrings; + +import lombok.extern.slf4j.Slf4j; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardOpenOption; +import java.time.LocalDateTime; +import java.util.List; + +public class FileStorage { + + private Path file; + + public FileStorage() throws IOException { + this.file = Paths.get("data.log"); + if(!Files.exists(file)){ + Files.createFile(file); + } + } + + public void plus() { + String line = LocalDateTime.now().toString()+System.lineSeparator(); + try { + Files.write(file, line.getBytes(), StandardOpenOption.APPEND); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public List get() throws IOException { + return Files.readAllLines(file); + } + +} diff --git a/stirring-clicker/src/main/java/ie/home/besok/stirrings/Gui.java b/stirring-clicker/src/main/java/ie/home/besok/stirrings/Gui.java new file mode 100644 index 000000000..3df3e2131 --- /dev/null +++ b/stirring-clicker/src/main/java/ie/home/besok/stirrings/Gui.java @@ -0,0 +1,73 @@ +package ie.home.besok.stirrings; + +import javax.imageio.ImageIO; +import javax.swing.*; +import java.awt.*; +import java.io.IOException; +import java.net.URL; + +public class Gui extends JFrame { + + private FileStorage storage; + + public Gui(FileStorage storage) { + this.storage = storage; + try { + createUI(storage); + } catch (IOException e) { + e.printStackTrace(); + } + } + + private void createUI(FileStorage storage) throws IOException { + setTitle("Stirring counter"); + setSize(300, 300); + setLocationRelativeTo(null); + + + JButton button = createButton(storage); + JButton graphick = new JButton(); + graphick.setIcon(getIcon("3.jpg")); + + + Container pane = getContentPane(); + GroupLayout gl = new GroupLayout(pane); + pane.setLayout(gl); + + gl.setAutoCreateContainerGaps(true); + + gl.setHorizontalGroup( + gl.createSequentialGroup().addComponent(button).addComponent(graphick) + ); + + gl.setVerticalGroup(gl.createSequentialGroup().addComponent(button).addComponent(graphick)); + + + button.addActionListener((event) -> { + storage.plus(); + try { + JOptionPane.showMessageDialog(null,"","",JOptionPane.INFORMATION_MESSAGE, getIcon("2.jpg")); + } catch (IOException e) { + e.printStackTrace(); + } + }); + + setDefaultCloseOperation(EXIT_ON_CLOSE); + } + + private JButton createButton(FileStorage storage) throws IOException { + ImageIcon babyIcon = getIcon("1.png"); + + JButton button = new JButton(); + + button.setIcon(babyIcon); + return button; + } + + private ImageIcon getIcon(String name) throws IOException { + URL file = this.getClass().getClassLoader().getResource(name); + return new ImageIcon(ImageIO.read(file)); + } + + +} diff --git a/stirring-clicker/src/main/resources/1.png b/stirring-clicker/src/main/resources/1.png new file mode 100644 index 0000000000000000000000000000000000000000..1ff5944d67256918b8cc12d43bda1aadf8040a82 GIT binary patch literal 4434 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 Y0pTRxRwVqi+W-In07*qoM6N<$g05LsLjV8( literal 0 HcmV?d00001 diff --git a/stirring-clicker/src/main/resources/2.jpg b/stirring-clicker/src/main/resources/2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6220fba24faf9895b96e999a0063de7fef8a8fd2 GIT binary patch literal 3603 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 LXche5;*I?spOLmY literal 0 HcmV?d00001 diff --git a/stirring-clicker/src/main/resources/3.jpg b/stirring-clicker/src/main/resources/3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f2b5f6443e42014ce3fb1048422fcf2bc6a0e72a GIT binary patch literal 2903 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 literal 0 HcmV?d00001 diff --git a/stirring-clicker/src/test/java/ie/home/besok/stirrings/FileStorageTest.java b/stirring-clicker/src/test/java/ie/home/besok/stirrings/FileStorageTest.java new file mode 100644 index 000000000..1eaaba6d5 --- /dev/null +++ b/stirring-clicker/src/test/java/ie/home/besok/stirrings/FileStorageTest.java @@ -0,0 +1,25 @@ +package ie.home.besok.stirrings; + +import org.junit.Test; + +import java.io.IOException; +import java.util.List; + +import static org.junit.Assert.*; + +public class FileStorageTest { + + @Test + public void fsTest() throws IOException { + FileStorage fs = new FileStorage(); + List arrs = fs.get(); + int oldSize = arrs.size(); + fs.plus(); + fs.plus(); + fs.plus(); + fs.plus(); + arrs = fs.get(); + int newSize = arrs.size(); + assertEquals(4, newSize - oldSize); + } +} \ No newline at end of file