Micronaut: A new way to build microservicesLuram Archanjo
Over the years microservices architecture has been widely adopted in conjunction with Spring Boot. But recently, we are witnessing the rise of microframeworks such as Micronaut, which has innovated the way we build microservices by providing low memory consumption, fast startup, non-blocking, and other important features that I will demonstrate and conceptualize in this talk.
This document provides a step-by-step guide for creating a Java application that connects to a Java DB database. It describes designing the database using normalized tables in Excel with a one-to-many relationship, creating the database and tables in Java DB using SQL commands, inserting sample data, generating entity classes from the database tables in Netbeans, and testing the connection between the Java application and the embedded Java DB database. The guide uses a pet owner database as an example to demonstrate these steps.
The document discusses API tooling that helps developers properly define, maintain, and evolve APIs. It describes features like generating reports on illegal API usage, validating binary compatibility against a baseline, checking for incorrect bundle version numbers, and more. The tooling integrates within the Eclipse IDE and build process to provide feedback and catch issues during development and builds. Future work may include improved support for package versioning, non-bundle projects, and integration with release engineering.
Ievgen Krasilnyk Senior Software Engineer in GlobalLogic Kharkiv with 9+ years of broad experience in C++ development, including over 5 years of cross-platform applications development using the Qt framework.
During the talk, Ievgen Krasilnyk presented how to set up the environment and conversation for an MFC project, create a modal dialogue using QWinWidget, and integrate QWinWidget into the mechanism of MFC docking.
This presentation by Ievgen Krasilnyk was delivered at GlobalLogic Kharkiv C++ TechTalk #3 on March 26, 2019.
Video: https://youtu.be/PUEzsb2CGFg
[RHFSeoul2017]6 Steps to Transform Enterprise ApplicationsDaniel Oh
The document provides a 6 step approach to transforming enterprise applications:
1. Re-organizing to DevOps;
2. Implementing self-service, on-demand infrastructure;
3. Automating deployments using tools like Puppet, Chef, and Kubernetes;
4. Establishing continuous integration and deployment pipelines;
5. Adopting advanced deployment techniques like blue-green deployments;
6. Moving to a microservices architecture.
In today’s cloud native world, Docker Images are the lingua franca for platform portability. Unfortunately, there’s no clear direction for developers to turn their Spring applications into those Docker Images. The most likely tool for Docker Image creation, Dockerfile, has serious Day 2 limitations that make it a poor choice for many situations. This session will explore how to use the Cloud Native Buildpacks (CNCF) project and its integrations into the Spring ecosystem. It will cover the use of Spring Boot’s Maven and Gradle plugins, the pack CLI, the kpack Kubernetes service, and more.
The document discusses the new build system for Android using Gradle. It provides an overview of Gradle basics, plugins, and integration with Android Studio. It describes what Gradle is, why it is used, how to install it, and introduces its build script basics and Groovy language. It also covers the Gradle plugins for Java and Android projects, including tasks, dependencies, signing configs, product flavors, and build types.
The document discusses MicroProfile, an open source project that aims to bring microservices to the Enterprise Java community. It provides an overview of MicroProfile and its goals of incremental feature releases. Examples are given of Configuration and Fault Tolerance specifications in MicroProfile and how they are implemented. The presenters encourage attendees to get involved by joining discussions on the MicroProfile forum and samples repository.
MicroProfile: Optimizing Java EE for a Microservices Architecturejclingan
MicroProfile is an open source community focused on optimizing Java EE for microservices architectures. It aims to leverage existing Java EE technologies, promote organic innovation through common microservices patterns, and collaborate in open source. Key goals include quickly releasing new features, standardizing technologies, and facilitating adoption across customers, vendors and partners.
Multiplatform Apps with Spring, Kotlin, and RSocketVMware Tanzu
SpringOne 2021
Session Title: Multiplatform Apps with Spring, Kotlin, and RSocket
Speaker: Anton Arhipov, Developer Advocate at JetBrains; Oleh Dokuka, Senior Software Engineer at VMware
Plug-ins are everywhere in Eclipse so come learn about how to develop them! Depending on the audience, for the first half of the talk, I will discuss what a plug-in is and what tooling is provided around developing plug-ins. For the second half, I will discuss tips and tricks that can save you time in developing plug-ins and will also talk about some lesser known, but extremely useful, parts of PDE.
Some years ago development of Java Desktop applications was easy: We just downloaded Java 8 from Oracle and got a set of useful tools and framework to develop Java desktop applications:
AWT & Swing
WebStart
JavaFX
JFX Packager
If you now download a Java version from Oracle (or any other vendor) several of the mentioned tools and frameworks are gone. Some JDKs only contain AWT & Swing for desktop development and miss all the newer tools. But even if they include such tools or frameworks you have sometimes no idea about their state.
In this session I will give an overview about the differences between JDKs that you can use today and how frameworks like JavaFX are really supported by the vendors. Next to this we will have a look at all the tools that are important for building and installing desktop development. Since some like WebStart are gone you can find quite good alternatives.
Exploring the power of Gradle in android studio - Basics & BeyondKaushal Dhruw
In this presentation we will explore the official build system of android studio. Gradle. We will discuss about Gradle basics, Gradle Wrapper and its usage in android studio. We will explore the possibilities with gradle by covering beginner and advanced level topics.
What you can expect:
1. Just enough gradle to get started.
2. Creating simple and custom gradle tasks.
3. Gradle in android studio
4. Exploring product flavors
5. Using product flavors to our advantage.
6. facebook's stetho debug bridge and configuration via flavors.
Angular 2.0 aims to build a complete platform for web applications by improving performance, developer productivity, and versatility compared to AngularJS 1.x. Key goals include making the framework faster, simpler, and more modular. It focuses on improved change detection, lazy loading of code, and support for features like universal rendering. Major companies like Capital One, The Weather Channel, and LucidChart adopted Angular 2.0 to build applications with better performance, collaboration, and maintenance. The framework saw contributions from an active open source community and remains one of the most popular JavaScript frameworks.
Grails 4 takes the powerful and flexibility of the Grails framework to a new level, with the latest versions of core frameworks like Spring 5.1, Spring Boot 2.1, Gradle 5, and Groovy 2.5. Additionally, Micronaut is now part of the Grails foundation, allowing many powerful features from Micronaut to be used natively within your Grails apps. In this talk, we’ll look at how you can upgrade your Grails 3 project (with a little aside for Grails 2 projects as well) to Grails 4, and get a taste of the new features at your disposal in this exciting new release.
Groovy is a powerful, agile and dynamic language for the Java platform. Groovy has a Java like syntax along with many features inspired by languages such as Python, Ruby and Smalltalk. The language has been embraced by popular frameworks including Grails, Micronaut, Spring Boot and many others. This session covers a lot of ground to quickly get Java developers started with Groovy including many interactive examples to highlight the powerful language features that make Groovy compelling. This session is targeted to demonstrate the power of Groovy and help Java developers understand how to leverage that power in their enterprise applications.
Getting Groovy with JHipster and MicronautZachary Klein
JHipster is a rapid development platform that makes it easy to build modern JavaScript frontends backed by JVM microservices, including support for Micronaut. This allows you to produce microservice or monolith projects quickly, with plenty of customization options and a project structure that illustrates best practices when developing with Micronaut. As Micronaut is a JVM framework, it is compatible with Groovy, making it easy to use the Groovy language for tests (with Spock) and for general purpose application code, even within standard Java project.
Distributed Docker Pipeline Architecture with CloudBees Jenkins EnterpriseKurt Madel
This workshop will provide a hands on experience with a turnkey implementation of a scalable Jenkins as a service solution, based on CloudBees Jenkins Enterprise. The workshop will utilize the same micro-service example used in the DevOps 2.1 Toolkit workshop, walking you through the software development lifecycle using the tools and features provided by CloudBees Jenkins Enterprise. The audience will perform exercises which illustrate the distributed and scalable architecture provided by the CloudBees Jenkins Enterprise cluster.
From quickly provisioning your very own CloudBees Jenkins Enterprise Managed Master, to setting up a custom template for a built-in, ephemeral and elastic Docker based Jenkins agents, to dynamically creating Jenkins Pipeline jobs - you will have a true hands on experience with features that CloudBees Jenkins Enterprise provides based on a highly scalable Distributed Pipeline Architecture.
The document discusses native development for Android using the Native Development Kit (NDK). The NDK allows writing code in C/C++ and compiling it to create native libraries that can be called from Java code using JNI. It requires compiling libraries for each CPU architecture and may increase APK size. The NDK includes tools for setting up a project, configuring ABIs, debugging crashes using tombstone files, ndk-stack, and addr2line.
Dockerizing your java development environmentBuhake Sindi
This talk tries to eliminate the idea that developing enterprise Java applications is nightmarish to create, setup and run in a consistent server and workstation and also eliminate the idea that Java Enterprise is not really catching up to the idea of cloud computing.
CDI portable extensions are one of greatest features of Java EE allowing the platform to be extended in a clean and portable way. But allowing extension is just part of the story. CDI opens the door to a whole new eco-system for Java EE, but it’s not the role of the specification to create these extensions.
Apache DeltaSpike is the project that leads this brand new eco-system by providing useful extension modules for CDI applications as well as tools to ease the creation of new ones.
In this session, we’ll start by presenting the DeltaSpike toolbox and show how it helps you to develop for CDI. Then we’ll describe the major extensions included in DeltaSpike, including 'configuration', 'scheduling' and 'data'.
Slide deck from https://2019.javazone.no/program/3f04cac9-ffdf-44ea-9604-454aedc87ea9 . Contains references. It probably makes more sense to see the video, link will be added below
The document discusses the benefits of using Gradle over other build tools like Eclipse, Ant, and Maven. Gradle combines features from Ant like flexibility with Maven's lifecycle and ease of use. It uses Groovy for its build scripts and supports plugins, dependencies, and conventions over configuration similar to Maven. Gradle allows building multiple projects with dependencies and supports composite builds that include other complete builds. The document provides examples of using Gradle with Java, web, and multi-project builds.
Deploy and Update Jakarta EE & MicroProfile applications with Paketo.pptxJamie Coleman
More developers are using Polyglot programming models with their application architecture and why should they not use the language that makes sense for a specific task. This is where we introduce Paketo, the open-source tool that enables a developer to automatically detect what language they are using and build a runnable container image with that application and a runtime to run said application.
In this talk we will talk about what Paketo’s goals are, the benefits it can bring and a demo of how to easily get started taking a MicroProfile and Jakarta EE application and deploy it in a container using Paketo with the Open Liberty Runtime.
In today’s cloud native world, Docker Images are the lingua franca for platform portability. Unfortunately, there’s no clear direction for developers to turn their Spring applications into those Docker Images. The most likely tool for Docker Image creation, Dockerfile, has serious Day 2 limitations that make it a poor choice for many situations. This session will explore how to use the Cloud Native Buildpacks (CNCF) project and its integrations into the Spring ecosystem. It will cover the use of Spring Boot’s Maven and Gradle plugins, the pack CLI, the kpack Kubernetes service, and more.
The document discusses the new build system for Android using Gradle. It provides an overview of Gradle basics, plugins, and integration with Android Studio. It describes what Gradle is, why it is used, how to install it, and introduces its build script basics and Groovy language. It also covers the Gradle plugins for Java and Android projects, including tasks, dependencies, signing configs, product flavors, and build types.
The document discusses MicroProfile, an open source project that aims to bring microservices to the Enterprise Java community. It provides an overview of MicroProfile and its goals of incremental feature releases. Examples are given of Configuration and Fault Tolerance specifications in MicroProfile and how they are implemented. The presenters encourage attendees to get involved by joining discussions on the MicroProfile forum and samples repository.
MicroProfile: Optimizing Java EE for a Microservices Architecturejclingan
MicroProfile is an open source community focused on optimizing Java EE for microservices architectures. It aims to leverage existing Java EE technologies, promote organic innovation through common microservices patterns, and collaborate in open source. Key goals include quickly releasing new features, standardizing technologies, and facilitating adoption across customers, vendors and partners.
Multiplatform Apps with Spring, Kotlin, and RSocketVMware Tanzu
SpringOne 2021
Session Title: Multiplatform Apps with Spring, Kotlin, and RSocket
Speaker: Anton Arhipov, Developer Advocate at JetBrains; Oleh Dokuka, Senior Software Engineer at VMware
Plug-ins are everywhere in Eclipse so come learn about how to develop them! Depending on the audience, for the first half of the talk, I will discuss what a plug-in is and what tooling is provided around developing plug-ins. For the second half, I will discuss tips and tricks that can save you time in developing plug-ins and will also talk about some lesser known, but extremely useful, parts of PDE.
Some years ago development of Java Desktop applications was easy: We just downloaded Java 8 from Oracle and got a set of useful tools and framework to develop Java desktop applications:
AWT & Swing
WebStart
JavaFX
JFX Packager
If you now download a Java version from Oracle (or any other vendor) several of the mentioned tools and frameworks are gone. Some JDKs only contain AWT & Swing for desktop development and miss all the newer tools. But even if they include such tools or frameworks you have sometimes no idea about their state.
In this session I will give an overview about the differences between JDKs that you can use today and how frameworks like JavaFX are really supported by the vendors. Next to this we will have a look at all the tools that are important for building and installing desktop development. Since some like WebStart are gone you can find quite good alternatives.
Exploring the power of Gradle in android studio - Basics & BeyondKaushal Dhruw
In this presentation we will explore the official build system of android studio. Gradle. We will discuss about Gradle basics, Gradle Wrapper and its usage in android studio. We will explore the possibilities with gradle by covering beginner and advanced level topics.
What you can expect:
1. Just enough gradle to get started.
2. Creating simple and custom gradle tasks.
3. Gradle in android studio
4. Exploring product flavors
5. Using product flavors to our advantage.
6. facebook's stetho debug bridge and configuration via flavors.
Angular 2.0 aims to build a complete platform for web applications by improving performance, developer productivity, and versatility compared to AngularJS 1.x. Key goals include making the framework faster, simpler, and more modular. It focuses on improved change detection, lazy loading of code, and support for features like universal rendering. Major companies like Capital One, The Weather Channel, and LucidChart adopted Angular 2.0 to build applications with better performance, collaboration, and maintenance. The framework saw contributions from an active open source community and remains one of the most popular JavaScript frameworks.
Grails 4 takes the powerful and flexibility of the Grails framework to a new level, with the latest versions of core frameworks like Spring 5.1, Spring Boot 2.1, Gradle 5, and Groovy 2.5. Additionally, Micronaut is now part of the Grails foundation, allowing many powerful features from Micronaut to be used natively within your Grails apps. In this talk, we’ll look at how you can upgrade your Grails 3 project (with a little aside for Grails 2 projects as well) to Grails 4, and get a taste of the new features at your disposal in this exciting new release.
Groovy is a powerful, agile and dynamic language for the Java platform. Groovy has a Java like syntax along with many features inspired by languages such as Python, Ruby and Smalltalk. The language has been embraced by popular frameworks including Grails, Micronaut, Spring Boot and many others. This session covers a lot of ground to quickly get Java developers started with Groovy including many interactive examples to highlight the powerful language features that make Groovy compelling. This session is targeted to demonstrate the power of Groovy and help Java developers understand how to leverage that power in their enterprise applications.
Getting Groovy with JHipster and MicronautZachary Klein
JHipster is a rapid development platform that makes it easy to build modern JavaScript frontends backed by JVM microservices, including support for Micronaut. This allows you to produce microservice or monolith projects quickly, with plenty of customization options and a project structure that illustrates best practices when developing with Micronaut. As Micronaut is a JVM framework, it is compatible with Groovy, making it easy to use the Groovy language for tests (with Spock) and for general purpose application code, even within standard Java project.
Distributed Docker Pipeline Architecture with CloudBees Jenkins EnterpriseKurt Madel
This workshop will provide a hands on experience with a turnkey implementation of a scalable Jenkins as a service solution, based on CloudBees Jenkins Enterprise. The workshop will utilize the same micro-service example used in the DevOps 2.1 Toolkit workshop, walking you through the software development lifecycle using the tools and features provided by CloudBees Jenkins Enterprise. The audience will perform exercises which illustrate the distributed and scalable architecture provided by the CloudBees Jenkins Enterprise cluster.
From quickly provisioning your very own CloudBees Jenkins Enterprise Managed Master, to setting up a custom template for a built-in, ephemeral and elastic Docker based Jenkins agents, to dynamically creating Jenkins Pipeline jobs - you will have a true hands on experience with features that CloudBees Jenkins Enterprise provides based on a highly scalable Distributed Pipeline Architecture.
The document discusses native development for Android using the Native Development Kit (NDK). The NDK allows writing code in C/C++ and compiling it to create native libraries that can be called from Java code using JNI. It requires compiling libraries for each CPU architecture and may increase APK size. The NDK includes tools for setting up a project, configuring ABIs, debugging crashes using tombstone files, ndk-stack, and addr2line.
Dockerizing your java development environmentBuhake Sindi
This talk tries to eliminate the idea that developing enterprise Java applications is nightmarish to create, setup and run in a consistent server and workstation and also eliminate the idea that Java Enterprise is not really catching up to the idea of cloud computing.
CDI portable extensions are one of greatest features of Java EE allowing the platform to be extended in a clean and portable way. But allowing extension is just part of the story. CDI opens the door to a whole new eco-system for Java EE, but it’s not the role of the specification to create these extensions.
Apache DeltaSpike is the project that leads this brand new eco-system by providing useful extension modules for CDI applications as well as tools to ease the creation of new ones.
In this session, we’ll start by presenting the DeltaSpike toolbox and show how it helps you to develop for CDI. Then we’ll describe the major extensions included in DeltaSpike, including 'configuration', 'scheduling' and 'data'.
Slide deck from https://2019.javazone.no/program/3f04cac9-ffdf-44ea-9604-454aedc87ea9 . Contains references. It probably makes more sense to see the video, link will be added below
The document discusses the benefits of using Gradle over other build tools like Eclipse, Ant, and Maven. Gradle combines features from Ant like flexibility with Maven's lifecycle and ease of use. It uses Groovy for its build scripts and supports plugins, dependencies, and conventions over configuration similar to Maven. Gradle allows building multiple projects with dependencies and supports composite builds that include other complete builds. The document provides examples of using Gradle with Java, web, and multi-project builds.
Deploy and Update Jakarta EE & MicroProfile applications with Paketo.pptxJamie Coleman
More developers are using Polyglot programming models with their application architecture and why should they not use the language that makes sense for a specific task. This is where we introduce Paketo, the open-source tool that enables a developer to automatically detect what language they are using and build a runnable container image with that application and a runtime to run said application.
In this talk we will talk about what Paketo’s goals are, the benefits it can bring and a demo of how to easily get started taking a MicroProfile and Jakarta EE application and deploy it in a container using Paketo with the Open Liberty Runtime.
Gradle is an open-source build automation tool focused on flexibility, build reproducibility and performance. Over the years, this tool has evolved and introduced new concepts and features around dependency management, publication and other aspects on build and release of artifacts for the Java platform.
Keeping up to date with all these features across several projects can be challenging. How do you make sure that all your projects can be upgraded to the latest version of Gradle? What if you have thousands of projects and hundreds of engineers? How can you abstract common tasks for them and make sure that new releases work as expected?
At Netflix, we built Nebula, a collection of Gradle plugins that helps engineers remove boilerplate in Gradle build files, and makes building software the Netflix way easy. This reduces the cognitive load on developers, allowing them to focus on writing code.
In this talk, I’ll share with you our philosophy on how to build JVM artifacts and the pieces that help us boost the productivity of engineers at Netflix. I’ll talk about:
- What is Nebula
- What are the common problems we face and try to solve
- How we distribute it to every JVM engineer
- How we ensure that Nebula/Gradle changes do not break builds so we can ship new features with confidence at Netflix
Exploring Next Generation Buildpacks - Anand Rao & Scott DeegVMware Tanzu
Cloud native buildpacks are pluggable, modular tools that translate source code into OCI container images. They provide portability, modularity, faster builds, and reproducible images. Buildpacks detect the application, define the build environment, and output the container image. They allow writing code and running apps with minimal effort. The demo will show buildpacks decomposing builds into groups and updating the OS layer for fast updates.
Docker - A high level introduction to dockers and containersDr Ganesh Iyer
A high level introduction to Dockers and Containers. Many of the slides are not mine.I used the slides I got from Internet and prepared the rest of the slides based on my understand form various blogs and other google info.
.NET Application Modernization with PAS and Azure DevOpsVMware Tanzu
This document provides an overview of a conference on .NET application modernization with Pivotal and Azure DevOps from October 7-10, 2019 in Austin. It includes presentations from Jason Stevens of Microsoft and Shawn Neal of Pivotal on approaching modernization, the state of .NET, modernization journeys, and using pipelines and environments. There are also sections on Pivotal and Spring logos and brands.
The Path Towards Spring Boot Native ApplicationsVMware Tanzu
SpringOne 2020
The Path Towards Spring Boot Native Applications
Sébastien Deleuze, Spring Framework Committer at VMware
Andy Clement, Director at VMware
Using Docker EE to Scale Operational Intelligence at SplunkDocker, Inc.
With more than 14,000 customers in 110+ countries, Splunk is the market leader in analyzing machine data to deliver operational intelligence for security, IT and the business. Our rapid growth as a company meant that our Infrastructure Engineering Team, responsible for all the common tooling, build and test systems and frameworks utilized by the Splunk engineers, was bogged down with a sprawl of virtual machines and physical servers that were becoming incredibly difficult to manage. And as our customer’s demand for data has grown, testing at the scale of petabytes/day has become our new normal. We needed a reliable and scalable “Test Lab” for functional and performance testing.
With Docker Enterprise Edition, our engineers are able to create small test stacks on their laptop just as easily as creating multi-petabyte stacks in our Test Lab. Support for Windows, Role Based Access Control and having support for both the orchestration platform and the container engine were key in deciding to go with Docker over other solutions.
In this talk, we will cover the architecture, tooling, and frameworks we built to manage our workloads, which have grown to run on over 600 bare-metal servers, with tens of thousands of containers being created every day. We will share the lessons learned from running at scale. Lastly, we will demonstrate how we use Splunk to monitor and manage Docker Enterprise Edition.
This document discusses OpenShift v3 and how it can help organizations accelerate development at DevOps speed. It provides an overview of Kubernetes and OpenShift's technical architecture, how OpenShift enables continuous delivery and faster cycle times from idea to production. It also summarizes benefits for developers, integrations, administration capabilities, and the OpenShift product roadmap.
You've Made Kubernetes Available to Your Developers, Now What?cornelia davis
Congratulations! You’ve built out your Kubernetes infrastructure and it’s ready for prime-time. But if you want to optimize for Developer Productivity, Operational Efficiency, Security Posture, you have more to do. Do your developers know how to build secure containers? Do they know about persistent volumes and claims? Setting pod security policies? Are they willing to take on operational responsibilities (and are you ok delegating that to them?). Who’s responsible for addressing OS vulnerabilities?
Kubernetes doesn’t address these concerns, but it’s likely you are responsible for finding the answers. In this session we’ll equip you with tools and techniques to solve these problems, based on our experience deploying hundreds of thousands of containers across Fortune 500 organizations.
Run Your Java Code on Cloud Foundry - Andy Piper (Pivotal)jaxLondonConference
Presented at JAX London 2013
Public, private, and hybrid; software, platform, and infrastructure. This talk will discuss the current state of the Platform-as-a-Service space, and why the keys to success lie in enabling developer productivity, and providing openness and choice. We'll do this by considering the success of Open Source in general, look at the Cloud Foundry project, and find out why Cloud Foundry-based PaaSes are the best places to host your applications written in Java and other JVM-based languages.
This document discusses Cloud Foundry, an open platform as a service (PaaS). It begins with introductions of the author Andy Piper and his role as a Cloud Foundry developer advocate. It then discusses why an open cloud platform is important, defining Cloud Foundry and its key characteristics like being open source and deployable on various clouds. It covers Java support on Cloud Foundry including buildpacks and how various Java applications and frameworks are detected and run. It emphasizes the flexibility and portability Cloud Foundry provides for Java applications.
SpringOne Platform 2018 Recap in 5 minutesRohit Kelapure
The document provides a recap of announcements and news from Spring One Platform 2018. Key points include:
- Buildpacks were contributed to CNCF and the buildpack ecosystem was unified with a well-defined platform to buildpack contract.
- PKS 1.2 reached general availability and can now deploy to AWS alongside other new features.
- The Pivotal Function Service was introduced, building on Knative to allow running functions anywhere and triggering via HTTP/message brokers.
- Several partners received awards for their work in areas like systems integration, independent software, and managed services on the Pivotal platform.
- New developments were announced for projects like Spring Framework, PAS, Concourse, and Kubernetes integration.
Dan Vega discussed upcoming changes and improvements in Spring including Spring Boot 3, which will have support for JDK 17, Jakarta EE 9/10, ahead-of-time compilation, improved observability with Micrometer, and Project Loom's virtual threads. Spring Boot 3.1 additions were also highlighted such as Docker Compose integration and Spring Authorization Server 1.0. Spring Boot 3.2 will focus on embracing virtual threads from Project Loom to improve scalability of web applications.
Making your app soar without a container manifestLibbySchulze
This document discusses containerization and continuous integration/continuous delivery (CI/CD) tools. It introduces buildpacks as a way to containerize applications without needing a Dockerfile. Buildpacks inspect source code and create a plan to build and run the app by creating layers. Tekton is introduced as an open source project that aims to improve software delivery through standard CI/CD components based on Kubernetes. It contains reusable tasks, pipelines to assemble tasks, triggers for automating builds, and a catalog. A demo and Q&A session are included on the agenda.
The document discusses Oracle's Application Container Cloud Service, a new cloud platform for deploying containerized applications. It provides benefits like productivity for developers, enabling DevOps practices through integration with Oracle Developer Cloud Service, and automating infrastructure provisioning and application lifecycle management. Developers can build applications, package them into a ZIP file along with configuration files, and deploy them elastically on the container cloud which supports polyglot applications and automatic scaling. The platform simplifies deploying modern, cloud-native applications on containers.
Jenkins Pipeline allows automating the process of software delivery with continuous integration and deployment. It uses Jenkinsfiles to define the build pipeline through stages like build, test and deploy. Jenkinsfiles can be written declaratively using a domain-specific language or scripted using Groovy. The pipeline runs on agent nodes and is composed of stages containing steps. Maven is a build tool that manages Java projects and dependencies through a POM file. The POM defines project properties, dependencies, plugins and profiles to customize builds.
Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...Aqusag Technologies
In late April 2025, a significant portion of Europe, particularly Spain, Portugal, and parts of southern France, experienced widespread, rolling power outages that continue to affect millions of residents, businesses, and infrastructure systems.
Spark is a powerhouse for large datasets, but when it comes to smaller data workloads, its overhead can sometimes slow things down. What if you could achieve high performance and efficiency without the need for Spark?
At S&P Global Commodity Insights, having a complete view of global energy and commodities markets enables customers to make data-driven decisions with confidence and create long-term, sustainable value. 🌍
Explore delta-rs + CDC and how these open-source innovations power lightweight, high-performance data applications beyond Spark! 🚀
TrsLabs - Fintech Product & Business ConsultingTrs Labs
Hybrid Growth Mandate Model with TrsLabs
Strategic Investments, Inorganic Growth, Business Model Pivoting are critical activities that business don't do/change everyday. In cases like this, it may benefit your business to choose a temporary external consultant.
An unbiased plan driven by clearcut deliverables, market dynamics and without the influence of your internal office equations empower business leaders to make right choices.
Getting things done within a budget within a timeframe is key to Growing Business - No matter whether you are a start-up or a big company
Talk to us & Unlock the competitive advantage
Dev Dives: Automate and orchestrate your processes with UiPath MaestroUiPathCommunity
This session is designed to equip developers with the skills needed to build mission-critical, end-to-end processes that seamlessly orchestrate agents, people, and robots.
📕 Here's what you can expect:
- Modeling: Build end-to-end processes using BPMN.
- Implementing: Integrate agentic tasks, RPA, APIs, and advanced decisioning into processes.
- Operating: Control process instances with rewind, replay, pause, and stop functions.
- Monitoring: Use dashboards and embedded analytics for real-time insights into process instances.
This webinar is a must-attend for developers looking to enhance their agentic automation skills and orchestrate robust, mission-critical processes.
👨🏫 Speaker:
Andrei Vintila, Principal Product Manager @UiPath
This session streamed live on April 29, 2025, 16:00 CET.
Check out all our upcoming Dev Dives sessions at https://community.uipath.com/dev-dives-automation-developer-2025/.
Generative Artificial Intelligence (GenAI) in BusinessDr. Tathagat Varma
My talk for the Indian School of Business (ISB) Emerging Leaders Program Cohort 9. In this talk, I discussed key issues around adoption of GenAI in business - benefits, opportunities and limitations. I also discussed how my research on Theory of Cognitive Chasms helps address some of these issues
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdfAbi john
Analyze the growth of meme coins from mere online jokes to potential assets in the digital economy. Explore the community, culture, and utility as they elevate themselves to a new era in cryptocurrency.
How Can I use the AI Hype in my Business Context?Daniel Lehner
𝙄𝙨 𝘼𝙄 𝙟𝙪𝙨𝙩 𝙝𝙮𝙥𝙚? 𝙊𝙧 𝙞𝙨 𝙞𝙩 𝙩𝙝𝙚 𝙜𝙖𝙢𝙚 𝙘𝙝𝙖𝙣𝙜𝙚𝙧 𝙮𝙤𝙪𝙧 𝙗𝙪𝙨𝙞𝙣𝙚𝙨𝙨 𝙣𝙚𝙚𝙙𝙨?
Everyone’s talking about AI but is anyone really using it to create real value?
Most companies want to leverage AI. Few know 𝗵𝗼𝘄.
✅ What exactly should you ask to find real AI opportunities?
✅ Which AI techniques actually fit your business?
✅ Is your data even ready for AI?
If you’re not sure, you’re not alone. This is a condensed version of the slides I presented at a Linkedin webinar for Tecnovy on 28.04.2025.
Big Data Analytics Quick Research Guide by Arthur MorganArthur Morgan
This is a Quick Research Guide (QRG).
QRGs include the following:
- A brief, high-level overview of the QRG topic.
- A milestone timeline for the QRG topic.
- Links to various free online resource materials to provide a deeper dive into the QRG topic.
- Conclusion and a recommendation for at least two books available in the SJPL system on the QRG topic.
QRGs planned for the series:
- Artificial Intelligence QRG
- Quantum Computing QRG
- Big Data Analytics QRG
- Spacecraft Guidance, Navigation & Control QRG (coming 2026)
- UK Home Computing & The Birth of ARM QRG (coming 2027)
Any questions or comments?
- Please contact Arthur Morgan at [email protected].
100% human made.
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...TrustArc
Most consumers believe they’re making informed decisions about their personal data—adjusting privacy settings, blocking trackers, and opting out where they can. However, our new research reveals that while awareness is high, taking meaningful action is still lacking. On the corporate side, many organizations report strong policies for managing third-party data and consumer consent yet fall short when it comes to consistency, accountability and transparency.
This session will explore the research findings from TrustArc’s Privacy Pulse Survey, examining consumer attitudes toward personal data collection and practical suggestions for corporate practices around purchasing third-party data.
Attendees will learn:
- Consumer awareness around data brokers and what consumers are doing to limit data collection
- How businesses assess third-party vendors and their consent management operations
- Where business preparedness needs improvement
- What these trends mean for the future of privacy governance and public trust
This discussion is essential for privacy, risk, and compliance professionals who want to ground their strategies in current data and prepare for what’s next in the privacy landscape.
HCL Nomad Web – Best Practices and Managing Multiuser Environmentspanagenda
Webinar Recording: https://www.panagenda.com/webinars/hcl-nomad-web-best-practices-and-managing-multiuser-environments/
HCL Nomad Web is heralded as the next generation of the HCL Notes client, offering numerous advantages such as eliminating the need for packaging, distribution, and installation. Nomad Web client upgrades will be installed “automatically” in the background. This significantly reduces the administrative footprint compared to traditional HCL Notes clients. However, troubleshooting issues in Nomad Web present unique challenges compared to the Notes client.
Join Christoph and Marc as they demonstrate how to simplify the troubleshooting process in HCL Nomad Web, ensuring a smoother and more efficient user experience.
In this webinar, we will explore effective strategies for diagnosing and resolving common problems in HCL Nomad Web, including
- Accessing the console
- Locating and interpreting log files
- Accessing the data folder within the browser’s cache (using OPFS)
- Understand the difference between single- and multi-user scenarios
- Utilizing Client Clocking
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025BookNet Canada
Book industry standards are evolving rapidly. In the first part of this session, we’ll share an overview of key developments from 2024 and the early months of 2025. Then, BookNet’s resident standards expert, Tom Richardson, and CEO, Lauren Stewart, have a forward-looking conversation about what’s next.
Link to recording, transcript, and accompanying resource: https://bnctechforum.ca/sessions/standardsgoals-for-2025-standards-certification-roundup/
Presented by BookNet Canada on May 6, 2025 with support from the Department of Canadian Heritage.
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptxJustin Reock
Building 10x Organizations with Modern Productivity Metrics
10x developers may be a myth, but 10x organizations are very real, as proven by the influential study performed in the 1980s, ‘The Coding War Games.’
Right now, here in early 2025, we seem to be experiencing YAPP (Yet Another Productivity Philosophy), and that philosophy is converging on developer experience. It seems that with every new method we invent for the delivery of products, whether physical or virtual, we reinvent productivity philosophies to go alongside them.
But which of these approaches actually work? DORA? SPACE? DevEx? What should we invest in and create urgency behind today, so that we don’t find ourselves having the same discussion again in a decade?
Artificial Intelligence is providing benefits in many areas of work within the heritage sector, from image analysis, to ideas generation, and new research tools. However, it is more critical than ever for people, with analogue intelligence, to ensure the integrity and ethical use of AI. Including real people can improve the use of AI by identifying potential biases, cross-checking results, refining workflows, and providing contextual relevance to AI-driven results.
News about the impact of AI often paints a rosy picture. In practice, there are many potential pitfalls. This presentation discusses these issues and looks at the role of analogue intelligence and analogue interfaces in providing the best results to our audiences. How do we deal with factually incorrect results? How do we get content generated that better reflects the diversity of our communities? What roles are there for physical, in-person experiences in the digital world?
Semantic Cultivators : The Critical Future Role to Enable AIartmondano
By 2026, AI agents will consume 10x more enterprise data than humans, but with none of the contextual understanding that prevents catastrophic misinterpretations.
2. Safe Harbor Statement
This presentation contains statements which are intended to outline the general direction of certain of Pivotal's offerings. It is
intended for information purposes only and may not be incorporated into any contract. Any information regarding the
pre-release of Pivotal offerings, future updates or other planned modifications is subject to ongoing evaluation by Pivotal and is
subject to change. All software releases are on an “if and when available” basis and are subject to change. This information is
provided without warranty or any kind, express or implied, and is not a commitment to deliver any material, code, or functionality,
and should not be relied upon in making purchasing decisions regarding Pivotal's offerings. Any purchasing decisions should
only be based on features currently available. The development, release, and timing of any features or functionality described
for Pivotal's offerings in this presentation remain at the sole discretion of Pivotal. Pivotal has no obligation to update
forward-looking information in this presentation.
This presentation contains statements relating to Pivotal’s expectations, projections, beliefs, and prospects which are
"forward-looking statements” and by their nature are uncertain. Words such as "believe," "may," "will," "estimate," "continue,"
"anticipate," "intend," "expect," "plans," and similar expressions are intended to identify forward-looking statements. Such
forward-looking statements are not guarantees of future performance, and you are cautioned not to place undue reliance on
these forward-looking statements. Actual results could differ materially from those projected in the forward-looking statements as
a result of many factors. All information set forth in this presentation is current as of the date of this presentation. These
forward-looking statements are based on current expectations and are subject to uncertainties, risks, assumptions, and changes
in condition, significance, value and effect as well as other risks disclosed previously and from time to time by us. Additional
information we disclose could cause actual results to vary from expectations. Pivotal disclaims any obligation to, and does not
currently intend to, update any such forward-looking statements, whether written or oral, that may be made from time to time
except as required by law.
3. apiVersion: content.pivotal.io/v1
kind: Author
metadata:
name: "Neven Cvetkovic"
role: "Platform Architect"
company: "Pivotal, now part of VMware"
email: "[email protected]"
twitter: "@nevenc"
github: "https://github.com/nevenc"
spec:
status:
mode: Presenting
Introduction
{
"name": "Dieter Hubau",
"role" : "Platform Architect"
"company": "Pivotal, now part of
VMware",
"email": "[email protected]",
"twitter": " @dhubau",
"github": " https://github.com/turbots"
}
4. Assumptions
● You are a Java developer who is (somewhat) familiar with
○ Spring Boot
○ Docker
○ Kubernetes
● You have tried deploying Spring and Spring Boot apps to Kubernetes
● You want to understand best practices for building, deploying and running
Spring and Spring Boot apps on Kubernetes
5. Cover w/ Image
Agenda
■ Best practices for building
containers for Spring Boot apps
■ Best practices for configuring
Kubernetes resource limits for your
Spring Boot app (CPU and memory)
■ Spring Boot with Cloud Native
Buildpacks
■ Spring Cloud Kubernetes project is
out of scope for this webinar
6. POLL: What are you mostly familiar with
● Java
● Java, Spring and Spring Boot
● Java, Spring, Spring Boot, Docker
● Java, Spring, Spring Boot, Docker, Kubernetes
● Java, Docker, Kubernetes
12. Musl libc vs. GNU libc
● “musl is a new general-purpose
implementation of the C library. It is
lightweight, fast, simple, free, and aims to
be correct in the sense of
standards-conformance and safety.”
● Used by Alpine Linux as its C Library
● Smaller than GNU libc (glibc)
● Has functional differences to glibc [1] [2]
● glibc (GNU C library) is the defacto
standard C library
● Used by Ubuntu, Debian, CentOS, RHEL,
SUSE
● Much larger than musl C library
● Large C/C++ code bases might depend on
the behaviour of GNU libc implementation
(bugs in glibc that can’t be fixed due to
backward compatibility - become features)
13. OpenJDK does not officially support musl libc
Source: https://openjdk.java.net/jeps/8229469 [3]
14. Recommendation: Use Ubuntu (glibc) Operating System
● Ubuntu with glibc is a great choice for running Java Spring based applications
● All glibc based images are okay to run Java avoid running with musl based images
until OpenJDK officially supports musl
18. Docker Official Images* and Verified Publishers
● Docker Official Images are curated set of Docker repositories, hosted on Docker Hub,
reviewed and published by the Docker team [5]
● All images in the Official Images repository are scanned for vulnerabilities
● Docker Verified Publisher are curated set of Docker repositories from ISV that are Hub
Verified Publisher in Technology Partner Program at Docker [6]
19. OpenJDK vs AdoptOpenJDK Java distributions
● OpenJDK means few different things
○ OpenJDK project with repository with the Java source code [7]
○ OpenJDK Java distribution of binaries maintained by Oracle [8]
● AdoptOpenJDK distribution [9] are built and maintained by the community
● AdoptOpenJDK distribution provides many benefits such as:
○ Java versions will be supported for longer time (especially LTS versions)
○ Favourable licensing terms
○ Supported by many big vendors (e.g. Amazon, Azul, GoDaddy, IBM, Microsoft, Pivotal)
● See Matt Raible’s [10] great blog post [11] on the topic of Java SDK choices
● AdoptOpenJDK has also been added as a Docker repository (i.e. Docker Official Images) [12]
20. Recommendation: Use AdoptOpenJDK
● Use the official AdoptOpenJDK image repository at
https://hub.docker.com/_/adoptopenjdk [13]
● Upstream build of OpenJDK with no modifications
● Binaries available for many operating systems, CPU
architectures, and JDK versions
● Offers a hassle free API for downloading binaries
● Open Quality Assurance systems (AQuA) [14]
21. AdoptOpenJDK Image Variants
● Many official and non-official image variants of AdoptOpenJDK, see details [15]
● Slim builds [16] are stripped down JDK builds that remove functionality not typically needed while
running in a cloud, applets, fonts, debug symbols, additional charsets, Java source, etc.
● Alpine based AdoptOpenJDK images use glibc for Java [17], [18]
● https://hub.docker.com/u/adoptopenjdk [19] has variety of AdoptOpenJDK
images for non-official variants
23. POLL: What version of Java do you use in production?
● Java 7 or earlier
● Java 8 LTS
● Java 11 LTS
● Java 13
● I don’t know
24. Java Version History
● New Java version every 6 months
● Long Term Support (LTS) Java version
● Current LTS is Java SE 11
● Next LTS is Java SE 17 (Sep 2021)
Source: https://en.wikipedia.org/wiki/Java_version_history [20]
25. Recommendation: Use latest Java LTS version
● Use the latest Java 11 LTS if you can
● User Java 8u191+ or later Java 8 versions (more on this soon)
27. Item 1: Use AdoptOpenJDK 11 for Spring apps
● Official AdoptOpenJDK images at https://hub.docker.com/_/adoptopenjdk [21] based
on ubuntu
○ adoptopenjdk:11-jdk-hotspot ~423 MB for builds
○ adoptopenjdk:11-jre-hotspot ~225 MB for running applications
○ Based on ubuntu:18.04 official base image
● Leverage variants from https://hub.docker.com/r/adoptopenjdk/openjdk11 [22] if you
are concerned about image size or want an non-ubuntu based image (e.g. alpine)
28. Software & Support for OpenJDK, Spring, and Tomcat [23]
Pivotal’s Java™ Experts Support 24/7 Simple & Fair Pricing
31. AdoptOpenJDK Official Image Layers
Images layers from ubuntu:18.04 ~64.2 MB
Image layers from adoptopenjdk:11-jre-hotspot ~160.5 MB
Total image size of adoptopenjdk:11-jre-hotspot ~225 MB
32. App.jar in a Single Layer Docker build
FROM adoptopenjdk:11-jre-hotspot
ARG JAR_FILE=build/libs/*.jar
ADD ${JAR_FILE} app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
33. App.jar in a Single Layer Docker build
● The app.jar size is around ~58 MB
● The total image size is ~283 MB (160.5 MB + 64.2 MB + 58 MB)
34. App.jar in a Single Layer Docker build
● Very basic single-stage Dockerfile, builds an application image by adding app.jar to
the base adoptopenjdk:11-jre-hotspot image layer, exposes port 8080 locally
● Also it adds an ARG pointing to a generated application fat jar, so this could be
parameterized during the build process with different jarfile names
● Any application change results in fat jar application update, so the entire file layer in
the container image needs to be updated!
● Container image size and layering has an impact on performance:
○ Network latency (image push / pull)
○ Scaling elasticity (container creation)
○ Development agility (faster builds)
● Can we do better?
35. App.jar in a Single Layer Docker build
● Build the application binary
./gradlew build
● Build the container image
docker build -t nevenc/spring-music-k8s:with-dockerfile -f Dockerfile .
● Build the image with a JAR_FILE argument
docker build -t nevenc/spring-music-k8s:with-dockerfile
--build-arg JAR_FILE=build/libs/spring-music-1.0.jar -f Dockerfile .
● Run the image locally
docker run -it -p8080:8080 nevenc/spring-music-k8s:with-dockerfile
● Run the image on Kubernetes
kubectl create deployment spring-music
image=nevenc/spring-music-k8s:with-dockerfile
kubectl expose deployment spring-music --port=8080 --type=NodePort
● Examples code
https://github.com/nevenc/spring-music-k8s [24] [25]
HANDS-ON EXAMPLE
37. Multi-stage Docker Build with Layered Application Files
# Stage 1: Extract layers of the app
FROM adoptopenjdk:11-jdk-hotspot AS build
ARG JAR_FILE=build/libs/*.jar
ADD ${JAR_FILE} app.jar
RUN mkdir /app
&& cd /app
&& jar xf /app.jar
# Stage 2: Build layered container image
FROM adoptopenjdk:11-jre-hotspot
COPY --from=build /app/BOOT-INF/lib /app/lib
COPY --from=build /app/META-INF /app/META-INF
COPY --from=build /app/BOOT-INF/classes /app
VOLUME /tmp
WORKDIR /app
EXPOSE 8080
ENTRYPOINT ["java","-cp","/app:/app/lib/*","org.cloudfoundry.samples.music.Application"]
38. Multi-stage Docker Build with Layered Application Files
● Application JAR file is separated out in multiple (three different) layers
● The image size is ~283 MB (160.5 MB + 64.2 MB + 57.8 MB + 247 B + 89.7 kB)
39. Multi-stage Docker Build with Layered Application Files
● Application container image is built in two stages
○ Unpacking applications 3rd
party libraries (jars) and application code
○ Packaging layers as a new build off of adoptopenjdk:11-jre-hotspot
● 3rd
party jars and application code are in their own separate file layers
● Upon application code change, only “thin” application layer needs to be updated
○ Resulting in faster builds and faster image push/pull from the image registry
40. Multi-stage Docker Build with Layered Application Files
● Build the application binary
./gradlew build
● Build the image with
docker build -f Dockerfile.multistage -t nevenc/spring-music-k8s:with-multistage .
● Run the image locally
docker run -it -p8080:8080 nevenc/spring-music-k8s:with-multistage
● Run the image on Kubernetes
kubectl create deployment spring-music
--image=nevenc/spring-music-k8s:with-multistage
kubectl expose deployment spring-music --port=8080 --type=NodePort
● Example code
https://github.com/nevenc/spring-music-k8s [26] [27]
HANDS-ON EXAMPLE
41. Spring Boot Layertools
● Spring Boot team has been actively adding new features to support cloud-native and
container-friendly tools, see release notes [28] for Spring Boot 2.3.0 M1
● Support for building jar files with contents separated into layers has been added to
both Maven and Gradle plugins
● The layering separates the JAR’s contents based on how frequently they will change
● Building more efficient Docker images with more frequently changing layers on top
● Layertools provide built in tools for listing and extracting layers
42. Multi-stage Docker Build with Layertools
# Stage 1: Extract layers of the app
FROM adoptopenjdk:11-jdk-hotspot AS build
WORKDIR application
ARG JAR_FILE=build/libs/*.jar
ADD ${JAR_FILE} app.jar
RUN java -Djarmode=layertools -jar app.jar extract
# Stage 2: Build layered container image
FROM adoptopenjdk:11-jre-hotspot
WORKDIR application
COPY --from=build application/dependencies/ ./
COPY --from=build application/snapshot-dependencies/ ./
COPY --from=build application/resources/ ./
COPY --from=build application/application/ ./
EXPOSE 8080
ENTRYPOINT ["java","org.springframework.boot.loader.JarLauncher"]
43. Multi-stage Docker Build with Layertools
● Application container image is built in two stages, similarly as before
○ Unpacking application using layertools
○ Packaging layers as a new build off of adoptopenjdk:11-jre-hotspot
● Layers are separated out based on how frequently they typically change, e.g.
○ dependencies
○ snapshot-dependencies
○ resources
○ application
● This results in even better optimization of Docker image layering for efficiency
● More details and examples on Phil Webb’s [29] blog post [30]
● Please try these new features and provide your feedback to Spring Boot team!
44. Multi-stage Docker Build with Layertools
● Application JAR file is separated out in multiple (four different) layers
● The image size is the same ~283 MB (64.2 MB + 160.5 MB + 57.8 MB + 0 B + 45.3 kB + 276 kB)
45. ● Rebuild the application binary (with appropriate layered bootJar)
./gradlew -b build.gradle.layertools build
● List image layers
java -Djarmode=layertools -jar build/libs/spring-music-k8s-1.0.jar list
● Build the image
docker build -f Dockerfile.layertools -t nevenc/spring-music-k8s:with-layertools .
● Run the image locally
docker run -it -p8080:8080 nevenc/spring-music-k8s:with-layertools
● Run the image on Kubernetes
kubectl create deployment spring-music --image=nevenc/spring-music-k8s:with-layertools
kubectl expose deployment spring-music --port=8080 --type=NodePort
● Example code
https://github.com/nevenc/spring-music-k8s [31] [32]
Multi-stage Docker Build with Layertools
HANDS-ON EXAMPLE
46. Item 2: Use unpacked Spring Boot multi-layered images
● Use multiple layers for your Spring Boot application code, based on
frequency of updates to the layer (more frequent at the top)
○ A layer for the 3rd
party libraries you include the app, these will
likely be very similar across many builds on CI
○ Could break this layer into two (releases and snapshots)
○ Additional layers for your resources and application code
● Consider using Spring Boot layertools for easier layering of your app
47. ITEM 3
How to optimize the JVM
configuration to run in a
container?
48. One question becomes two questions!
How to get the JVM to use the
container CPU limits rather than the
host CPU limits?
How to configure the various memory
regions of the JVM to fit within the
container CPU limits?
49. Host vs. Container CPU count
● In Java versions prior to 8u191 the JVM was reading the number of
CPUs on the host rather than the container.
● A JVM running in a 2 CPU container on a Kubernetes worker node with
16 CPU would assume that it had access to 16 CPU causing the
following problems
○ ForkJoin threadpool incorrectly configured
○ Libraries using Runtime.getRuntime().availableProcessors() to
configure themselves would work with the wrong number of cores
● Recommendation: Use Java 8u191 or later to make sure the JVM
reads the correct number of cores available to it
50. Kubernetes Resource Requests and Limits
● Kubernetes resources requests are used to set a minimum
amount of CPU and RAM required to run a container
● Kubernetes resources limits are used to set a maximum amount
of CPU and RAM that a container can consume
● What should these value be set to for a Spring application?
apiVersion: v1
kind: Pod
metadata:
name: myapp
spec:
containers:
- name: myapp
image: myapp:v1.0
env:
resources:
requests:
memory: "1024Mi"
cpu: "1000m"
limits:
memory: "2048Mi"
cpu: "2000m"
51. CPU Requests vs. Limits
● CPU requests are measured in millicores, a core is
○ 1 vCPU on GCP / Azure / AWS
○ 1 hyperthread on your own hardware
● Requests are minimum guaranteed amount of CPU millicores
allocated to the container
● Limits are the maximum amount of CPU milicores that the
container is allowed to consume
● Kubernetes defines three quality of service classes
○ Guaranteed → requests == limits
○ Burstable → requests < limits
○ Best Effort → requests and limits not set
● For more details refer to Kubernetes documentation [33] [34]
apiVersion: v1
kind: Pod
metadata:
name: myapp
spec:
containers:
- name: myapp
image: myapp:v1.0
env:
resources:
requests:
memory: "1024Mi"
cpu: "1000m"
limits:
memory: "2048Mi"
cpu: "2000m"
52. Kubernetes Behaviour under CPU pressure
● Kubernetes defines three quality of service classes
○ Guaranteed → requests == limits
○ Burstable → requests < limits
○ Best Effort → requests and limits not set
● Guaranteed keeps the same CPU when the worker node CPU is
highly utilized
● Burstable CPU is taken away when the worker node CPU is
busy but the container will at least get requested CPU
● Best Effort container is killed when the worker node CPU is
busy to free up resources for workloads that have a guaranteed
and burstable quality of service
apiVersion: v1
kind: Pod
metadata:
name: myapp
spec:
containers:
- name: myapp
image: myapp:v1.0
env:
resources:
requests:
memory: "1024Mi"
cpu: "1000m"
limits:
memory: "2048Mi"
cpu: "2000m"
53. JVM and Kubernetes CPU Requests and Limits
● Runtime.getRuntime().availableProcessor() returns a number of cores
that corresponds to the resource limit not the resource requests
● On startup the JVM might require more CPU than after it’s warmed up and serving
requests
● Set CPU requests == CPU limits → we might be over provisioning CPU to get a fast
startup time but the JVM will know exactly how much CPU it has
● Set CPU request < CPU limits → can burst during startup if CPU is available but why
bound the amount of CPU at startup to the limits
● Set CPU requests & don’t set CPU limits potentially burst up to consume all available
CPU on the worker node but is guaranteed minimum requested cpu.
54. Java on Kubernetes CPU Recommendations
● Measure the CPU requirements for warmed up instance of the JVM in millicores
● Set CPU requests for warmed up JVM
● DO NOT set CPU limits for the JVM let it burst up to full worker node CPU
● Consider configuring -XX:ActiveProcessorCount to a number that matches the
CPU requests, if your app will launch thread pools based on available CPU
55. RAM Requests vs. Limits
● RAM requests and limits are measured in bytes
● Requests are minimum guaranteed amount of RAM
● Limits are the maximum amount of RAM that the container can
use. Containers requesting more than the limits will be
terminated.
● Kubernetes defines three quality of service classes
○ Guaranteed → requests == limits
○ Burstable → requests < limits
○ Best Effort → requests and limits not set
apiVersion: v1
kind: Pod
metadata:
name: myapp
spec:
containers:
- name: myapp
image: myapp:v1.0
env:
resources:
requests:
memory: "1024Mi"
cpu: "1000m"
limits:
memory: "2048Mi"
cpu: "2000m"
56. Kubernetes Behaviour under RAM pressure
● Kubernetes defines three quality of service classes
○ Guaranteed → requests == limits
○ Burstable → requests < limits
○ Best Effort → requests and limits not set
● Guaranteed keeps the same RAM when the worker node is low
on memory
● Burstable container will be restarted and constrained to it’s
resource request. (Memory can’t be taken away after it is
allocated without a process restart)
● Best Effort container is killed when the worker node RAM low to
free up resources for workloads that have a guaranteed and
burstable quality of service
apiVersion: v1
kind: Pod
metadata:
name: myapp
spec:
containers:
- name: myapp
image: myapp:v1.0
env:
resources:
requests:
memory: "1024Mi"
cpu: "1000m"
limits:
memory: "2048Mi"
cpu: "2000m"
57. JVM & Kubernetes RAM Requests & Limits
● Set the memory requests == memory limits
● JVM must be configured so that it does not consume more RAM than the limit across
all memory used by the JVM
○ Metaspace
○ Code cache
○ Heap
○ … etc
● Two choices to configure JVM memory consumption
○ -XX:MaxRAMPercentage=75.0 (Java 8u191 or later, Java 11)
○ Use the CloudFoundry memory calculator
https://github.com/cloudfoundry/java-buildpack-memory-calculator [35]
58. ITEM 3: Consider Java memory settings in containers
● Measure the CPU requirements for warmed up instance of the JVM in millicores
● Set CPU requests for warmed up JVM
● DO NOT set CPU limits for the JVM let it burst up to full worker node CPU
● Consider configuring -XX:ActiveProcessorCount to match the requests if
your app will launch very large thread pools based on available CPU
● Set the memory requests == memory limits
● Use the CloudFoundry memory calculator or -XX:MaxRAMPercentage
59. How can we automate container
building process in a modular,
repeatable, and secure way, at scale?
ITEM 4
60. ITEM 4: Consider using container building automation
● Consider different ways of building your container image of your Spring app
○ Your own multi-staged Dockerfile containing separate file layers
○ Cloud Native Buildpacks [36]
○ Other container building tools, e.g. jib [37]
● Cloud Native Buildpacks are supported in Spring Boot 2.3.x
61. Multi-stage Docker Build with Cloud Native Buildpacks
● Rebuild the application binary
./gradlew -b build.gradle.cnb build
● Build the image using cloud native buildpacks
./gradlew -b build.gradle.cnb bootBuildImage
● Run the image locally
docker run -it -p8080:8080 nevenc/spring-music-k8s:with-cnb
● Run the image on Kubernetes
kubectl create deployment spring-music --image=nevenc/spring-music-k8s:with-cnb
kubectl expose deployment spring-music --port=8080 --type=NodePort
● Example code
https://github.com/nevenc/spring-music-k8s [38] [39]
HANDS-ON EXAMPLE
62. Multi-stage Docker Build with JIB
● Rebuild the application binary
./gradlew -b build.gradle.jib build
● Build the image using jib
./gradlew -b build.gradle.jib jib
● Run the image locally
docker run -it -p8080:8080 nevenc/spring-music-k8s:with-jib
● Run the image on Kubernetes
kubectl create deployment spring-music --image=nevenc/spring-music-k8s:with-jib
kubectl expose deployment spring-music --port=8080 --type=NodePort
● Example code
https://github.com/nevenc/spring-music-k8s [40] [41]
HANDS-ON EXAMPLE
64. Cloud Native Buildpacks (CNB) Bring Developer Productivity to K8s
Pluggable, modular tools that
translate source code into OCI
images.
● Portability via the OCI [42] standard
● Greater modularity
● Faster builds
● Run in local dev environments for faster
troubleshooting
● Developed in partnership with Heroku [43]
● CNCF project [44]
66. Learn more about Cloud Native Buildpacks
● Additional resources (videos and articles)
○ Cloud Native Buildpacks on Heroku Blog [46]
○ “CNB: Industry standard build process for kubernetes and beyond” [47]
- by Emily Casey, Pivotal now part of VMware
○ “Pack to the Future: Cloud-Native Buildpacks on k8s” - [48] [49]
- by Joe Kutner, Heroku and Emily Casey, Pivotal now part of VMware
○ “Introducing kpack - a Kubernetes Cloud Native Build Service“ [50]
- by Matthew McNew, Pivotal now part of VMware
● Start exploring Cloud Native Buildpacks and provide your feedback
67. cflinuxfs3 releases
0.92.0 released - 22 hours ago
0.91.0 released - 22 hours ago
0.90.0 released - 22 hours ago
0.89.0 released - 6 days ago
0.88.0 released - 9 days ago
0.87.0 released - 9 days ago
openjdk CNB releases
v1.0.0-M7 released - Apr 10
v1.0.0-M6 released - Apr 1
v1.0.0-M5 released - Jan 31
v1.0.0-M4 released - Jan 16
v1.0.0-M3 released - Dec 10
v1.0.0-M2 released - Nov 29
source:
git:
https://github.com/myapp
revision: dev
consumes
consum
es
consum
es
example.com/myapp/mytag
Build # 1
Build # 2
Build # 3
Latest Build
CI/CD Tools
deploys
builds
Build
Service
Build Service
69. Cloud Native Buildpacks Demo
● b2b app is a modular app with three app components (all built in Spring Boot)
○ b2b-accounts, b2b-confirmation, b2b-payments
● They rely on two backing services
○ redis, rabbitmq
● The build system includes
○ Concourse for driving pipelines, Kpack build system, Github Repo, Docker registry
● We will look at two use cases
○ CASE 1: Updating a component (e.g. b2b-accounts UI change)
○ CASE 2: Updating a builder with more recent Java runtime, patching all apps images
● Example code
https://github.com/turbots/b2b [51]
HANDS-ON EXAMPLE
70. ➔ Use AdoptOpenJDK 11 for Spring apps.
Consider using a base image based on ubuntu,
because JVM supports only glibc, not musl libc.
➔ Use unpacked Spring Boot multi-layered
images. Consider layering your container image
from least to most frequently changing content.
➔ Consider Java memory settings in containers.
Configure your Kubernetes deployment with
appropriate CPU and memory request and
limits.
➔ Consider using container building tools.
Cloud Native Buildpacks provide great tooling
for creating container images at enterprise
scale.
Effective
Spring on
Kubernetes
Best Practices
71. Two additional videos not to miss!
“Spring Cloud on Kubernetes” [52]
by Ryan Baxter [53] and Alexandre Roman [54],
Platform Architects at Pivotal, now part of VMware
“Best Practices to Spring to Kubernetes
Easier and Faster” [55]
by Ray Tsang [56], Developer Advocate, Google