Foojay Podcast #75: JCON Report, Part 4 - Tips and Tricks for Java Devs
Java BeginnerJava Core

Foojay Podcast #75: JCON Report, Part 4 - Tips and Tricks for Java Devs

This is the final part of the JCON 2025 interviews with a lot of tips and tricks!

In the three previous podcasts, we featured interviews from the JCON conference on “Being a better Java developer,” “Evolutions in Java,” and “How to use AI with Java.” However, we talked to many more people during the conference, so this podcast focuses on tips and tricks. Let’s learn from the many other experienced visitors of JCON.

Video

Podcast Apps

You can listen and subscribe to the Foojay Podcast on:

Content

00:00 Introduction

00:34 Merlin Bögershausen - OpenRewrite and Azul Intelligence Cloud
https://www.linkedin.com/in/merlin-boegershausen

07:08 Eberhard Wolff - Measure developer productivity
https://www.linkedin.com/in/eberhardwolff

12:28 Annelore Egger - Dealing with bad code, it’s not your fault
https://www.linkedin.com/in/anneloredev

15:21 Michael Vitz - Unexpected things you can do with Java
https://www.linkedin.com/in/michaelvitz

18:40 Michael Simons - Neo4J database models
https://www.linkedin.com/in/michael-simons-196712139
https://motherduck.com/duckdb-book-brief

23:13 Stefan Böhringer - Building a project for education from scratch with Quarkus
https://www.linkedin.com/in/datenschauer

28:14 Johannes Rabauer - Learned from earlier projects
https://www.linkedin.com/in/johannes-rabauer

30:33 Roland Weisleder - ArchUnit, testing architecture with unit tests
https://www.linkedin.com/in/roland-weisleder

34:26 Simon Martinelli - htmx, full stack, Vaadin, JOOQ
https://www.linkedin.com/in/simonmartinelli

37:02 Loïc Magnette - Web development, Angular, React, Java community versus others
https://www.linkedin.com/in/lomagnette

40:41 Tanja Obradovic - Eclipse Foundation, JakartaEE
https://www.linkedin.com/in/tanja-obradovic-095604

49:19 Syed Usman Ahmad - Grafana, Prometheus, monitoring tools, OpenTelemetry
https://www.linkedin.com/in/usmanlinux

55:38 François Martin - Tools, chaos testing, Toxyproxy
https://www.linkedin.com/in/fran%C3%A7oismartin

01:01:31 Conclusion

Transcript

Automatically generated from the audio, so it can contain errors in names and technical terms. Suggest a correction.

[0:00] This is the final part of the JCON 2025 interviews with a lot of tips and tricks. Welcome to the Foojay podcast. All your news about OpenJDK. In the three previous podcasts, I served you interviews from the JCON conference about being a better Java developer, evolutions in Java, and how to use AI with Java. But I talked to a lot more people during the conference. So this podcast focuses on tips and tricks. Let’s learn from the many other experienced visitors of JCON. Let’s start with keeping your code up to date and how you can automate code changes. Merlin Bush from Mona shares how we can use open rewrite to modernize code, optimize the number of libraries in your project and find unused code with Azul intelligence cloud. Open rewrite can be used to streamline your text stack to achieve some consolidation of the text stack in terms of if you have a big organization from time to time this was in the past it was a good choice to go with Apache commons logging then it was the a good choice to go with SLF4J and with Log4j and all of them were well choices at their time some of the projects are

[1:21] Just maintained on a minimal level and some of them have different version in use. So we have a vi wide variety of libraries used for logging at all inside one organization but an organization tries to stay should stay on a common code style of coding that includes library and API usage and with open rewrite we can migrate from one library to another library or in terms of SLF4J from SLF4J to SLF4J to streamline the versions to streamline the API usage and to achieve even more more standardized use of the API. I I’ve seen this before in older projects, legacy projects that suddenly seem to have three different XML libraries. So this is a bit the same ID if you only need one that’s a better approach. Yes. Yes. And what we also see in big organizations is that there even if they have central management of dependencies in terms of versions and as a big parent or something like this or a bill of material there are still different versions for example Jackson and use but if you’re connecting two services with a completely different version of Jun in between that could be a problem in the

[2:44] Future or could be right now. And if you’re using a recipe to migrate all of them to the same version to the most recent without CVES without problems of end of life cycles and something like this. So then you have a again a more standardized way and when you have this standardized way and the standardized use of APIs you can move even faster to towards different cloud provider to towards a different implementation and different application service to overcome these vendor lockins to achieve more digital serenity and get rid of a special provider that you know yeah that’s the great thing about Java you have this great community creating libraries but CVS you mentioned them briefly so an older version can also have security issues is that something you can alert detect that’s definitely something we can alert so with rewrite there is an recipe it’s called find and fix vulner vulnerability depend dependency with vulnerabilities and it is using the GitHub code advisor security advisor database and to move migrations to detect migrations with CVS and migrate to a fixing version. And this recipe can be applied

