JHUG meetup December 3rd 2018

The last meetup for 2018 (meetup.com) was sponsored by Intralot at the Impact Hub in Psyri. Apart from leasing the space, Intralot also kindly offered pizzas and beer for all the attendees.

A little more than 100 people attended the meetup, many new faces among them. For those who couldn’t attend, we recorded the meetup, so either revisit this post for the videos, or subscribe to our Vimeo channel.

The meetup kicked off with Thomas Pliakas, from the JHUG team, who welcomed the attendants on behalf of the group. As Thomas stressed, JHUG exists thanks to people who volunteer to present, so if there is something you like and use and want to share your passion about it, submit a presentation proposal to our call-for-presentations form. Also, we have an active Slack channel, check the instructions in the box on the right side of this post to get an invitation.

Afterwards, Irene Dimou took the stage and presented what our host, Intralot, works on, how it is organised, and how much it has grown over the years, now employing over 700 people in Greece and many more worldwide. With the economy crisis still going strong, it is very consoling to see that there are – mostly IT – companies that build expertise and thrive internationally.

High performance asynchronous transaction orchestration with Java Reactive frameworks

The first presentation was by Nikos Papadopoulos and Vasilis Petropoulos, both Engineers at Intralot. They started by presenting the special requirements their business brings with it: multitude of clients, large numbers of transactions with spikes in traffic, low response times, regulations for auditing and logging, penalties for mishandled transactions, runtime configurability. A practical aspect that raised some eyebrows was that their traffic may go up several times in a matter of minutes, and then go down again. Their solution needed to scale that fast, and then scale down so as to keep the bill low. They then discussed how the Reactive Manifesto and Microservices with Docker and Kubernetes are a good fit for them.

Nikos and Vasilis then presented the toolset they chose in order to accommodate their needs:

  • Netty: it’s significantly more lightweight than Tomcat, event-driven and its thread model is customizable
  • Spring Boot 2 with Spring 5: A mature framework with easy DI configuration and libraries for everything, produces a single containerizable jar file
  • Spring Webflux: Spring’s reactive web framework, which can sit on top of Netty, providing mechanisms for back-pressure, filtering, sorting batching etc.
  • Spring Actuator: Spring’s library that provides real-time information and metrics on the status of our application
  • Jersey: The popular JAX-RS implementation, which can be used to generate Swagger docs for our APIs
  • jBPM: A business process modelling framework to comceptualize, design and develop service flows

Nikos and Vasilis went on to discuss the challenges they faced implementing their solution, which both technical (i.e. making all the tools work together) and non-technical (introducing a paradigm shift to the asynchronous world for their team). Their implementation, which is in production as you are reading this, met the requirements they had set initially, achieving the elasticity and resilience their clients needs.

A final point we spent some time discussing was the way they are achieving eventual consistency in the distributed world. For each flow, they maintaining a reverse one that reverts it. When kicking off complex operations, they are keeping a log of the list of sub-operations (flows) that need to take place, and if one of them fails, they execute the reverse flows for all executed flows. Although they didn’t use the word, this sounds like the Saga pattern.

You can find the presentation here

Java puzzlers

George Kalfopoulos from Trasys (now part of NRB) prepared 10-minute Java puzzlers session. After some head-scratching and facepalms, the quickest answers won two books we gave away. This small session was so engaging we are very keen to repeating it in the near future.

JUnit 5

The second talk was by our own Thomas Pliakas on JUnit 5. Thomas took the risk and did a live-coding session, fortunately everything worked out.

Thomas started by presenting how JUnit is organised at a high level, supporting both new tests (Jupiter) and old JUnit 4 tests (Vintage).

He went on with the new annotations. Some of them are just a rename of corresponding JUnit 4 annotations. Some others though, are new, for example the @DisplayName annotation that can be used to give a human-readable name to a test method, different than the one infered from the method name. Similarly, JUnit 5 comes with its own list of Assumptions (“lesser” assertions).

An important addition is the Conditional Test Execution. Apart from the baked-in list of conditions (i.e. running only on Linux, or on Java 11, or if environment variable FOO is set to BAR), one can write their own conditions.

Another feature is Tags. By tagging tests, you can run specific subsets of your tests.

Other (seemingly less important) features exist, such as nested tests, test interfaces and default methods. We didn’t see much value in them when discussing them, but you may. Let us know if you do.

Finally, JUnit 5 comes with first class support for repeated and parameterized tests, as well as parallel test execution, which promises to make our builds faster.

For additional resources, you can check the sample JUnit 5 projects on Github, as well as Thomas’ junit repository.

new Meetup(“Sep 2018”)

