tag:blogger.com,1999:blog-2194980644624669461.comments2024-02-03T15:20:47.844+01:00Agile Coding mit Java, Kotlin, Spring und MicroservicesElmar Brauch - Microservice Masterhttp://www.blogger.com/profile/09745888019987963517noreply@blogger.comBlogger25125tag:blogger.com,1999:blog-2194980644624669461.post-2339358438561089702023-11-21T09:31:58.742+01:002023-11-21T09:31:58.742+01:00Vielen Dank!Vielen Dank!Ingahttps://www.blogger.com/profile/05981792710611569650noreply@blogger.comtag:blogger.com,1999:blog-2194980644624669461.post-30769199548990214892023-09-25T06:03:27.227+02:002023-09-25T06:03:27.227+02:00Wir haben nicht KI im allgemeinen evaluiert, sonde...Wir haben nicht KI im allgemeinen evaluiert, sondern nur ein konkretes Tool: GitHub Copilot. <br />Unser Evaluierungs-Ergebnis ist, dass man damit das Tippen von Code als eine von vielen Tätigkeiten in der Software-Entwicklung etwas schneller ausführen kann. Andere, z. B. kreativere Tätigkeiten in der Software-Entwicklung können mit dem Tool Copilot Stand heute nicht verbessert werden.Elmar Brauchnoreply@blogger.comtag:blogger.com,1999:blog-2194980644624669461.post-48907733421408703422023-09-25T02:24:53.886+02:002023-09-25T02:24:53.886+02:00Die Uno hat vor wenigen Jahren einen lesenswerten ...Die Uno hat vor wenigen Jahren einen lesenswerten Bericht veröffentlicht.<br /><br />Vereinten Nationen mit dem Titel "Künstliche Intelligenz für nachhaltige Entwicklung: Eine Roadmap für die Vereinten Nationen". Der Bericht wurde im Jahr 2019 veröffentlicht und ist in deutscher Sprache verfügbar.<br /><br />In dem Bericht werden die folgenden 10 Probleme der Menschheit genannt, die durch KI gelöst werden könnten:<br /><br /> Armut<br /> Hunger<br /> Krankheiten<br /> Bildung<br /> Energie<br /> Wasser<br /> Umwelt<br /> Klimawandel<br /> Frieden und Sicherheit<br /><br />Der Bericht beschreibt, wie KI in diesen Bereichen eingesetzt werden könnte, um die Probleme der Menschheit zu lösen. So könnte KI beispielsweise verwendet werden, um neue Medikamente und Behandlungen für Krankheiten zu entwickeln, die Bildung für alle zu verbessern oder erneuerbare Energien zu fördern. <br /><br />Angekommen im 2023 geht es nur noch darum, dass Mitarbeiter schneller programmieren können? echt jetzt? Damit haben Sie sich in dem Team beschäftigt? Sorry... Ihr Hauptproblem ist nicht, dass das Produkt kreativer wird, dass es 24 Design Thinking Methoden verbessert, nicht, dass die Anwendung besser wird. Es geht bei der Frage nur darum, ob sie mehr aus dem Mitarbeiter:in rausbekommen. cool. Warum geht es nicht darum, dass die Arbeit mit einer KI nicht angenehmer wird? Leichter? Mehr Inspiration? Mehr Vision? Wenn Ihre Mitarbeiter schneller sind können sie ja sicherlich jetzt lästige Meschen kündigen. Glückwunsch.Ralfhttps://blog.myoos.denoreply@blogger.comtag:blogger.com,1999:blog-2194980644624669461.post-38614607703728630982023-03-06T09:24:19.075+01:002023-03-06T09:24:19.075+01:00Super Erklärung, danke für die Mühe;)Super Erklärung, danke für die Mühe;)Agilashttps://hundehaftpflichts-testsieger.de/agila-hundehaftpflicht-test/noreply@blogger.comtag:blogger.com,1999:blog-2194980644624669461.post-86806242648271770592023-02-28T20:50:38.620+01:002023-02-28T20:50:38.620+01:00Unser Telekom OpenID Provider bietet die Abfrage v...Unser Telekom OpenID Provider bietet die Abfrage von Claims auch ohne /userinfo Endpoint an. Ich kann leider nicht sagen, ob das bei allen OpenID Provider ein Standard-Feature ist.Elmar Brauch - Microservice Masterhttps://www.blogger.com/profile/09745888019987963517noreply@blogger.comtag:blogger.com,1999:blog-2194980644624669461.post-60158869000247627762023-02-28T19:19:06.283+01:002023-02-28T19:19:06.283+01:00Guter Beitrag! Mit dem access token kann ich ja üb...Guter Beitrag! Mit dem access token kann ich ja über den /userinfo endpoint gewisse claims anfragen. Kann ich spring security direkt so konfigurieren, dass die automatisch abgeholt werden oder muss ich das "zu fuss" machen? Die OicdUserService Methoden aus der Spring doku haben mir da nicht geholfen ... <br />Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-2194980644624669461.post-22602653866559344372023-02-17T15:07:00.204+01:002023-02-17T15:07:00.204+01:00Genau das macht das Spring Framework mit der hier ...Genau das macht das Spring Framework mit der hier gezeigten Konfiguration.<br />Schau dazu mein YouTube Video https://youtu.be/lKXwxDM9pOk ab Minute 21:50 an.<br />Nachdem Neustart ist es Anwendung B statt A und das Aufrufen einer authenticated URL sorgt für den automatischen Login bzw. den Single Sign-On.<br />Auch wenn ich das an dieser Stelle im Video eigentlich nicht zeigen wollte ;-) Elmar Brauch - Microservice Masterhttps://www.blogger.com/profile/09745888019987963517noreply@blogger.comtag:blogger.com,1999:blog-2194980644624669461.post-16240224925506012592023-02-17T10:32:47.231+01:002023-02-17T10:32:47.231+01:00Hi, Danke für die Antwort. Ich glaube ich muss mei...Hi, Danke für die Antwort. Ich glaube ich muss mein Anliegen nochmal genauer beschreiben :D <br />Wenn ich bei Anwendung A auf Login drücke und in Anwendung B schon eingeloggt war dann funktioniert das auch. Ich möchte allerdings beim aufrufen von A schon im Backend checken ob die Session (beim IDP) schon besteht und dann direkt übernehmen und nicht die Login Seite anzeigen. Wenn nicht soll er auf die Default Login Seite geleitet werden. <br />Wenn ich direkt einen redirect zum IDP machen würde wäre ich ja dort in der Login Maske "gefangen" wenn keine Session besteht und nicht auf meiner Seite. Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-2194980644624669461.post-13629323030649170162023-02-17T08:02:07.877+01:002023-02-17T08:02:07.877+01:00Hallo, Du musst genau das tun, was hier gezeigt wu...Hallo, Du musst genau das tun, was hier gezeigt wurde. Allerdings in beiden Anwendungen. Beide Anwendungen sind dann der Client des OpenID Providers und bekommen somit die gleiche Single Sign-On Session. Der OpenID Provider kann dazu auch jeder Anwendung eine eigene ID und eigenes Secret geben.Elmar Brauch - Microservice Masterhttps://www.blogger.com/profile/09745888019987963517noreply@blogger.comtag:blogger.com,1999:blog-2194980644624669461.post-46085117560889676902023-02-16T15:09:30.022+01:002023-02-16T15:09:30.022+01:00Hi, welchen Ansatz müsste ich verfolgen, wenn ich ...Hi, welchen Ansatz müsste ich verfolgen, wenn ich mich mit einer anderen Anwendung A bei dem IDP anmelde und dann von Anwendung B diese Session automatisch übernehmen möchte ohne das ich nochmals auf die Login Seite komme?Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-2194980644624669461.post-5894292870679720212021-12-14T09:26:35.251+01:002021-12-14T09:26:35.251+01:00Analyse mit gradle:
gradle dependencies
Und dann...Analyse mit gradle:<br /><br />gradle dependencies<br /><br />Und dann ebenfalls nach "log4j-core" suchen.<br />(Log4j-api und dergleichen werden in spring-boot verwendet, sind aber wohl nicht verwundbar)<br /><br />https://spring.io/blog/2021/12/10/log4j2-vulnerability-and-spring-bootLukasnoreply@blogger.comtag:blogger.com,1999:blog-2194980644624669461.post-7184986711160774272021-09-27T21:14:32.886+02:002021-09-27T21:14:32.886+02:00Video-Präsentation zu diesem Artikel
https://youtu...Video-Präsentation zu diesem Artikel<br /><a href="https://youtu.be/6F3Tp1CVWz0" rel="nofollow">https://youtu.be/6F3Tp1CVWz0</a>Elmar Brauch - Microservice Masterhttps://www.blogger.com/profile/09745888019987963517noreply@blogger.comtag:blogger.com,1999:blog-2194980644624669461.post-69904062012443071492021-08-20T08:58:27.996+02:002021-08-20T08:58:27.996+02:00Falls ihr MongoDB Atlas verwendet, könnt ihr die V...Falls ihr MongoDB Atlas verwendet, könnt ihr die Verbindung zur Datenbank in der application.properties Datei mit nur einer Zeile konfigurieren. Das sieht dann z.B. so aus:<br /><br />spring.data.mongodb.uri=mongodb+srv://mongo:@cluster0.clla8.mongodb.net/testElmar Brauch - Microservice Masterhttps://www.blogger.com/profile/09745888019987963517noreply@blogger.comtag:blogger.com,1999:blog-2194980644624669461.post-88873314140672117492021-06-21T07:13:48.360+02:002021-06-21T07:13:48.360+02:00helpful article helpful article Manihttps://www.brisklogic.co/noreply@blogger.comtag:blogger.com,1999:blog-2194980644624669461.post-11892444651736289402021-04-24T19:30:57.661+02:002021-04-24T19:30:57.661+02:00Spring Security ermöglicht das Anpassen der Authen...Spring Security ermöglicht das Anpassen der Authentifizierung und Zugangskontrolle,<br />indem man vorhandene Module konfiguriert oder eigene schreibt und sie in die Filter-Chain aufnimmt.<br />Hier eine Liste vorhandener Module: https://docs.spring.io/spring-security/site/docs/5.4.6/reference/html5/#modules<br /><br />Alternativ könnte man die Spring Web-Anwendung in ein privates Netzwerk packen<br />und dann den Zugriff über eine DMZ ermöglichen: https://de.wikipedia.org/wiki/Demilitarisierte_Zone_%28Informatik%29<br /><br />SecuRemote kenne ich nicht, aber eine dieser beiden Varianten sollte sicher damit funktionieren.Elmar Brauch - Microservice Masterhttps://www.blogger.com/profile/09745888019987963517noreply@blogger.comtag:blogger.com,1999:blog-2194980644624669461.post-32986156597512291382021-04-23T08:34:30.836+02:002021-04-23T08:34:30.836+02:00Gibt es die Möglichkeit die Spring Anwendung so zu...Gibt es die Möglichkeit die Spring Anwendung so zu schützen, dass man nur mit einem Dienst wie SecuRemote darauf zugreifen darf?Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-2194980644624669461.post-202880172723307472021-04-12T15:10:27.128+02:002021-04-12T15:10:27.128+02:00Mich haben Fragen zum Artikel erreicht, die ich hi...Mich haben Fragen zum Artikel erreicht, die ich hier für alle beantworten möchte:<br />- Gibt es Vererbung bei Records? <br /> Nein, Extension ist nicht vorgesehen, records sind final, siehe dazu: <br /> https://openjdk.java.net/jeps/395<br />- Unterstützt MapStruct Records? <br /> Ja, seit Version 1.4.0, siehe: <br /> https://mapstruct.org/news/2020-09-28-mapstruct-1_4_0_Final-is-out/Elmar Brauch - Microservice Masterhttps://www.blogger.com/profile/09745888019987963517noreply@blogger.comtag:blogger.com,1999:blog-2194980644624669461.post-46518794151033370202021-04-12T15:05:52.207+02:002021-04-12T15:05:52.207+02:00Danke für den Kommentar zum Umgang mit null-Values...Danke für den Kommentar zum Umgang mit null-Values. <br />Ich schau mal, ob ich dazu einen künftigen Blog-Artikel schreiben kann.Elmar Brauch - Microservice Masterhttps://www.blogger.com/profile/09745888019987963517noreply@blogger.comtag:blogger.com,1999:blog-2194980644624669461.post-34801921728292688562021-04-12T09:09:58.676+02:002021-04-12T09:09:58.676+02:00Ein Artikel über den Umgang mit null-Values fehlt ...Ein Artikel über den Umgang mit null-Values fehlt noch. Das ist ein sehr wichtiges Thema. Optional<> als Return-Type und wie man mit diesen Return-Types elegant umgeht. Optional hat viele interessante Methoden, die aber aus Unkenntnis oft falsch eingesetzt werden.<br />Objects.requireNonNull() für Argumente wird zu wenig genutzt und Objects.equals() wird ebenfalls zu wenig genutzt, obwohl es hilft, die NullPointerExceptions beim Vergleich eines null-Values zu vermeiden. (value.equals("test") ist gefährlich, "test".equals(value) wird oft vergessen, Objects.equals(value, "test") ist einfach immer richtig).Martin Bothnoreply@blogger.comtag:blogger.com,1999:blog-2194980644624669461.post-33016852064514410352021-03-03T15:20:49.319+01:002021-03-03T15:20:49.319+01:00Danke für die Frage.
Mein Blog ist nicht mit Spr...Danke für die Frage. <br /><br />Mein Blog ist nicht mit Spring und Thymeleaf gemacht.<br />Ich verwende den Blog-Service von Goolge, siehe https://de.wikipedia.org/wiki/Blogger.com.<br />Die 110 Sprachen kommen von Google Translate. Google Translate ist als Plugin einfach eingebunden.<br /><br />Im Enterprise Kontext will man aber meist eigene Übersetzungen selbst formulieren und nicht automatisch generierte Übersetzungen von Google Translate verwenden. Das kann man dann mit Spring und den message.properties Dateien machen, so wie es hier gezeigt ist.Elmar Brauch - Microservice Masterhttps://www.blogger.com/profile/09745888019987963517noreply@blogger.comtag:blogger.com,1999:blog-2194980644624669461.post-73313059000524219592021-03-03T14:39:51.823+01:002021-03-03T14:39:51.823+01:00Bedeutet das, dass du für alle 110 Sprachen, die d...Bedeutet das, dass du für alle 110 Sprachen, die du auf deinem Blog hier anbietest, eine eigene messages_xx.properties erstellt hast, die extra eigene Übersetzungen enthalten?Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-2194980644624669461.post-76477508990374853662021-02-28T14:15:03.517+01:002021-02-28T14:15:03.517+01:00Ein Kollege hat mich darauf hingewiesen, dass Inte...Ein Kollege hat mich darauf hingewiesen, dass IntelliJ und Eclipse ebenfalls eine Funktion anbieten, um Ersetzungen in einer großen Menge von Dateien durchzuführen. <br><br />Eclipse bietet dazu den "Replace..." Button in der "File Search" Funktion an. Elmar Brauch - Microservice Masterhttps://www.blogger.com/profile/09745888019987963517noreply@blogger.comtag:blogger.com,1999:blog-2194980644624669461.post-51566518093649579602021-02-01T22:19:27.931+01:002021-02-01T22:19:27.931+01:00Hallo David,
vielen Dank für Deine guten Anmerkung...Hallo David,<br />vielen Dank für Deine guten Anmerkungen.<br /><br />Bezüglich meiner Kontext-Ladezeiten Kalkulation hast Du recht.<br />Spring hat ein Kontext-Management und Caching, <br />so dass unter bestimmten Bedingungen der komplette Kontext oder zumindest Teile davon wiederverwendet werden.<br />Wenn man in meinem GitHub Demo-Projekt (https://github.com/elmar-brauch/beans/tree/master/src/test) <br />die Testklasse ItemPersistenceServiceSpringBootTest einfach kopiert und dann alle Tests zusammen ausführt, <br />sieht man, dass der Kontext nur einmal erstellt wird und die Ausführung der Kopie viel schneller geht.<br /><br />Wenn man in der kopierten Klasse den Kontext verändert, <br />so dass die beiden Klassen unterschiedliche SpringBootTest Annotationen haben:<br /> <i>@SpringBootTest<br /> class ItemPersistenceServiceSpringBootTest2 {<br /> @SpringBootTest(classes = {InMemoryItemStore.class, IdGenerator.class})<br /> class ItemPersistenceServiceSpringBootTest { ...</i><br />Sieht man, dass der Spring Kontext 2 Mal geladen wird.<br />Aber auch dann ist die Ausführung durch das Spring Caching beschleunigt.<br />Die Beschreibung der Ladezeiten-Kalkulation in meinem Artikel muss ich also korrigieren.<br /><br /><br />Das Testen der InMemoryItemStore Klasse in einem SpringBootTest ist nicht nötig, <br />ein normaler Test ist vollkommen ausreichend.<br />Ich kann also auch hier Deinen Anmerkungen folgen und stimme Dir zu.<br />Im Blog-Artikel ging es mir aber darum zu zeigen, <br />wie man aus dem normalen Test einen SpringBootTest machen kann.<br />Daher habe ich mich für die beiden gezeigten Formen entschieden und jeweils eine eigene Testklasse geschrieben.<br />In der Praxis würde ich nur eine Testklasse erstellen.Elmar Brauch - Microservice Masterhttps://www.blogger.com/profile/09745888019987963517noreply@blogger.comtag:blogger.com,1999:blog-2194980644624669461.post-42481967694045680302021-02-01T09:22:34.693+01:002021-02-01T09:22:34.693+01:00Hallo Elmar,
mir gefällt dein Artikel sehr gut. I...Hallo Elmar,<br /><br />mir gefällt dein Artikel sehr gut. Ich selbst bin auch ein großer Fan der Clean Code Serie und denke, dass Tests genau so sauber sein sollten wie der Code selbst. Allerdings hätte ich zwei Anmerkungen:<br /><br />Gegen Ende deines Artikels schreibst du, die Ausführung von 10 Spring Boot Tests könnte bei Kontext-Ladezeiten von etwa 30 Sekunden, in Wartezeiten von bis zu 5 Minuten resultieren. Verstehe ich das richtig, dass hiermit gemeint ist, dass für jeden Test ein neuer Spring Kontext erzeugt wird, für den 30 Sekunden einkalkuliert werden? Ich dachte Spring ist in der Lage den Kontext für mehrere Tests, des gleichen Spring Profiles, wiederzuverwenden... (https://docs.spring.io/spring-framework/docs/current/reference/html/testing.html#testing-ctx-management)<br /><br />Des weiteren hinterfrage ich, ob es wirklich die beste Lösung ist, die InMemoryItemStore Klasse in einem SpringBootTest zu testen. Laut meinem Verständnis wäre hier kein Integrationstest notwendig. Schließlich kann die Klasse ja vom Spring Kontext abgekapselt werden und somit isoliert getestet werden. Vielleicht wäre hier der Einsatz von Mocking sinnvoller (wie du zu Anfang ja auch beschreibst, um die Abhängigkeit zum IdGenerator aufzulösen). Ich denke auch, dass das Testen gegen eine Schnittstelle problematisch ist, wenn man zum Beispiel Metriken wie die Branchcoverage berücksichtigen möchte.<br />Vielleicht könnte ein (abgewandelter) SpringBootTest !zusätzlich! zum SpringBoot-freien-Test verwendet werden, um zu testen, dass z.B. der Dependency Graph richtig aufgesetzt wurde und um den Blackbox Test (Test gegen die Schnittstelle) auszuführen.<br /><br />Ich hoffe, dass meine Kritik nicht negativ aufgegriffen wird. Ich finde deinen Beitrag wirklich interessant, weil er die wichtigsten Punkte des Clean Code Testens prägnant darstellt. Vielmehr möchte ich hiermit eine Diskussion starten, um die vorgestellten Prinzipien aus einem anderen Blickwinkel zu reflektieren. :)<br /><br />Viele Grüße<br />DavidDavidnoreply@blogger.comtag:blogger.com,1999:blog-2194980644624669461.post-21998304789122501712020-12-17T13:47:59.468+01:002020-12-17T13:47:59.468+01:00XSS Angriffe kann man auf dieser Webseite ausprobi...XSS Angriffe kann man auf dieser Webseite ausprobieren:<br><br />https://xss-game.appspot.com/level1<br /><br />Elmar Brauch - Microservice Masterhttps://www.blogger.com/profile/09745888019987963517noreply@blogger.com