[4:04] From time to time. And whenever this recipe finds something, there could be an alert or there could be an automatic fix for this with the feature called data table. Every recipe can be used to collect data or to transform code. The collection collecting data feature can be used to build dashboards on top of that. So we do this with our modern SAS with the software as a service solution. There is an there’s some you can develop their dashboards and characterize your current data you have available for CVS for unpatched versions for end of life versions approaching. So all of them is there was also the announcement that you will cooperate with Azul to find that code. How does that work? Azul has this very neat feature that they can analyze your code in production in runtime and identify methods or code pages that are never used in the last weeks, months, years or something like this. And with this data you can go to your code and remove that code. You can do that by hand or you can use the modern tooling. We have a recipe for this. This is working together with the

[5:22] Zoo cloud solution which is pulling the data which method which code passage is no longer in use and then removes this code opens a PR. So the team don’t have to do it on manually they just have to accept. That’s the same for this is combined with removing unused imports, removing unused dependencies because from if the branch is deleted probably a dependency is no longer needed. All of these comes together with this recipe with this data coming from Azul and is being serialized made reality with open rev. So removing that code helps you to have less work as a developer, less code to maintain because yeah, some people don’t realize that unit tests need to be kept in sync with code which is probably sometimes never used. Yes, because unused code within one project. We can easily determine un unused code by following the code path.

[6:23] The problem is if you have a public method then it is a used call and everything what is following this public method is considered used call with the data from Azour we can determine no it isn’t used in the last five years or something it’s safe to delete and then we see okay it’s also safe to delete to this private classes here because it’s no longer used it’s also okay to delete these unused test cases here it’s also okay to remove the dependencies at whole and so there just one method that is flagged as this method is no longer used can end up in a full module being removed because it’s no longer used and that’s a beauty deleting code is always a good thing I wolf had a talk at JCON about measuring developer productivity I asked him if tracking the number of fixed tickets is a good indicator to measure this the number of tickets solved might even be a good idea. The question is what do you do with that data? So if you try to identify obstacles and remove them then I think that might be a good idea.

[7:32] But if you try to incentify people using that metric it might be a bad idea. And there is even a law called Godard’s law and God’s law basically says if you manage by some metric then it keys to be a good metric. So if you manage by by test coverage for example, people will start to test trivial code and then test coverage doesn’t really tell you whether the tests are good or bad. It just becomes pointless and therefore you have to be careful about these kinds of things. Yeah. So if I know that my test coverage should be 100% I’m just aiming at the test coverage. Exactly. And then you’re basically gaming the system. And that is why I think it’s important to figure out what the goal is. And I’m also talking about the space framework which gives you some ideas about which topics you want to measure or which metrics you want to measure. And the idea is to basically ask the question okay so what is it that you want to care that you care about? What is the problem that you want to get a better understanding about? And then you choose some metrics and figure that out.

[8:40] And I think one of the interesting points is that it’s also about developer well-being and how they feel because and I think that is something that is often overlooked in the industry. If developers or teams don’t feel bad about what they are doing, chances are that what they are doing is actually not the best the most productive way. But that is something that people hardly care about in my opinion. It’s something that is well that mostly people don’t think about too much. So well-being, Jira tickets, are there other specific things that we can measure that will reveal how productive our team is? so there are obviously quite a few things and I think one of the things that I find interesting and that quite a few people don’t really know are the dora matrix and it’s about how much time how often you actually deploy and when I ask people whether this leads to more productivity to deploy more often it’s actually something that they have a hard time figuring out and if I ask them well what’s the benefit of deploying more often usually they don’t come up with any kind of productivity things but

[9:58] In fact if you deploy more often more frequently then you will identify the bottlenecks in your process you will optimize them away and therefore the process becomes better so it’s more like a lean optimization thing right like in lean production where you try to have a constant flow of things through your whatever it is factory So if you try to get a constant flow of things through your pipeline through your process then chances are that you get more productive and I think this is so very important because it’s one thing that we can talk to managers about. So here is something that improves your productivity. It’s actually easy to measure and just do it. And the other thing is so that is something that I even might ask you. So what do you think if you deploy more often? what’s the result on burnout? So will it reduce burnout? What do you think? I think in the beginning it’s a disaster with a lot of troubles and getting things fixed.

[10:59] But if you come into some kind of flow, I think it can reduce a lot. Yeah. And that’s also something that a lot of people don’t really get right. and there are there is data about that. So there are the studies the DORA studies about that and they actually say that it reduces burnout but again so you have the sort of the exception. If I ask people whether it reduces burn or not, they are not too sure. But it turns out that most of the people actually want to work in an environment where you deploy more often. Which is interesting, right? Because if they think that this is the better environment, why isn’t it so obvious that it would also reduce burnout? And again that is something that we have to talk about I think more that the environment that developers like to work in is probably more productive and it’s also something that I’m guilty of because like 10 plus years ago I wrote a book about continuous delivery and the reason why I did that is because I felt that this is a better way. it would feel me make me feel better to have a constant flow and to be able to

[12:11] Deploy thing systems just like that but in the book it doesn’t really say that so I talked about you know time to market but I didn’t talk about that so that is one of the lessons learned in my opinion from writing that book and from talking about these things being a productive developer is heavily influenced by the quality of the code you have to work with analora egger had a talk about dealing with bad code and how it’s not your fault. She explains why was about business complexity that can also translate into bad code quality. If you make the business logic too complex, then it will also translate into the code and if if it’s more complex the code quality yeah starts starts to decrease.

