Modern App Dev

Announcing: Thorntail 2.2 General Availability

Announcing: Thorntail 2.2 General Availability

An Introduction to Thorntail

Today Red Hat is making Thorntail 2.2 generally available to Red Hat customers through a subscription to Red Hat OpenShift Application Runtimes (RHOAR). RHOAR provides application developers with a variety of application runtimes running on the OpenShift Container Platform.

Thorntail is the new name for WildFly Swarm, and bundles everything you need to develop and run Thorntail and MicroProfile applications by packaging server runtime libraries with your application code and running it with java -jar. It speeds up the transition from monoliths to microservices and takes advantage of your existing industry standard Java EE technology experience.

Continue reading “Announcing: Thorntail 2.2 General Availability”

Share
Deploying MicroProfile apps on Microsoft Azure using the Azure Open Service Broker

Deploying MicroProfile apps on Microsoft Azure using the Azure Open Service Broker

At the recently concluded Microsoft Ignite 2018 conference in Orlando, I had the honor of presenting to a crowd of Java developers and Azure professionals eager to learn how to put their Java skills to work building next-gen apps on Azure. Of course, that meant showcasing the technology coming out of the popular MicroProfile community, in which Red Hat plays a big part (and makes a fully supported, productized MicroProfile implementation through Thorntail, part of Red Hat OpenShift Application Runtimes).

We did a demo too, which is the main topic of this blog post, showing how easy it is to link your Java MicroProfile apps to Azure services through the Open Service Broker for Azure (the open source, Open Service Broker-compatible API server that provisions managed services in the Microsoft Azure public cloud) and OpenShift’s Service Catalog.

Here’s how to reproduce the demo.

Continue reading “Deploying MicroProfile apps on Microsoft Azure using the Azure Open Service Broker”

Share
Use Groovy to customize the Maven build process

Use Groovy to customize the Maven build process

Apache Maven is a popular build automation tool used primarily for Java projects (although it can also be used to build and manage projects written in other languages). Maven uses a pom.xml file to centrally manage a project’s build and its dependencies. If you have worked anywhere near to the Java ecosystem chances are that, for the good or for the bad, you have come across the use of this tool.

Maven plugins are used to enhance and customize the Maven build process; while the list of existing plugins is quite extensive, it is common to need to implement some small changes or tweak the build just a bit, which makes writing a whole plugin feel like overkill.

This post describes a possible solution: the GMaven Plus plugin.

Continue reading “Use Groovy to customize the Maven build process”

Share
Are App Servers Dead in the Age of Kubernetes? (Part 2)

Are App Servers Dead in the Age of Kubernetes? (Part 2)

Welcome to the second in a series of posts on Kubernetes, application servers, and the future. Part 1, Kubernetes is the new application operating environment, discussed Kubernetes and its place in application development. In this part, we explore application servers and their role in relation to Kubernetes.

You may recall from  that we were exploring the views put forth in Why Kubernetes is The New Application Server and thinking about what those views mean for Java EE, Jakarta EE, Eclipse MicroProfile, and application servers. Is it a curtain call for application servers? Are we seeing the start of an imminent decline in their favor and usage?

Before answering that, we need to discuss the use case for application servers. Then can we decide whether it’s still a valid use case.

Continue reading “Are App Servers Dead in the Age of Kubernetes? (Part 2)”

Share
Patterns for distributed transactions within a microservices architecture

Patterns for distributed transactions within a microservices architecture

Red Hat Application Development Center of Excellence Logo

Microservices architecture (MSA) has become very popular.. However, one common problem is how to manage distributed transactions across multiple microservices. This post is going to share my experience from past projects and explain the problem and possible patterns that could solve it.

What is a distributed transaction?

When a microservice architecture decomposes a monolithic system into self-encapsulated services, it can break transactions. This means a local transaction in the monolithic system is now distributed into multiple services that will be called in a sequence.

Continue reading “Patterns for distributed transactions within a microservices architecture”

Share
Source versus binary S2I workflows with Red Hat OpenShift Application Runtimes

Source versus binary S2I workflows with Red Hat OpenShift Application Runtimes

