# Migrating from Developing Asynchronous Multi-Threading Programs to Reactive Programs in Java
## 4 Current State of Technology
### Microservices  
Microservices are a software architecture design approach that structures an application as a suite of loosely coupled services [29]. Each service operates in its own process and communicates with other services through straightforward mechanisms, typically through programmable interfaces (APIs). The main goal of microservices is to provide modular, scalable, and maintainable solutions for complex applications. The increasing adoption of microservices in modern applications is driven by the demand for scalable, flexible, and agile software development.  
Generally, companies are leveraging established technologies to implement, interconnect, and deploy services. Communication technologies and standards such as RESTful HTTP [30; 31; 32] and containerization tools like Docker [33] are valued for their commanding  
\begin{table}
\begin{tabular}{c c} \hline
**Section** & **Summary** \\ \hline
3.1. Evaluating Hibernate Reactive for Scalable & Discusses Hibernate Reactive’s scalability and resource \\ Database Solutions & efficiency in high-load scenarios, with noted limitations in \\  & handling complex transactions. \\ \hline
3.2. Assessing R2 DBC in High-Concurrency Web Applications & Highlights R2 DBC’s performance in non-blocking \\  & environments, emphasizing its efficiency for high-concurrency \\  & scenarios with a connection pool. \\ \hline
3.3. Benchmarking Virtual Threads and Reactive WebFlux for & Compares Virtual Threads and WebFlux in Spring applications, \\  & showing the benefits of Virtual Threads under \\  & specific conditions. \\ \hline
3.4. Reactive and Imperative Approaches in & Details performance advantages of reactive microservices for \\  & I/O-intensive tasks, noting limitations for \\  & CPU-heavy operations. \\ \hline
3.5. Actor-Oriented Databases for Scalable and Reactive IoT & Introduces Actor-Oriented Databases (AODBs) for IoT, \\  & emphasizing scalability and low-latency responses in \\  & dynamic environments. \\ \hline
3.6. Temporal and Type-Driven Approaches to Asynchronous & Explores approaches to asynchronous synthesis, offering \\  & efficient solutions for reactive systems using compact \\  & automaton and type-safe programming. \\ \hline \end{tabular}
\end{table}
Table 1: Summary of related work.  
interoperability and portability, which facilitate the decoupling and variation within each system. Java emerges as a preferred solution due to the large availability of developers proficient in this programming language. Additionally, systems developed for external clients tend to feature less decentralization and fewer product-specific particularities compared to solutions designed specifically for internal usage [29].  
Regarding the impact of microservices on the overall quality of programs, it is prevalently assessed as positive or neutral [29]. Furthermore, maintainability is also being regarded widely as positive, although the transition from monolithic solutions can be seen as problematic security-wise due to the rising requirement of implementing compliant mechanisms across each module, while also continuously monitoring and updating each component to address vulnerabilities when they are discovered, and last but not least, to provide secure ways of communication between the services [34; 35].