[13:02] If it’s not your fault, if you’re part of a big team, then how can you fix it or try to fix it or improve it? Yeah. So, I mean, in general, I also talked a lot about the fact that it’s important to even realize that you have this issue and a lot can especially when it’s complexity that came from the business and translated into bad code. it’s very important that you try to improve the communication with the business and one thing I mentioned is that I think a lot of people have assumptions. So the business team has some assumptions about how technical things work and developers have sometimes some assumptions about how the business works and these assumptions are often not correct. So if you build it on that then you build something that is not good. So I think it’s very important to realize when you make assumptions about something and then just make sure to try and ask more questions to be sure to really understand the other side but also that to try to give as much information as possible so the other side can try to understand it so you can overcome this gap. People who start doing development

[14:24] Because they think I just want to work with the computer and not with people, they’re probably wrong. Communication is just as important as the development itself. Yes, I agree. I mean, first of all, you also have never a project where only one person programs. So even if you don’t look at the commun communication between developers and business, it’s also important that different developers have a good communication. I also touched on that a little bit that there are often misunderstandings when someone for example doesn’t use like the correct terms and then you don’t speak of the same thing. So yeah, you’re right. it’s not only working with computers communication and in general working with all people I think is very important as well and maybe sometimes even more important. Mhm. Mikall Vitz had a lightning talk about unexpected things you can do with Java. What is it exactly he wants to explain with his talk? main idea was there was a lightning talk by Gary Bernard I think on a rails conference where he did a JavaScript talk and showed what’s possible with JavaScript and there are

[15:40] Some crazy stuff like subtracting numbers from strings and you get effects you won’t believe and I thought we usually make fun of other languages and forget that our language may have some rough edges which looks the same to other communities and so maybe we should a little bit laugh about ourself and so that’s the main idea it’s not about that deep learning. Mhm. did anything related to subject change with newer versions? Do you see changes in your examples because Java evolves itself? yeah, one new example is related to the switch expression instance of things with integers and primitives. So there’s a nice effect you can show which was not possible because before it was built in and I mean that manipulating stuff from strings it was easier in previous JDK versions.

[16:42] Nowadays you have to set a flag to make it possible or which is not included within the talk but there is an example what’s faster to uppercase or to lower case and that depends on your local because for example for the Turkish language there are some special rules which are included in a not a hashmap the synchronized one below and that was is nowadays very much faster than on JDK8 or 11 for example. So yeah, they change a little bit. Yeah. Yeah, it’s unbelievable what’s under the hood. I’ve written a blog post about the time zones that for instance changing to a newer version can give you a different currency for some country. So there’s indeed a lot which is changing within the runtime and the library that we don’t expect to see. Yeah. Yeah. I remember your case. I think they changed the lookup of Croatia Croatia the currency and for Kazakhstan the time zone. Yeah. Yeah. The Yeah. And I mean if you update from one JDK to another that are ma mainly the points you miss when reading through the documentation, right? But the nice thing that you share is that some things

[18:00] Become a lot faster by just changing the runtime. Isn’t that unbelievable that you don’t need to change your code and still can benefit from other improvements? Yeah, I mean that’s one of the magic points of the JVM, right? I mean if you use for example J Ruby is so much faster than the original Ruby runtime. And who would have thought that a higher level language could be faster than the lower level languages which are directly at the machine, right? So I mean the whole JVM is basically it’s fascinating in case of speed and performance and such things. Yes. Mhl Simos is staff engineer at NO4J. So he is the perfect person to explain us what is the difference between a graph and a relational database. When you think about relational databases the columns and the rows of a table they make up relations. Many people mistake relational databases, the constraints you do, foreign keys between relations as actual relations. Those are not the relations. In Neo4j, we store physical relations between entities such as like a movie and the actors of a movie and you can query those

[19:14] Relationships directly. We have a we have a query language for that is called cipher. And in the last year there has been a new standard which is GQL graph query language not to confuse with graphql that’s a different thing. yes that’s the main difference between a relational column or table oriented database and the graph database right and is this hard to learn if you are an SQL experienced developer depends on your minds I have to say so I said I’m responsible for spring data near 4J which is an object graph mapper and that’s very similar to object relational mappers some people only interact with the database through these mappers so you have two parts object object and source mapping and query generation. If you ever think about only coming from that angle, it’s generally hard to leave Java for a moment behind and go to a query language. I don’t think that SQL is hard and I don’t think that cipher is hard. It’s a way Oh jeez, I wanted to avoid saying AI, but it’s like a good prompt. You tell the thing what you want and it comes up with the optimal algorithm to pick data