Red Hat OpenShift supports two workflows for building container images for applications: the source and the binary workflows. The binary workflow is the primary focus of the Red Hat OpenShift Application Runtimes and Red Hat Fuse product documentation and training, while the source workflow is the focus of most of the Red Hat OpenShift Container Platform product documentation and training. All of the standard OpenShift Quick Application Templates are based on the source workflow.

A developer might ask, “Can I use both workflows on the same project?” or, “Is there a reason to prefer one workflow over the other?” As a member of the team that developed Red Hat certification training for OpenShift and Red Hat Fuse, I had these questions myself and I hope that this article helps you find your own answers to these questions.

Continue reading “Source versus binary S2I workflows with Red Hat OpenShift Application Runtimes”

Share
Red Hat Application Development I: Programming Java EE (JB183) course now available

Red Hat Application Development I: Programming Java EE (JB183) course now available

The Red Hat Training team is very pleased to announce the release of our latest video classroom course, Red Hat Application Development I: Programming Java EE (JB183). JB183 is the preparatory course for the Red Hat Certified Enterprise Application Developer Exam (EX183). This video classroom course is available now as part of the Red Hat Learning Subscription or as a separate a la carte purchase.

In this course, veteran instructor Will Dinyes guides you through enterprise Java development with easy-to-follow lectures and demonstrations. JB183 is designed for students with a strong understanding of Java SE and object-oriented programming who want to learn how to begin developing modern enterprise applications on Red Hat JBoss Enterprise Application Platform (JBoss EAP) 7.0.

Continue reading “Red Hat Application Development I: Programming Java EE (JB183) course now available”

Share
The rise of non-microservices architectures

The rise of non-microservices architectures

This post is a short summary of my recent experiences with customers that are implementing architectures similar to microservices but with different characteristics in the current post-microservices world.

The microservices architectural style has been around for close to five years now, and much has been said and written about it. Today, I see teams deciding not to strictly follow certain principles of the “pure” microservices architecture and to break some of the “rules.” Teams are now more informed about the pros and cons of microservices, and they make context-driven decisions respecting team experience and organizational boundaries and accept the fact that not every company is Netflix. Below are some examples I have seen in my recent microservices gigs.

Continue reading “The rise of non-microservices architectures”

Share
Kubernetes is the new application operating environment (Part 1)

Kubernetes is the new application operating environment (Part 1)

This is the first in a series of articles that consider the role of Kubernetes and application servers. Do application servers need to exist? Where does the current situation leave developers trying to choose the right path forward for their applications?

Why Kubernetes is the new application server

By now you’ve likely read “Why Kubernetes is The New Application Server” and you might be wondering what that means for you. How does it impact Java EE or Jakarta EE and Eclipse MicroProfile? What about application servers or fat JARs? Is it the end as we’ve known it for nearly two decades?

In reality, it doesn’t impact the worldview for most. It’s in line with the efforts of a majority of vendors around Docker and Kubernetes deployments over the last few years. In addition, there’s greater interest in service mesh infrastructures, such as Istio, and how they can further assist with managing Kubernetes deployments.

Continue reading “Kubernetes is the new application operating environment (Part 1)”

Share
Asynchronous communication between microservices using AMQP and Vert.x

Asynchronous communication between microservices using AMQP and Vert.x

Microservices are the go-to architecture in most new, modern software solutions. They are (mostly) designed to do one thing, and they must talk to each other to accomplish a business use-case. All communication between the microservices is via network calls; this pattern avoids tight coupling between services and provides better separation between them.

There are basically two styles of communication: synchronous and asynchronous. These two styles applied properly are the foundation for request-reply and event-driven patterns. In the case of the request-reply pattern, a client initiates a request and typically waits synchronously for the reply. However, there are cases where the client could decide not to wait and register a callback with the other party, which is an example of the request-reply pattern in an asynchronous fashion.

In this article, I am showcasing the approach of asynchronous request-reply by having two services communicate with each other over Advanced Message Queuing Protocol (AMQP). AMQP is an open standard for passing business messages between applications or organizations. Although this article focuses on the request-reply pattern, the same code can be used to develop additional scenarios like event sourcing. Communicating using an asynchronous model can be very beneficial for implementing the aggregator pattern.

I will be using Apache QPid Proton (or Red Hat AMQ Interconnect) as the message router and the Vert.x AMQP bridge for communication between the two services.

Continue reading “Asynchronous communication between microservices using AMQP and Vert.x”

Share