It was a rainy and windy day (September 27th 2018) when JHUG started the meetups for the new season 2018/2019. We, the organizers of JHUG, were a bit anxious whether people will attend. It was the first meetup and the weather was bad. However it was an excellent start. Java apps may suffer sometimes from slow booting but Java meetups do not have such problems. We estimated that about 100 people, most of them newcomers, attended the meetup. This is very encouraging and sets a high bar we will try to cross.

The meetup was held in the premises of The Hub Events and was sponsored by Accenture. Markos Fragkakis welcomed the attendants on behalf of JHUG and wished for a good season with a lot of Java. He then passed the word to Nicolas Moschatos the HR Manager of Accenture. He welcomed the JHUG members and stated Accenture’s satisfaction and commitment to Java technology, their support for JHUG and their pursuit to collaborate with talented engineers. A team of HR stuff and engineers were active during the meetup discussing career opportunities with the attendants.

After the introductions the talks started.

An overview of IntelliJ IDEA – Zisis PontikasSlides

Zisis chose to talk about the latest version of the best and most popular IDE for JVM based platforms. He did a quick chronology of IDEA and the milestones of its development. Then we proceed to do live demos including

  • project organization
  • build tools integration
  • git integration
  • code refactoring
  • code test and coverage
  • spring boot integration
  • live templates

It was a big task for the 45 minutes but he did fine. New users were surely challenged to have a look at IDEA while old user learned some new tricks and felt justified for the time they devoted to learn the tool. You can watch the full video below.


After the talk there was the essential break for food, beer and networking in no particular order of significance. This time is was very important because the newcomers were many and a lot of acquaintances were made. Also there was a lot of ideas and suggestions for future meetups. During this break there was also a draw for 2 IDEA ultimate licenses offered by JetBrains.

Microservices architecture in action – Giannis KormarisSlides

The second talk by Yannis was about software architecture. Microservices are trending these days but still there isn’t an acceptable definition of what constitutes a microservices architecture. This talk contributed to the ongoing dialogue. Yannis presented a general overview of what is such an architecture and when applicable he become very specific with concrete examples from projects he had worked on. It was very valuable that all examples were from personal experience and that was justified in the Q&A section(more later). The topics addressed were:

  • monolith vs microservices
  • complex business domain
  • services API
  • business capabilities
  • scalability
  • error handling
  • distribution of services
  • deployment

and much more.

Technology wise he showed a bias towards RabbitMQ and OpenShift, which he called Kubernetes on steroids, and he discussed a bit about their technical merits.

This talk concluded with a good Q&A section in which proponents of monolithic apps and monolithic packaging argued about code structure, distributed transactions, performance penalties, easiness of testing etc. Surely, if the time hadn’t passed we would have stayed and talked about these the whole night. You can watch the full video below.

The hidden talk

Yannis mentioned in his talk that he attendend a JHUG meetup some years ago and was inspired by a talk by Kostis Kapelonis Package By Feature. He considered the organization proposed there a good template for organizing code for a microservice. You can find the original talk at JHUG 2010, along with a revised version of it at Oracle Java Day 2014 here


To conclude it was a very interesting meetup and a very promising start. We are looking forward to worthy followups. All talks were recorded in video and will be released soon for those who weren’t able to attent. At the meetup page, here, there is a photo gallery from the meetup.


You can learn news about JHUG, participate and exchange ideas and feedback via our channels:

News about meetups and other events are published in all these channels but the interesting discussions are on slack. If you are not there, consider joining.

See you at the next meetup. Until then keep coding.

This post was written by Spyros Anastasopoulos

JHUG meetup February 28th 2018

The first JHUG meetup for 2018 was held at the premises of Advantage FSE. Ms Peggy Theodorou-Zoumi on behalf of Advantage FSE, welcomed the members of JHUG at their premises for yet another more time as they are fond supporters of our group and they too believe that people are the most important value in our industry.

After this warm welcome the organizers Thomas and Spyros took the word to motivate members to give talks for the forthcoming events. Since both of them are experienced engineers there was a clear separation of concerns in their calls and one asked for subjects while the other for speakers.


I want you to speak about subjects you don’t know anything about but you find interesting and you are curious. Do some research, experiment a bit and come to give a talk. I am sure it will be very good.


Our community is growing and there are many new faces in each meetup. The best way to get to know each other is a lightning talk. Come up and tell us who you are, what you are working on, what you have to tell and what you want to hear. A lightning talk for 10 minutes on any topic is very easy to do and will help to evolve and grow the community even more.

There is a form to declare your interest in giving a talk and we urge you to submit a proposal. Remember that the most important thing for a talk in communities like ours it to create traction and empathy. The value of the talk is important but secondary.

And now the major part, the talks.