[20:26] From the store and massage it in the way you want to project it in the end. Yeah. do you agree that as a database developer you should know SQL and not only rely on mapping things and libraries helping you? Can you be a better database user if you know the language of the database itself? Absolutely. So you’re completely running into open doors with that statement with me. So I’ve given talks about Neo4j OM and Spring Data and I also given talks about SQL and other tools and I think you have to know the lingua franker the language of your database to fully utilize it. That’s that’s for sure right. these mapping tools they are general purpose tool and you can only generate queries on a yeah not on the surface but general purpose queries but you pick a specific database for a reason you pick a graph database maybe you want to detect circles or fraud links you want to use it for graph rack in AI you want you picked it for a specific reason and for that you have to know the language mappers can only help you so far to hydrate object object graph afterwards for you. And in

[21:42] Relational databases, you often have the point that you have to understand the transaction machinery to know how the second level cache behaves or doesn’t behave. So yes, I think you should absolutely know the ground works for these mappers. One of the arguments for a mapper is yeah, but maybe we will switch to another database later. Does that happen a lot? I haven’t seen it in 25 years of software engineering really not maybe if you have a product that you ship dedicated for different databases like you allow the user to either pick my SQL or posgress or whatever then maybe that’s that’s a good reasoning for doing so right but in big enterprise projects I haven’t seen it in my career once so the point is you really should think about which database you’re using when you’re setting up a new project each database has its proper use. Yes, absolutely. And there’s there’s maybe voices that say use an abstraction like Spring Data like the repository abstraction which I think is a great abstraction to think and to integrate your database interaction with something like domain driven design.

[22:55] That’s for sure. But I would not sell it as an abstraction over like MongoDB, radius, Neo4j or relational databases. They will definitely behave completely different and you do different things for you and you should not abstract this away. Stefan Buringer developed a web application to train and measure reading skills in schools in Germany. As a Python developer, he deliberately chose Java as it allowed him to develop this application very fast. Java is our main driver. We use the Quarkus framework. This is our main engine which drives all the application the whole business logic the connection to the databases the connection to it’s running kubernetus we have different keycloes also running a keycloak a official identity management system of the German government we connect to this so this is all done with quarkus and then on top of that there’s a nextjs react application which does all the front end but all The data handling is with Quarkus. So this sounds like it’s a big thing. How many students are there in this system? Yes. by now we had our first measurement time slot in October

[24:14] 2024 to November 2024 and we tested 180,000 students in the first time slot. So there were about 1,400 schools from the 200 2,200 schools in the state of Bavaria in Germany. So we had a 65% of all the schools. yeah and this was a big issue because we’re generating data which helps us in the research and is an unseen size unseen amount of data we got from the schools in Germany. So this is really a unique data set. Do you think you could achieve the same results with other languages or did you choose Java as we know it already and we know this is reliable for what we want to achieve? Yeah, we didn’t use Java at the time we got the project we are most familiar with statistical programming like programming in the R programming language. We used Python a lot for some projects before also application development with Python frameworks but we better know the Python data science and machine learning stack in our department. So it was a big issue for us which technology stack should we use and because I a friend of mine who developed Java for 20 years now he

[25:47] Introduced me to a Java user group in my area and I went there and Adam Bean was there. I think he you know Adam Bean and he well he displayed Java as a very good opportunity and I went home and I did I don’t know three weeks of researching reading about Quarkus Hibernate Jakarta E and so on and I did dummy projects prototype things and I came to the conclusion that we should use Java because it’s such a reliable thing and that’s that was the start. So we became totally fresh to this Java world and it was a really easy introduction which is nice to hear because for a lot of people Java is old is too difficult to learn but I hear you start with Quarkus with actually the latest of what is available and what has started within the Java community. So isn’t this great that you can so quickly catch up with the new technology? Yeah, of course. I was totally surprised. I mean really when back in 2003 and 2004 when I was a student at the university, I had to learn Java, you know, and it was this curriculum and it was it felt really clunky and I don’t I don’t know. But

[27:15] 20 years later, it evolved in such a way that it was a really nice experience to program with Java aside from Quarkus because with all the I’m I’m a data guy I think so it was really natural for me to use the stream API of Java and so on and also the records and optionals and so on doing things with hibernate with a database of course it could be that I have 20 years of developer experience. So I tried a few languages and a few frameworks. Okay. But it totally surprised me that Java really felt nice and easy and I really liked I love to program in Java. So it’s my I think now one and a half year after this it’s my second language I program in besides Python of course because you know Johannes Rab helped Stefan with his project and also had a talk at JCON about things he learned from earlier projects what is the stuff he wants to share it’s basically about experiences I had in several different projects what was the problem there and how we solved of it basically and it’s it’s really basic. So like that you should use git that you should use some kind

[28:41] Of git workflow as well that you use issue trackers, wikis, tests, stuff like that like really basic. But in our experience as a company, we had it several times that people are still not using any kind of versioning software or like tests a lot. Well, most most customers really don’t have any tests. So that’s really basic but really important as well. so what’s the most important issue you see? You say tests missing, no version control. Are there other ones? Yeah, it’s like a lot of it is with issues and communication in general, how stuff works. So a lot of people are also missing project management basically. So because a lot of times the systems just grew in the history they started with one developer, right? And then they grew as a team and they didn’t really know how to handle that. So it’s it’s a lot of communication issues because they don’t know how to talk to each other, how to delegate stuff as well. So how to create even issues, why create issues? Do you a lot of times you just have to explain why is it useful to have issues, documentation, stuff like that and tests

[30:02] As well of course. And how do you see the evolutions in Java? Do they really help developers to be more productive? I definitely think so. the stream API alone I think is it’s really helpful to people if they get it but it’s kind of a long way and also records records are something that I think every developer just intuitively uses and likes because it’s such a simple concept but it really helps with speed as well right Roland Weisser presented arunit in a talk and explains how you can use it to unit test your architecture we also Alo discussed if you should understand the bite code or other internals of the Java virtual machine. It’s a Java library and you can basically query your Java application formulate rules about the architecture and run them as unit tests during the build time as long as you’re along with your other unit tests.

[31:05] So architecture do you mean different services databases or really how your application your code is structured? That’s a good question. So that’s how you would you or how would you define architecture? it’s most used them as to check the architecture or so the structure of the application. So for example layered architecture that controller should access service layer and service the persistence layer and not the other way around or if module A should depend on module B and not the other way around something like that and that happens on the bite code and that’s something which you can test with arcunit exactly and arcunit will analyze all the Java classes in your class path and tries to matches the rules that you written in Java code with the actual bite code and checks if there are violations to the rules or if everything is okay. Are you a developer within ArcUnits or you contributing to that library? Most of the time I’m a happy user of ArcUnit since I guess 7 years or so. I’m sometimes contributing stuff to ArcUnit and I’ve also written a small Java library to integrate ArcUnit and Spring

[32:23] Applications which is the ArcUnit Spring integration to make it easier to write ArcUnit rules for Spring applications. so you’re contributing to this library. You mentioned byte code. Do you really dive into the bite code? ArcUnit does it. It analyzes what’s there in the bite code to find the dependencies which method calls which class. So argument understands the dependencies of the overall application and you have to write in rules like classes should access other classes or should not access other classes and arunit does this stuff under the hood. We have some blog posts I think on Foojay about bite code itself. It’s actually a readable text set so you can really dive into it as a developer if you wish to. Do you think as a Java developer you should understand bite code or is that only if you go a next level in direction of performance tuning and stuff like that? I think that’s next level. It’s the basic step is to understand classes, methods and that they are there and that you can query them that you can check if everything is well structured and for most of the time that’s good enough to

[33:43] Know. Yeah. Yeah. There are different levels within like you could also try to understand how garbage collectors work but actually isn’t that the miracle of Java that it hides so many complexity for the developer you can just write Java code and it will most of the time just do whatever you expected it to do yeah that’s the beauty of the Java ecosystem that you can start writing applications it will work and if you want to tweak something or if you want to get some performance you have to dive into that topic a little bit more and there are still options to optimize or to find better solutions but that’s the beauty that you can start right away with a few lines of code and it will just work. Simon Martinelli is known for his work with Juke and Vadin but at JCON he gave the talk return of the full stack developer in which he explains another framework and return of serverside rendering. There is a tiny little framework called HTMX and it was a bit overhyped maybe but people adapted it and said oh we could do like site rendering again with the help of just a tiny library that adds dynamics to our

[34:55] Websites. what’s the main thing I should know about HTMX before I start diving in the documentation? HTMX is a JavaScript library that provides tags that you can add to whatever HTML element and make it dynamic. So you can for example have a diff tag and then add hx get as an attribute and then if the user clicks on that get request will be executed and it will return some fragment that hmx then will be replaced in the DOM of your HTML page. That’s more or less how it works. I have to be honest, I love it. I use it for one side project where I had some kind of a touch interface for a machine and by clicking a menu button, you simply replace the center diff with something else. That means that everything you see can be generated by any kind of language in the back end.

[35:51] Correct. Exactly. So it doesn’t really matter. So you can use a static HTML page in fact and then call like a service written in spring boot or in PHP. It absolutely doesn’t matter. So it’s completely free of any technology. So that means that you move back a lot of the rendering of how it looks like with diffs and spans back to the server. Is that an outdated technology which comes back or is this a good technology? that’s a technology that’s still around and serves a lot of use cases maybe. So to be honest I prefer component-based web frameworks like VIN or even Jakarta faces because components are very important if you’re building business application and have repeatable task to build like a UI with a grid and the form and you have a kind of higher order components that you want to reuse from project to project.

[36:44] But if you’re building quite small applications or even if you want to use for example AI to generate the UI, maybe generating a template and then have fragments to replace dynamically by HMX is probably a very good idea and it’s very simple to do that. Yeah, Luigi Manette talks a lot at conferences about Angular and React. So he is the perfect person to give us even more info about current web development techniques. Which one should I use if I start a new Java project? I would say it depends on a few things. The experience and the willing of the person to learn a new language or not. And based on that, you can already make a choice because if you have someone that’s love doing backends and love Java and just using Java, you should look at the Java solutions like Vadin, GSF, cute and so on. But if you have someone that’s okay with checking what’s on the other side with JavaScript frameworks and things like that, there is a lot of things interesting there, Angular is making a big comeback because they made a lot of change to make it more efficient. we are on par with Vue.js