The first speaker was Antonis Lilis of Advantage FSE. He is a regular member of JHUG and has given us very interesting talks on mobile computing. For this meetup he chose to talk about

A short introduction to the Kotlin language for Java Developers

Kotlin is a language for the JVM developed by JetBrains. It was released as open source in 2012 and there was a major interest in it when Google announced it as a language for Android development in 2017.

The talk was targeted to programmers familiar with Java. Antonis presented in a concise, sweet and up to the point way the features of Kotlin that make it both attractive and productive. It is not an academic language or an experiment, it is designed for modern applications.

It runs on the JVM but it is not an extension or an upgrade to Java. Familiarity with Java helps a lot to reduce the learning curve but it is not a prerequisite.

Kotlin is a statically typed language that supports both object-oriented and functional paradigms. It has first class functions, type inference, some nice syntactic shortcuts like null check operators, safe casting, companion objects and many more structures that look natural in Kotlin but compared with Java they greatly reduce boilerplate code. Kotlin also supports composition instead of inheritance as the primary mechanism for extending classes and has data classes which in essence are value classes generated by the compiler. It has also a proposal for structure concurrency in coroutines which you can think of as very lightweight threads. The slides are very descriptive and you can start programming in Kotlin just be reading them.

It is supported by all major IDEs. The toolchain for it is quite stable and keeps improving as the language gains interest.

At the end Antonis answered questions about the stability and the future of the language.

In my opinion Kotlin is another language for the JVM like scala, groovy, clojure and it has to answer the same question: It certainly makes programs easier to write but are there any safeguards to preserve the readability? We have seen examples of scala and groovy where programs become completely unreadable because of feature abuse and not forget that one of the advantages of Java is that it has the same readability/writeability ratio. The advantage for Kotlin is that is has a very suitable environment for it as it is a first citizen language for Android and the characteristics of mobile apps favor such high level languages.

Kotlin is definitely a project to track and this talk by Antonis did a great job to promote it.

Pizza, Beers and Networking

This is one of the best parts of every meetup. A break during the two talks for pizza and beers kindly offered by our host Advantage FSE. There was a full round of networking to meet other JHUG members and talk about interesting debugging stories, production failures, upcoming technologies, vim vs emacs etc For this meetup the topic was Kotlin and how Java/Scala/Ruby/Awk does a better job 🙂

Istio – Service mesh

The second talk was delivered by Georgios Andrianakis of RedHat. He chose to present Istio a new and trending technology which most attendees were not acquainted with. The talk was intended for newcomers and it was also a tutorial for service meshes in general.

Georgios started describing microservices architectures and how their essence, that no matter how you design them they are a distributed system and underneath them there is an unreliable network, is the cause of most problems. He then presented and analyzed the major architectural challenges regarding distributed systems like resilience, fault tolerance, load balancing, canary deployments and discussed potential solutions. It seems there are two approaches:

The old one was to use state of the art code libraries like hystrix, zuul, zipkin and embed reliability in the application. That proved inadequate for medium to large installations as code maintenance costs became intolerable even for large organizations.

The modern approach is to develop a _platform_ in which you deploy your microservices and the platform takes care of all the architectural challenges and production issues. An important step towards that direction was Kubernetes which to oversimplify manages your cluster and provides a platform that handles discovery, invocation, elasticity and monitoring. Thaw was important but not enough. The next step is the *service mesh* which in Georgios words is

a decentralized, application networking infrastructure between your services that provides resilience, security, observability and routing control

Then he proceeded to present Istio, its architecture and a typical setup. To demonstrate the benefits he presented a setup with 2 services talking to each other and analyzed the whole request/response cycle between them and how Kubernetes and Istio combined _tame_ the network.

The slides are excellent and repay study. You can find them here.

That was an excellent talk and this what JHUG is about. A good talk on a promising technology that inspires you to explore it and who knows maybe prepare a new talk for it for a next meetup (suggestion: do it!).


After the talks there was a draw for one copy of Kotlin in Action and we updated our meetup for the beginning of April. Stay tuned for the details at meetup, twitter and slack.

JHUG event – February 2018

Το meetup του Φεβρουαρίου θα φιλοξενήσει η Advantage FSE.

Οι ομιλίες:

A short introduction to the Kotlin language for Java Developers – Antonis Lilis [1]

Do you like Java but wish you didn’t have to write so much boilerplate code? Kotlin aims to address many of the pitfalls that are common with Java development, while making your code more concise, safe, and expressive. It is also 100% interoperable with Java and can be mixed in the same project.

Introduction to Istio Service Mesh – Georgios Andrianakis [2]

The purpose of the presentation is an introduction to the Istio project. We will explore what it can offer to those who want to develop Microservices.