[37:56] That’s one of the most efficient in term of reactivity and things like that. React is getting a bit behind on that point of view but there really needs to depends on what do I want to do what I want to achieve. There is also things like HTMX can help you. So really depends on what do I know what I my team does know and what do I want to achieve because if you’re just using a backend application for something you probably don’t need all the trick tips and tricks of a JavaScript framework for instance. I love Ven a lot because that’s pure Java. I’m a Java developer so that I can build a web interface with Java. That’s something I love. from experience in the past, I know that JavaScript libraries tend to change a lot and break a lot between versions. Is that still an issue?

[38:44] I’m lucky enough to play a lot with Angular and Angular does a great job especially since we had Angular 2 and since then they really try to avoid breakage between version or if they do it’s like we deprecate this version and we leave you for eight nine version between we delete it and you need to migrate at this point and they also try to migrate automatically for you. in that scope there it’s way better than it was but I cannot talk about any for instance if you take react react a lot of people use a lot of other dependency and then you depend on the community and the will of the community to help you migrate and support if they change something and that’s where you might encounter some pain points because you speak not only about Java but also about UIs you come at different conferences I think also C# and other things. How can you compare the Java community to the other ones?

[39:44] I would say that my favorite community from what I’ve encountered is the Java community because there it’s really open and you can talk about anything. Even if it’s not Java, we can talk about anything. And even if you come to say, okay, I seen that in C or something and I don’t know about Java. and every Java developer are like okay let let’s chat let’s learn from each other whereas sometimes with some net community they’re like yeah you you’ve come from Java and try to make a fun of you and I’m like you can if you want but I don’t see the point all tools have their purpose and I can understand that you like that but I don’t think that we gain anything by just looking at the And that’s bad. I think we learn more by looking how do you do that? How do I do that? And how can we improve from each other. The next guest is Tanya Oradovik who works for the Eclipse Foundation. She gives us an update of the status of Jakarta e and we also talked about the work the Eclipse Foundation is doing in the opensource world. Jakarta just a couple of sentences for people who are maybe not familiar with it is the continuation

[41:01] Of Java E. So the last version of Java E was Java E8 and then Oracle has contributed the whole body of work to the Eclipse Foundation and the community voted that the technology will continue with the Jakarta e name. so we have all the specifications and related implementations at the Jakarta E probably the most famous one is GlassFish and we’re now actually developing Jakarta E we’re just about to release Jakarti 11 and we’re already we have already started the work on Jakarti 12. So what has happened in last few years since it came to Eclipse Foundation? So not only that we had quite a few releases some would say probably more releases than last few years in while it was with Oracle but we managed to do quite a few innovations. So one thing that we had to deal with is to change the Javox namespace to Jakarta namespace.

[42:21] I’m sure people who are dealing with that are familiar. but we also introduced a new profile so Jakarta core profile it came about in version 10. there are couple of new specifications in Jakarta 11. there is Jakarta data. there are a lot of discussions about other new specifications that are going to come into the possibly come into version 12. but also we’re we’re introducing maybe it’s worth noting that we’re introducing independent release of profile. So it’s not that you have to wait for the whole platform in order to use it. there are implementations that are now specific to the core profile or to the web profile and then the platform. so yes the core profile 11 was released in December. The web profile was 11 was released in March. And we’re just about in next few weeks we’re expecting the release of the platform. But we’re super excited to have the 12 also underway. So go visit jakarta.ee and find out more. Okay. you also give talks not at this conference but what is the main topic you talk about at conferences?

[43:54] Yeah, I talk about open source at the Eclipse Foundation and I often use a topic of Jakarta and how opensource at the Eclipse Foundation and vendorneutral approach of the specification has flourished and how that actually enables community to participate and evolve and innovate in this technology. Mhm. Eclipse, we know it from the editor, the IDE, now also Jakarta. What other Java related things are within that foundation? Okay, that’s a huge topic. Yeah. there are tons of Java related projects at the Eclipse Foundation and we’re we’re getting submissions and proposals on a regular basis. one that I want to call out is the adoption working group and tear the distribution JVM distribution. you should all Java developers have a look into it and see the advantages of that approach. But I would say there are many other smaller projects that could be Java related but not only Java related. So there is a huge space now that Eclipse Foundation is Europeanbased open-source foundation the largest in Europe.

[45:28] Their open regulatory compliance working group ensuring the opensource regulations are not you know putting restrictions on the open source community and open source development approach. there’s software defined vehicle working group extremely interesting and popular and there are many others we call them industry collaborations way where organizations can get together and work on the technology they’re interested in and make sure there are innovations and share of the information and share of the knowledge of course imagine I’m involved in an open source project. It’s managed by a small group of people, volunteers. What could be the benefits of joining the Eclipse Foundation with a project? So there are many benefits. I’m I’m sure first of all I would like to say that there are various ways of doing an open source project. I can start my own GitHub project and then be clueless about the governance or IP or licensing or anything like that. Then there could be one vendor company

[47:00] Doing open source projects. a great example could be Red Hat, right? and then there are foundations. So foundations are there typically to make sure that IP and licensings are taken care of something developers don’t like to deal with then there is infrastructure that is provided by a foundation like Eclipse Foundation. we like to make sure that anything that is proven by code that is worthy is something that so our slogan is code first. So it needs to be proven that it’s worthy of gathering companies and individuals and making sure that it’s a business also friendly potentially businessfriendly product. there are marketing services that we provide. of course process and governance structure. So one of the things Eclipse Foundation is known for is for its Eclipse process development process. so that’s for the implementation projects but we also have the process for developing specifications. So Eclipse specification development process and then specialization of that for example in Jakarta that is a body of

[48:33] Specifications is Jakarta specifications development process so all of these things are something that Eclipse Foundation is oh I want to mention actually vendor neutrality that’s one of the big u things that Eclipse Foundation is focusing on. So making sure that if if there are multiple u vendors organizations developing a process developing a project that the project is not dominated by by one company. Jakarta is again an example of that. Usman Ahmmed works at Graphanolops and is the perfect person to learn us more about the tool to visualize any kind of data in an easy way in beautiful dashboards. But for most people including me, Grafana comes in a package with Prometheus. But is that still true? That’s a very good question actually for starters. Grafana has this has a very good reputation in the market. But if you ask someone on the street or like any tech guy the first thing come like graphana ah that means prometheus but it has changed graphfana now supports a lot of data sources we have a whole catalog of plugins where we can

[49:59] You can define data sources panels and even apps from our community as well and for example you can use gfana to visualize all your github metrics or you can use graphana to visualize is something like my SQL and this is without any uses of Prometheus. So it has changed a lot and for viewers who are might be more interested they can check graphana.com/plugins and they can see a whole catalog catalog of graphana. Okay. what tools would you highlight or systems to integrate with Java applications? Yes. so nowadays the industry is very rapidly growing and especially if someone knows about the CNCF landscape there was a very big investment on a project called open telemetry but before open telemetry we should go one step back. it was the default in standard is to use Prometheus to capture all the matrix. open telemetry now is the most contributed project of the CNCF landscape so far. But what highlight is that you can actually use both. You can go open telemetry and or you can go Prometheus because we have to know the fact that every industry or

[51:21] Every company has different set of extenders or workflows. So if someone may want to use Prometheus, yes you can use that and when we are talking just Prometheus then you need something to visualize. So normally you can use something like a open- source stack of graphana to work as a data source with Prometheus and you can visualize everything. However metrics are just not enough because it can tell you like where the CPU goes high or down. So you probably need more than just one thing. So that means you need blocks, you need also maybe tracing and somewhere you might need more advanc troubleshooting and for that you can use profiling. So this is what we called LGTMP stack. So logs, metrics, traces and profiling and this is a completely composible open source stack and you can use this with graphana. And if you’re using spring like probably a big part of the Java visitors here Spring has some open telemetry and Prometheus endpoints by default that you can very easily enable, right? Yes. actually I got a question in my talk that like using a spring and they have like

[52:33] Multiple microservices. So for example in the world of java there’s a known tool as micrometer and it is compatible with prometheus right. So you can use prometheus which is which works with spring boot services and you can visualize all these metrics in graphana. One addition is that we recently launched Grafana 12 and we added some cool features. So one of the feature or which was also highlight of my talk is that you have a lot of things like when we talk about logs, matrix, traces basically we’re talking about the three pillars of observability and also the fourth pillar is the profiling. You mean that means that you have to learn how to write promql, how to write loql for logs and maybe you can’t memorize each and everything. So what we did is that we created a app which is called drill down app and with that you can get all these metrics on the fly only you need to configure is the end point. So you don’t need to memorize each query you just need to see like okay select this result and you will get get it directly in graphana. Graphana has one cool plug-in because imagine that you

[53:46] Have your spring boot service and there is a API endpoint which is important but somehow it is not defined in your Prometheus tool. So but you have the access to get some sort of matrix using curl command but curl again we talking about like very low level on the shell. Graphana has a plug-in called infinity data source plug-in. What it does is that you can define like a API endpoint inside the infinity plug-in inside actually graphana editor and say like this is my endpoint and I just want to get the results of get request that will be visible inside graphana as a visualization table panel or something and then you can modify it and create like a fancy graph. So this is I think most advanced and cool feature is to use these sort of plugins and all these plugins graphana is that all open source and free or is there some kind of licensing model? So graphana has three licensing models. So the first one is the open source one. You can use this whole stack and even like infinity data source plug-in as open source. This is completely open source. you don’t

[54:54] Need to even pay a penny for it. Then we have the other model is the enterprise one. If you don’t want to manage your Graphfana instance by yourself, then we can do that. And definitely la last but not least is the cloud. for the cloud, you basically say that we manage it and obviously in cloud you get more advanced features which are cloud related. For example, if you are running Kubernetes applications, so there are some built-in integrated tools in the graphana cloud that helps to monitor your Kubernetes server more better. So yeah, but I would say that which I also prefer that start with the Grafana open source feel how it works and maybe if you need more then go beyond. Franis Martan brought a small 3D printed toolbox to the conference which he used for his talk about tools.