Ενδεικτικό πρόγραμμα

• 18.30 – Προσέλευση/ έλεγχος εισόδου

• 19.00 – 19.15 Παρουσίαση χορηγου

• 19.15 – 20.15 – Ομιλία για Kotlin

• 20.15 – 20.30 Πίτσα/μπυρα/πηγαδάκια/networking

• 20.30 – 21.30 Ομιλία για Istio

Κρατάτε μαζί σας την ταυτότητα σας για λόγους ασφαλείας στην εισοδο.

Σας περιμένουμε!

(Είσοδος ελευθερη)

[1] http://www.linkedin.com/in/alilis
[2] https://www.linkedin.com/in/georgios-andrianakis-71305815

JHUG event – November 2017

Το επόμενο meetup θα φιλοξενήσει η Eurobank στις 28 Νοεμβρίου. RSVP εδώ.

Για τη γενική τοποθεσία μπορείτε να δείτε το χάρτη. Το meetup θα γίνει στο Κτίριο Η / συνεδριακό κέντρο. Μόλις έχουμε αναλυτικές οδηγίες για το πώς μπορείτε να έρθετε, θα τις αναρτήσουμε.

Οι ομιλίες:

Using JCache to speed up your apps – Vassilis Bekiaris (Linkedin)

JCache (JSR-107) is the standardized way to temporarily cache data in your Java apps. In this talk, we will explore basic caching concepts, introduce the JCache API and go through sample caching use cases covering basic usage and integration scenarios.

Going to production with Docker, Kubernetes and Java microservices – Anestis Georgiadis (Linkedin)

An overview of the journey to production for a system being built from the bottom up as cloud-native. We will be presenting architectural choices for the Java stack, development tooling based on Docker, the value of Kubernetes and things to consider overall before embarking on a similar journey.

Ενδεικτικό πρόγραμμα

• 18.30 – Προσέλευση/ έλεγχος εισόδου

• 19.00 – 19.15 Παρουσίαση χορηγου

• 19.15 – 20.15 – Ομιλία για JCache

• 20.15 – 20.30 Πίτσα/μπυρα/πηγαδάκια/networking

• 20.30 – 21.30 Ομιλία για Docker, Kubernetes και Java Microservices

Κρατάτε μαζί σας την ταυτότητα σας για λόγους ασφαλείας στην εισοδο.

Σας περιμένουμε!

(Είσοδος ελευθερη)

JHUG event – May 2017

Η εταιρία Agile Actors θα μας φιλοξενήσει στις 12 Μαΐου για το επόμενο meetup (RSVP εδώ)

Οι ομιλίες:

• A Gentle Introduction to Cassandra Database – part 2 (Πέτρος Κακλαμάνης)

Μία απο τις πιο γνωστές NoSQL Βάσεις Δεδομένων είναι η Cassandra DB, δημοφιλής για τα εξής χαρακτηριστικά της: availabilty, scalability, και predictable performance. Σε αυτήν τη δεύτερη παρουσίαση θα εστιάσουμε στους μηχανισμούς της για Lightweight Transactions, καθώς και σε τεχνικές μοντελοποιήσης δεδομένων για αυτήν (Data Modeling, and Schema Design) με παραδείγματα σε CQL και Java. Μπορείτε να παρακολουθήσετε το πρώτο μέρος της παρουσίασης εδώ.

• Reactive Extensions for Java (Σπύρος Αναστασόπουλος)

Οι reactive επεκτάσεις για java είναι ένα ακόμα ένα σύγχρονο topic/buzzword. Σύμφωνα με το site, είναι ένα “API for asynchronous programming with observable streams”, ένας ορισμός πολύ γενικός και διφορούμενος καθώς ισχύει για όλα τα frameworks που περιέχουν έστω και εν μέρη την έννοια του data pipeline. Σε αυτή την εισαγωγή θα παρουσιαστεί η υλοποίηση του παραπάνω spec σε java (βλέπε εδώ) μαζί με τυπικές αρχιτεκτονικές και παραδείγματα χρήσης. Η ομιλία είναι εισαγωγική και δεν προυποθέτει εξοικείωση με το domain.

Συμβουλευτείτε το χάρτη.


• 18.30 – Προσέλευση/ έλεγχος εισόδου

• 18.45 – 19.45 Ομιλία για Apache Cassandra

• 19.45 – 20.00 – Ομιλία χορηγού

• 20:00 – 20:30 Πίτσα/πηγαδάκια/networking

• 20:30 – 21.30 Ομιλία για Reactive Extensions

Για λόγους ασφαλείας, παρακαλούμε κρατάτε μία ταυτότητα για την εισοδο.

Σας περιμένουμε!

(Είσοδος ελευθερη)