[55:46] We also talked about toxy proxy and chaos testing. My talk is called from box to brilliance testing toolbox in action. And you know I thought so you know since it’s called you know testing toolbox I thought I’d bring a real toolbox. So of course you know I was just able to travel with hand luggage. So my real toolbox didn’t fit into the luggage. So I thought I’d print a little you know toolbox here and use it to bring it with me. And I will also be giving one away at my talk. So, you know, so someone can take this home as a souvenir kind of. yeah. And so people can come with their empty toolbox just like in my case and they can fill it up with tools just, you know, they need to make sure that it doesn’t get too heavy so they can’t take it home with them of course. Right. So and which tools are important? What’s the main things you talk about during this session? So the interesting thing about this session is that I have a lot of different tools that I’m showcasing and a lot of demos, but it’s kind of interactive. So I’m asking the audience basically what they would like to see in

[56:47] Terms of what tools they deem to be important or what they think is important. You know I feel like it also depends on what tools you already know and you don’t know. But of course I think you know there are many good basics that a lot of people don’t know already like especially in the Java ecosystem. There is like a search for example that I mean is something that a lot of people know but there are still lots of people that don’t know about it that makes it a lot easier to write tests that are very maintainable and don’t have too much logic. So you know they don’t contain logic that could break or like you have the risk that you introduce other bugs you know into the test code which we also obviously don’t want but then there are other tools like for example I have an example with test containers and with proxy which is kind of like a tool to simulate what happens for example when your connection to the database breaks like I had a case at a customer actually where we were having a connection to a database and we never tested a is what happens when you know the database is down for some

[57:46] Reason and we noticed oh you know the application was actually crashing when the database was down and this you know brought me to the point where I thought like oh you know there should be a way to test this because we need to make sure that this doesn’t happen again and so for me every time I find a bug or when we have an issue I want to reproduce it first so to do it kind of like TDD style and I was looking for ways to do this and then I came up with the solution ution and I think this is a brilliant tool you know it’s also open source toxyroxy was developed by Shopify probably to test their resilience and it’s so cool what it can do you know and you would probably be surprised when you try it on your own applications to see like what kind of issues come up that you didn’t expect so I know that for instance Netflix has this kind of monkeys which shut off the services in production would you go so far in testing replacing proxy with doing that in production actually wouldn’t replace it. I think both are complimentary in my opinion. So the thing you mentioned is like chaos

[58:48] Testing where for example you turn off a service in production and then see what happens and I think you need to have both in a way. So you should have the toxy proxy for example to get instant feedback so that for example when you do a pull request and you make a change to the code that causes for example now the application to crash you don’t have to wait until a chaos test catches this because you know still the chaos test you usually do in production or like production like environments and it takes quite a long time from when your code you know is in development until you’re there and from that point on when you notice oh suddenly the database is crashing it will take you quite a long time to be able to figure out which of those changes that we have made unless you deploy like every day, right? But usually most of us don’t. it will take you quite a while until you find the exact change that caused this issue.

[59:38] And by doing this with Toxyrox, you can prevent this. But with the chaos testing, I find it especially useful to also see like how well is your staff trained for example. I mean to see if for example service goes down, do they get notified of that and how do they react in those situations? I think it’s also a good training opportunity for them in this way and I think that is another benefit which is why I wouldn’t just do one or the other. I think both is the perfect mix that you have to do is c house testing something reserved for big companies. I can imagine if you have a small team and you’re just trying to get things implemented dealing with house is not something you would like to do but is it possible as a small team to do that kind of approach?

[1:00:25] I definitely think so. So I would say every team at least as long as you have an application that you deploy to production and if you are the team that maintains it. So, especially if you’re in the DevOps team in a small client or like small you know application with a small team this could still be something that could be worth your time. I think it really depends. I mean, if your application just started out and you don’t have that many customers, it’s probably not as crucial. But at some point, you know, you get to the point where you get a lot of attention and where your application starts to become like you know, mission critical. I would say when you get to a point where you could say that you don’t want to have downtime in a way that’s the point where you should start you know let’s say the latest with chaos testing because if you’re at the point where you say like oh you know it’s fine if our application is down for two or three hours or like 10 15 minutes then probably you won’t really need to do chaos testing at that point but once you get to the point where you say like oh

[1:01:23] You know even just having a downtime more than 5 minutes you know would be bad for us. I think that would be a point where I would introduce it certainly. That’s it. Now you got all the JCON interviews. Again, it was amazing to talk with all these guests about their experience with Java and software development and I hope you learned as much as I did from all these interviews. Thanks for listening. Please subscribe to the Foojay podcast in your app or on YouTube. Keep an eye on Foojay.io for future articles and podcasts about development and everything related to the Java world. See you. Give me a foo. Give me a Jake. Give me the friends of OpenJDK.

Found a mistake, or something to add? Edit this page on GitHub

Written by

Frank Delporte

Frank Delporte is a Java Champion, Java Developer, Senior Technical Writer at Azul, Blogger, Author of "Java Programming for Raspberry Pi - A Hands-On Guide to Electronics and IoT Projects", and Open-Source Contributor for Pi4J, Lottie4J, Sheetmusic4J, …

Related posts

Join the discussion