The document discusses what's new in Java 9. Key changes include the introduction of a module system that allows modularization of the Java platform and custom configurations. The tools javac, jlink and java now accept options to specify module paths. The JDK itself has been modularized. Most internal APIs are now inaccessible by default. The version string format was simplified. New tools introduced include JShell for REPL functionality and jlink to assemble custom runtime images. Enhancements were made for security, deployment, language features and streams.
JDK 9: The Start of a New Future for JavaSimon Ritter
JDK 9 has been released and a number of announcements have been made about how the JDK will be developed moving forward. Learn what these changes are and what they mean to you.
Building a Brain with Raspberry Pi and Zulu Embedded JVMSimon Ritter
This session takes a cluster of low cost Raspberry Pis using Azul's Zulu JVM and some open source libraries (DL4J and NL4J) and explains some of the basics of machine learning, deep learning and reinforcement learning. This has been applied using Project Malomo from Microsoft to develop an automated system that plays Minecraft!
JDK 9: The Start of a New Future for JavaSimon Ritter
JDK 9 has been released and a number of announcements have been made about how the JDK will be developed moving forward. Learn what these changes are and what they mean to you.
Building a Brain with Raspberry Pi and Zulu Embedded JVMSimon Ritter
This session takes a cluster of low cost Raspberry Pis using Azul's Zulu JVM and some open source libraries (DL4J and NL4J) and explains some of the basics of machine learning, deep learning and reinforcement learning. This has been applied using Project Malomo from Microsoft to develop an automated system that plays Minecraft!
A presentation describing the recent changes to Java in JDK 9, 10 and 11. It also covers longer-term projects like Loom and Valhalla in the OpenJDK. JDK development and distribution is changing in a big way, which is also explained.
A three-hour deep dive session delivered at Jfokus 2018 on JDK 9. This covers modularity in some detail and then talks about other features that are new to JDK 9.
Oracle made a number of announcements before JavaOne that change the way the OpenJDK is developed and JDK binaries are delivered and supported. This webinar explains what those changes are and how they will impact your use of Java. It also explains what Azul can provide to help you migrate to newer versions of the Java platform at a speed that suits you and your customers.
Introduction to JDK-9 Modules and JLink Plugins
Modules
Module Dependencies
Jlink and Packaging
Jlink Plugins
Example Plugins
System Module Descriptor Plugin
Compress Plugin
Release-Info Plugin
Pitfalls of migrating projects to JDK 9Pavel Bucek
Java 9 brings revolutionary changes. There is a big difference between their adoption and adoption of similarly revolutionary features of Java 8: lambdas and streams could gradually be included in a project, but Jigsaw requires some significant changes to the existing code. Jersey and Tyrus are popular open source libraries of considerable size and cherish backward compatibility. This session presents lessons learned during a migration to Java 9 and adoption of Jigsaw features. The nature of the projects and their features—such as resource injection or scanning and using user-provided (thus unknown, in standard dependency view) classes—make the migration particularly interesting and informative for future Java 9 adopters.
Are you interested into getting deep insight into the new features that Project Jigsaw offers in Java 9 ?
Project Jigsaw is one of the biggest changes introduced in Java since the launch of the Java programming language back in 1995. It has a great impact on the way we architect and develop Java applications.
Project Jigsaw represents a brand new modular system that brings lots of features and empowers developers to build modular applications using Java 9.
In this presentation you will see how the entire JDK was divided into modules and how the source code was reorganized around them.
You will learn all what you need to know in order to start developing reliable, secure and maintainable modular Java applications with Project Jigsaw.
You will see how to define modules and how to compile, package and run a Java application using Jigsaw.
You’ll learn how to take advantage of the new module path and how to create modular run-time images that represent smaller and compacter JREs that consist only of the modules you need.
Having a Java 7 or 8 application and you are intending to migrate it to Java 9? In this talk you’ll learn how to do it using top-down migration and bottom-up migration.
Are you afraid that your application code will break when switching to Java 9? No problem, you’ll see what you should do in order to make your application suitable for Java 9.
Exploring Java Heap Dumps (Oracle Code One 2018)Ryan Cuprak
Memory leaks are not always simple or easy to find. Heap dumps from production systems are often gigantic (4+ gigs) with millions of objects in memory. Simple spot checking with traditional tools is woefully inadequate in these situations, especially with real data. Leaks can be entire object graphs with enormous amounts of noise. This session will show you how to build custom tools using the Apache NetBeans Profiler/Heapwalker APIs. Using these APIs, you can read and analyze Java heaps programmatically to ask really hard questions. This gives you the power to analyze complex object graphs with tens of thousands of objects in seconds.
Many people are unsure about what recent changes to the release cadence of the JDK as well as the availability of different binaries and updates means. This session seeks to explain all you need to know.
Apache Karaf - Building OSGi applications on Apache Karaf - T Frank & A Grzesikmfrancis
OSGi Community Event 2014
Abstract:
Experience level: Beginner
Apache Karaf is a small OSGi based runtime which provides a lightweight container onto which various components and applications can be deployed.
This session gives an overview over Apache Karaf, how to manage and configure Apache Karaf and how to use the comprehensive command shell that Karaf provides. By the example of a simple pet clinic application we will demonstrate how to build and deploy a web application on Apache Karaf. This talk will introduce the different deployment mechanisms available in Karaf and how to deploy bundles from the file system, command shell or via a maven repository. You will learn how to manage external dependencies via features, use the Karaf maven plugin to create features and build and configure persistence bundles for Apache Karaf. We will further give an overview, how to use Karaf in a cloud environment and how to use the Apache Cellar project to build up an Apache Karaf cluster.
Speaker Bios:
Torsten Frank
Torsten Frank is an entrepreneur and healthcare IT expert with international experience and a strong background in product and business development. He is CEO and founder of medisite, a company that delivers highly specialized healthcare IT solutions to their customers for more than 10 years. medisite is a winner of the Federal Ministry for Economic Affairs and Energy (BMWi) “Trusted Cloud” technology competition, geared toward secure cloud computing for SMEs and the public sector. Torsten Frank holds a medical degree from the Hannover Medical School, where he also has worked for several years as a physician at the Department of Cardiothoracic Surgery after completing his medical studies in Hannover, Germany and Chicago, USA.
Alexander Grzesik
Alexander is the head of development of medisite Systemhaus GmbH and responsible for the development of the the PaaS+ cloud platform the clinical information system m.life and software architect for the TRESOR Project.
He has 15 years of work experience in medical Software development as team leader and software architect.
Expert for Software Architecture, OSGi, Java and Java EE.
Alexander has been a speaker at several conferences including EclipseCon Europe and the OpenShift Community Day.
OSGi has gained popularity over the last two years. The platform has some very interesting features like versioning, dynamic updates and it's service oriented nature. These characteristics however come with a price. A firm understanding of how and why OSGi works how it works, is a necessity if you plan on getting into OSGi.
This talk will start with some basic principals on the java platform and will gradually move towards the OSGi infrastructure explaining the OSGi fundamentals. The following topics will be covered:
* Classloading in OSGi
* Lifecycle management of OSGi bundles
* OSGi Service, the service registry and service composition models
Afterwards, we will explain the generally accepted best practices and OSGi design patterns.
A presentation describing the recent changes to Java in JDK 9, 10 and 11. It also covers longer-term projects like Loom and Valhalla in the OpenJDK. JDK development and distribution is changing in a big way, which is also explained.
A three-hour deep dive session delivered at Jfokus 2018 on JDK 9. This covers modularity in some detail and then talks about other features that are new to JDK 9.
Oracle made a number of announcements before JavaOne that change the way the OpenJDK is developed and JDK binaries are delivered and supported. This webinar explains what those changes are and how they will impact your use of Java. It also explains what Azul can provide to help you migrate to newer versions of the Java platform at a speed that suits you and your customers.
Introduction to JDK-9 Modules and JLink Plugins
Modules
Module Dependencies
Jlink and Packaging
Jlink Plugins
Example Plugins
System Module Descriptor Plugin
Compress Plugin
Release-Info Plugin
Pitfalls of migrating projects to JDK 9Pavel Bucek
Java 9 brings revolutionary changes. There is a big difference between their adoption and adoption of similarly revolutionary features of Java 8: lambdas and streams could gradually be included in a project, but Jigsaw requires some significant changes to the existing code. Jersey and Tyrus are popular open source libraries of considerable size and cherish backward compatibility. This session presents lessons learned during a migration to Java 9 and adoption of Jigsaw features. The nature of the projects and their features—such as resource injection or scanning and using user-provided (thus unknown, in standard dependency view) classes—make the migration particularly interesting and informative for future Java 9 adopters.
Are you interested into getting deep insight into the new features that Project Jigsaw offers in Java 9 ?
Project Jigsaw is one of the biggest changes introduced in Java since the launch of the Java programming language back in 1995. It has a great impact on the way we architect and develop Java applications.
Project Jigsaw represents a brand new modular system that brings lots of features and empowers developers to build modular applications using Java 9.
In this presentation you will see how the entire JDK was divided into modules and how the source code was reorganized around them.
You will learn all what you need to know in order to start developing reliable, secure and maintainable modular Java applications with Project Jigsaw.
You will see how to define modules and how to compile, package and run a Java application using Jigsaw.
You’ll learn how to take advantage of the new module path and how to create modular run-time images that represent smaller and compacter JREs that consist only of the modules you need.
Having a Java 7 or 8 application and you are intending to migrate it to Java 9? In this talk you’ll learn how to do it using top-down migration and bottom-up migration.
Are you afraid that your application code will break when switching to Java 9? No problem, you’ll see what you should do in order to make your application suitable for Java 9.
Exploring Java Heap Dumps (Oracle Code One 2018)Ryan Cuprak
Memory leaks are not always simple or easy to find. Heap dumps from production systems are often gigantic (4+ gigs) with millions of objects in memory. Simple spot checking with traditional tools is woefully inadequate in these situations, especially with real data. Leaks can be entire object graphs with enormous amounts of noise. This session will show you how to build custom tools using the Apache NetBeans Profiler/Heapwalker APIs. Using these APIs, you can read and analyze Java heaps programmatically to ask really hard questions. This gives you the power to analyze complex object graphs with tens of thousands of objects in seconds.
Many people are unsure about what recent changes to the release cadence of the JDK as well as the availability of different binaries and updates means. This session seeks to explain all you need to know.
Apache Karaf - Building OSGi applications on Apache Karaf - T Frank & A Grzesikmfrancis
OSGi Community Event 2014
Abstract:
Experience level: Beginner
Apache Karaf is a small OSGi based runtime which provides a lightweight container onto which various components and applications can be deployed.
This session gives an overview over Apache Karaf, how to manage and configure Apache Karaf and how to use the comprehensive command shell that Karaf provides. By the example of a simple pet clinic application we will demonstrate how to build and deploy a web application on Apache Karaf. This talk will introduce the different deployment mechanisms available in Karaf and how to deploy bundles from the file system, command shell or via a maven repository. You will learn how to manage external dependencies via features, use the Karaf maven plugin to create features and build and configure persistence bundles for Apache Karaf. We will further give an overview, how to use Karaf in a cloud environment and how to use the Apache Cellar project to build up an Apache Karaf cluster.
Speaker Bios:
Torsten Frank
Torsten Frank is an entrepreneur and healthcare IT expert with international experience and a strong background in product and business development. He is CEO and founder of medisite, a company that delivers highly specialized healthcare IT solutions to their customers for more than 10 years. medisite is a winner of the Federal Ministry for Economic Affairs and Energy (BMWi) “Trusted Cloud” technology competition, geared toward secure cloud computing for SMEs and the public sector. Torsten Frank holds a medical degree from the Hannover Medical School, where he also has worked for several years as a physician at the Department of Cardiothoracic Surgery after completing his medical studies in Hannover, Germany and Chicago, USA.
Alexander Grzesik
Alexander is the head of development of medisite Systemhaus GmbH and responsible for the development of the the PaaS+ cloud platform the clinical information system m.life and software architect for the TRESOR Project.
He has 15 years of work experience in medical Software development as team leader and software architect.
Expert for Software Architecture, OSGi, Java and Java EE.
Alexander has been a speaker at several conferences including EclipseCon Europe and the OpenShift Community Day.
OSGi has gained popularity over the last two years. The platform has some very interesting features like versioning, dynamic updates and it's service oriented nature. These characteristics however come with a price. A firm understanding of how and why OSGi works how it works, is a necessity if you plan on getting into OSGi.
This talk will start with some basic principals on the java platform and will gradually move towards the OSGi infrastructure explaining the OSGi fundamentals. The following topics will be covered:
* Classloading in OSGi
* Lifecycle management of OSGi bundles
* OSGi Service, the service registry and service composition models
Afterwards, we will explain the generally accepted best practices and OSGi design patterns.
An introduction to Java 9 Module System.
Presented at Software Craftsmansip Turkey Community (https://www.meetup.com/Software-Craftsmanship-Turkey/) (08.Nov.2017)
Java 9: Deep Dive into Modularity and Dealing with Migration IssuesGlobalLogic Ukraine
The speaker gave an overview of Project Jigsaw, explained benefits of modularity, told about module-info.java contents, dwelt upon potential migration issues and suggested their resolution; also, he revealed to the audience how to reduce the deployment size by using jlink.
This presentation by Oleh Krupenia (Senior Software Engineer, Consultant at GlobalLogic) was delivered at GlobalLogic Kharkiv Java Conference 2018 on June 10, 2018.
Writing NodeJS applications is an easy task for JavaScript developers. However, getting what is happening under the hood in NodeJS may be intimidating, but understanding it is vital for web developers.
Indeed, when you try to learn NodeJS, most tutorials are about the NodeJS ecosystem like Express, Socket.IO, PassportJS. It is really rare to see some tutorials about the NodeJS runtime itself.
By this meetup, I want to spot the light on some advanced NodeJS topics so as to help developers answering questions an experienced NodeJS developer is expected to answer. Understanding these topics is essential to make you a much more desirable developer. I want to explore several topics including the famous event-loop along with NodeJS Module Patterns and how dependencies actually work in NodeJS.
I hope that this meetup would help you to be more comfortable understanding advanced code written in NodeJS.
Covers the common issues seen when migrating from Java 8 to Java 9. This deck shows simplified examples of the issues and code snippets of how to address them.
Introduction to Webpack 5.0 PresentationKnoldus Inc.
Webpack is a free and open-source module bundler for JavaScript. It is made primarily for JavaScript, but it can transform front-end assets such as HTML, CSS, and images if the corresponding loaders are included.[9] Webpack takes modules with dependencies and generates static assets representing those modules
Modules all the way down: OSGi and the Java Platform Module SystemTim Ellison
A talk about the Java Platform Module System defined in JSR 376, and OSGi modularity. Originally delivered at the OSGi Community Event held in conjunction with the EclipseCon Europe 2015 conference in Ludwigsburg, Germany.
Apache Maven supports all Java (JokerConf 2018)Robert Scholte
With the release train we can expect a new version of Java every 6 months. This means that tools like Maven should try to keep with this pace. Especially Java 9 came with some new features, and Maven managed to support these features. Maven found an elegant solution to work with modulepaths and classpaths without any need for developers to specify which jars belongs where.
This session will highlight the most important features developers should know to work with Java 9 and 10, combined with some practical tips and warnings.
A Hitchhiker's Guide to Cloud Native Java EEQAware GmbH
JavaLand 2018, Brühl: Talk by Mario-Leander-Reimer (@LeanderReimer, Principal Software Architect at QAware)
Abstract:
Cloud-native applications are popular these days. They promise superior reliability and almost arbitrary scalability. They follow three key principles: They are built and composed as microservices. They are packaged and distributed in containers. The containers are executed dynamically in the cloud. But all this comes at a price: Added complexity! Suddenly you need to consider cloud-native design principles such as service discovery, configuration, resilience, health checks and diagnosability.
While current Java EE versions do not (yet) have dedicated APIs to fully address these principles, they do provide APIs and extension points to retrofit these concepts easily with only a few lines of glue code into your plain Java EE microservice.
This code intense session will present how we have built a fully cloud-native Java EE based system consisting of several microservices for a large German car manufacturer in only three months. We will share our experiences as well as working code examples on how we leveraged and combined standard Java EE APIs and well known open source components to
do the heavy cloud-native lifting.
Cloud native applications are popular these days. They promise superior reliability and almost arbitrary scalability. They follow three key principles: they are built and composed as microservices. They are packaged and distributed in containers. The containers are executed dynamically in the cloud. But all this comes at a price: added complexity! Suddenly you need to consider cloud native design principles such as service discovery, configuration, resilience, health checks and diagnosability.
While current Java EE versions do not (yet) have dedicated APIs to fully address these principles, they do provide APIs and extension points to retrofit these concepts easily with only a few line of glue code into your plain Java EE microservice.
This code intense session will present how we have built a fully cloud-native Java EE based system consisting of several microservices for a large German car manufacturer in only 3 months. We will share our experiences as well as working code examples on how we leveraged and combined standard Java EE APIs and well known open source components to do the heavy cloud-native lifting. #Javaland #CloudNativeNerd #qaware
This talk is about monitoring with Prometheus. A progression is shown from monitoring concept, to Micrometer, Prometheus and Grafana.
Presented at Alithya by Richard Langlois and Gervais Naoussi, on September 19th, 2018
Continuous Test Automation, by Richard Langlois P. Eng. and Yuri Pechenko.Richard Langlois P. Eng.
We presented this talk to Alithya, Montreal on May 2018.
This talk describes how to incorporate Continuous Testing in a CI/CD pipeline using Maven, JUnit, Selenium, WebDriverManager, Cucumber and Jenkins.
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisGlobus
JASMIN is the UK’s high-performance data analysis platform for environmental science, operated by STFC on behalf of the UK Natural Environment Research Council (NERC). In addition to its role in hosting the CEDA Archive (NERC’s long-term repository for climate, atmospheric science & Earth observation data in the UK), JASMIN provides a collaborative platform to a community of around 2,000 scientists in the UK and beyond, providing nearly 400 environmental science projects with working space, compute resources and tools to facilitate their work. High-performance data transfer into and out of JASMIN has always been a key feature, with many scientists bringing model outputs from supercomputers elsewhere in the UK, to analyse against observational or other model data in the CEDA Archive. A growing number of JASMIN users are now realising the benefits of using the Globus service to provide reliable and efficient data movement and other tasks in this and other contexts. Further use cases involve long-distance (intercontinental) transfers to and from JASMIN, and collecting results from a mobile atmospheric radar system, pushing data to JASMIN via a lightweight Globus deployment. We provide details of how Globus fits into our current infrastructure, our experience of the recent migration to GCSv5.4, and of our interest in developing use of the wider ecosystem of Globus services for the benefit of our user community.
Utilocate offers a comprehensive solution for locate ticket management by automating and streamlining the entire process. By integrating with Geospatial Information Systems (GIS), it provides accurate mapping and visualization of utility locations, enhancing decision-making and reducing the risk of errors. The system's advanced data analytics tools help identify trends, predict potential issues, and optimize resource allocation, making the locate ticket management process smarter and more efficient. Additionally, automated ticket management ensures consistency and reduces human error, while real-time notifications keep all relevant personnel informed and ready to respond promptly.
The system's ability to streamline workflows and automate ticket routing significantly reduces the time taken to process each ticket, making the process faster and more efficient. Mobile access allows field technicians to update ticket information on the go, ensuring that the latest information is always available and accelerating the locate process. Overall, Utilocate not only enhances the efficiency and accuracy of locate ticket management but also improves safety by minimizing the risk of utility damage through precise and timely locates.
Zoom is a comprehensive platform designed to connect individuals and teams efficiently. With its user-friendly interface and powerful features, Zoom has become a go-to solution for virtual communication and collaboration. It offers a range of tools, including virtual meetings, team chat, VoIP phone systems, online whiteboards, and AI companions, to streamline workflows and enhance productivity.
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Crescat
Crescat is industry-trusted event management software, built by event professionals for event professionals. Founded in 2017, we have three key products tailored for the live event industry.
Crescat Event for concert promoters and event agencies. Crescat Venue for music venues, conference centers, wedding venues, concert halls and more. And Crescat Festival for festivals, conferences and complex events.
With a wide range of popular features such as event scheduling, shift management, volunteer and crew coordination, artist booking and much more, Crescat is designed for customisation and ease-of-use.
Over 125,000 events have been planned in Crescat and with hundreds of customers of all shapes and sizes, from boutique event agencies through to international concert promoters, Crescat is rigged for success. What's more, we highly value feedback from our users and we are constantly improving our software with updates, new features and improvements.
If you plan events, run a venue or produce festivals and you're looking for ways to make your life easier, then we have a solution for you. Try our software for free or schedule a no-obligation demo with one of our product specialists today at crescat.io
OpenMetadata Community Meeting - 5th June 2024OpenMetadata
The OpenMetadata Community Meeting was held on June 5th, 2024. In this meeting, we discussed about the data quality capabilities that are integrated with the Incident Manager, providing a complete solution to handle your data observability needs. Watch the end-to-end demo of the data quality features.
* How to run your own data quality framework
* What is the performance impact of running data quality frameworks
* How to run the test cases in your own ETL pipelines
* How the Incident Manager is integrated
* Get notified with alerts when test cases fail
Watch the meeting recording here - https://www.youtube.com/watch?v=UbNOje0kf6E
GraphSummit Paris - The art of the possible with Graph TechnologyNeo4j
Sudhir Hasbe, Chief Product Officer, Neo4j
Join us as we explore breakthrough innovations enabled by interconnected data and AI. Discover firsthand how organizations use relationships in data to uncover contextual insights and solve our most pressing challenges – from optimizing supply chains, detecting fraud, and improving customer experiences to accelerating drug discoveries.
Mobile App Development Company In Noida | Drona InfotechDrona Infotech
Looking for a reliable mobile app development company in Noida? Look no further than Drona Infotech. We specialize in creating customized apps for your business needs.
Visit Us For : https://www.dronainfotech.com/mobile-application-development/
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteGoogle
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
👉👉 Click Here To Get More Info 👇👇
https://sumonreview.com/ai-pilot-review/
AI Pilot Review: Key Features
✅Deploy AI expert bots in Any Niche With Just A Click
✅With one keyword, generate complete funnels, websites, landing pages, and more.
✅More than 85 AI features are included in the AI pilot.
✅No setup or configuration; use your voice (like Siri) to do whatever you want.
✅You Can Use AI Pilot To Create your version of AI Pilot And Charge People For It…
✅ZERO Manual Work With AI Pilot. Never write, Design, Or Code Again.
✅ZERO Limits On Features Or Usages
✅Use Our AI-powered Traffic To Get Hundreds Of Customers
✅No Complicated Setup: Get Up And Running In 2 Minutes
✅99.99% Up-Time Guaranteed
✅30 Days Money-Back Guarantee
✅ZERO Upfront Cost
See My Other Reviews Article:
(1) TubeTrivia AI Review: https://sumonreview.com/tubetrivia-ai-review
(2) SocioWave Review: https://sumonreview.com/sociowave-review
(3) AI Partner & Profit Review: https://sumonreview.com/ai-partner-profit-review
(4) AI Ebook Suite Review: https://sumonreview.com/ai-ebook-suite-review
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Łukasz Chruściel
No one wants their application to drag like a car stuck in the slow lane! Yet it’s all too common to encounter bumpy, pothole-filled solutions that slow the speed of any application. Symfony apps are not an exception.
In this talk, I will take you for a spin around the performance racetrack. We’ll explore common pitfalls - those hidden potholes on your application that can cause unexpected slowdowns. Learn how to spot these performance bumps early, and more importantly, how to navigate around them to keep your application running at top speed.
We will focus in particular on tuning your engine at the application level, making the right adjustments to ensure that your system responds like a well-oiled, high-performance race car.
Essentials of Automations: The Art of Triggers and Actions in FMESafe Software
In this second installment of our Essentials of Automations webinar series, we’ll explore the landscape of triggers and actions, guiding you through the nuances of authoring and adapting workspaces for seamless automations. Gain an understanding of the full spectrum of triggers and actions available in FME, empowering you to enhance your workspaces for efficient automation.
We’ll kick things off by showcasing the most commonly used event-based triggers, introducing you to various automation workflows like manual triggers, schedules, directory watchers, and more. Plus, see how these elements play out in real scenarios.
Whether you’re tweaking your current setup or building from the ground up, this session will arm you with the tools and insights needed to transform your FME usage into a powerhouse of productivity. Join us to discover effective strategies that simplify complex processes, enhancing your productivity and transforming your data management practices with FME. Let’s turn complexity into clarity and make your workspaces work wonders!
Quarkus Hidden and Forbidden ExtensionsMax Andersen
Quarkus has a vast extension ecosystem and is known for its subsonic and subatomic feature set. Some of these features are not as well known, and some extensions are less talked about, but that does not make them less interesting - quite the opposite.
Come join this talk to see some tips and tricks for using Quarkus and some of the lesser known features, extensions and development techniques.
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeAftab Hussain
Understanding variable roles in code has been found to be helpful by students
in learning programming -- could variable roles help deep neural models in
performing coding tasks? We do an exploratory study.
- These are slides of the talk given at InteNSE'23: The 1st International Workshop on Interpretability and Robustness in Neural Software Engineering, co-located with the 45th International Conference on Software Engineering, ICSE 2023, Melbourne Australia
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Globus
The Earth System Grid Federation (ESGF) is a global network of data servers that archives and distributes the planet’s largest collection of Earth system model output for thousands of climate and environmental scientists worldwide. Many of these petabyte-scale data archives are located in proximity to large high-performance computing (HPC) or cloud computing resources, but the primary workflow for data users consists of transferring data, and applying computations on a different system. As a part of the ESGF 2.0 US project (funded by the United States Department of Energy Office of Science), we developed pre-defined data workflows, which can be run on-demand, capable of applying many data reduction and data analysis to the large ESGF data archives, transferring only the resultant analysis (ex. visualizations, smaller data files). In this talk, we will showcase a few of these workflows, highlighting how Globus Flows can be used for petabyte-scale climate analysis.
Unleash Unlimited Potential with One-Time Purchase
BoxLang is more than just a language; it's a community. By choosing a Visionary License, you're not just investing in your success, you're actively contributing to the ongoing development and support of BoxLang.
Code reviews are vital for ensuring good code quality. They serve as one of our last lines of defense against bugs and subpar code reaching production.
Yet, they often turn into annoying tasks riddled with frustration, hostility, unclear feedback and lack of standards. How can we improve this crucial process?
In this session we will cover:
- The Art of Effective Code Reviews
- Streamlining the Review Process
- Elevating Reviews with Automated Tools
By the end of this presentation, you'll have the knowledge on how to organize and improve your code review proces
1. What’s New in Java 9
Richard Langlois P. Eng.
Solutions Architect
May 3rd, 2017
2. Key Changes in JDK 9
What’s New for Tools JDK 9
What’s New for Security in JDK 9
What’s New for Deployment in JDK 9
What’s New for the Java Language in JDK 9
What’s New for Javadoc in JDK 9
What’s New for the VM in JDK 9
What’s New in Core Libraries in JDK 9
What’s New for Internationalization in JDK 9
Q & A
Agenda
2
5. Changes includes:
Tools javac, jlink and java accept options to specify module paths (-mp)
Module:
Unit of software that declares the answers to three questions about itself in a file
named module‐info.java:
What is its name?
What does it export?
What does it require?
JEP 261: Module System (1 of 2)
5
6. Where
Module Name should be following something similar to the package convention
e.g. com.alithya.mymodule, to avoid conflicts.
By convention, modules are placed in a folder that shares the same name as the
module
Exports section lists all the packages of this particular module that are considered
public API and thus usable by other modules.
Note: If a class is not in an exported package, no one outside of your module can
access it – even if it is public
Requires section lists all modules that this module depends on – all public types that
those modules export are accessible by the module in question.
Note: The Jigsaw team is trying to establish the phrase “reading another module”.
JEP 261: Module System (2 of 2)
6
7. Module de.codecentric.addresschecker uses module de.codecentric.zipvalidator to
validate zip code.
zipvalidator is specified by the following module‐info.java:
module de.codecentric.zipvalidator{
exports de.codecentric.zipvalidator.api;
}
Exports the de.codecentric.zipvalidator.api package and does not read any other
module (except for java.base).
Addresschecker is specified by the following module‐info.java:
module de.codecentric.addresschecker{
exports de.codecentric.addresschecker.api;
requires de.codecentric.zipvalidator;
}
Reads de.codecentric.zipvalidator module
JEP 261: Module System – Example (1 of 12)
7
9. Example with a well-behaved code:
public class AddressCheckerImpl implements AddressChecker {
@Override
public boolean checkZipCode(String zipCode) {
return ZipCodeValidatorFactory.getInstance().zipCodeIsValid(zipCode);
}
}
Compile zipvalidator module:
javac ‐d de.codecentric.zipvalidator $(find de.codecentric.zipvalidator ‐name "*.java")
No need to use modules (-mp) since zipvalidator does not depend on any custom module.
Compile addresschecker module:
javac ‐modulepath . ‐d de.codecentric.addresschecker $(find de.codecentric.addresschecker ‐name "*.java")
Modulepath tells javac where to find the compiled modules (in this case, this is .)
Compiling multiple modules at once using ‐modulesourcepath:
javac ‐d . ‐modulesourcepath . $(find . ‐name "*.java")
JEP 261: Module System – Example (3 of 12)
9
10. Run the example:
java ‐mp . ‐m de.codecentric.addresschecker/de.codecentric.addresschecker.api.Run 76185
Output:
76185 is a valid zip code
Note:
Specify a modulepath so that the JVM knows where to find the compiled modules
Specify a main class (Run) and a parameter (76185)
JEP 261: Module System – Example (4 of 12)
10
11. Modular Jar
very similar to a regular jar, but it also contains a compiled module‐info.class.
Example:
Build a jar for the zipvalidator:
jar ‐‐create ‐‐file bin/zipvalidator.jar ‐‐module‐version=1.0 ‐C de.codecentric.zipvalidator .
Note:
specify an output file
a version
module to package.
Build a jar for the addresschecker:
jar ‐‐create ‐‐file=bin/addresschecker.jar ‐‐module‐version=1.0 ‐‐main‐class=de.codecentric.addresschecker.api.Run
‐C de.codecentric.addresschecker .
Running:
java ‐mp bin ‐m de.codecentric.addresschecker 76185
Note: No need to specify a main class as the Manifest of addresschecker.jar already contains this information.
JEP 261: Module System – Example (5 of 12)
11
12. Running:
java ‐mp bin ‐m de.codecentric.addresschecker 76185
Note:
Specify the modulepath which in this example is the bin folder which we wrote our jars to
No need to specify a main class as the Manifest of addresschecker.jar already contains this information.
JEP 261: Module System – Example (6 of 12)
12
13. Jigsaw does not only include compile-time checks, but also runtime checks
Example: Directly using non-exported types:
public class AddressCheckerImpl implements AddressChecker {
@Override
public boolean checkZipCode(String zipCode) {
return new de.codecentric.zipvalidator.internal.ZipCodeValidatorImpl().zipCodeIsValid(zipCode);
}
}
When compiled:
error: ZipCodeValidatorImpl is not visible because
package de.codecentric.zipvalidator.internal is not visible
Note: fails at compile time.
Using reflection will compile but throw IllegalAccessException at runtime:
java.lang.IllegalAccessException: class de.codecentric.addresschecker.internal.AddressCheckerImpl
(in module de.codecentric.addresschecker) cannot access class [..].internal.ZipCodeValidatorImpl
(in module de.codecentric.zipvalidator) because module de.codecentric.zipvalidator does not export package de.codecentric.zipvalidator.internal
to module de.codecentric.addresschecker
JEP 261: Module System – Example (7 of 12)
13
14. Circular dependencies
In the next case, we have suddenly realized that the addresschecker module contains a class in its API that the
zipvalidator would very much like to use. Since we’re lazy, instead of refactoring the class to another module, we
declare a dependency to the addresschecker:
module de.codecentric.zipvalidator{
requires de.codecentric.addresschecker;
exports de.codecentric.zipvalidator.api;
}
When compiling:
./de.codecentric.zipvalidator/module‐info.java:2:
error: cyclic dependence involving de.codecentric.addresschecker
JEP 261: Module System – Example (8 of 12)
14
15. Implied readability
Adding the keyword public to the requires definition, we tell all client modules that they also need to read another
module.
e.g.
requires public de.codecentric.zipvalidator.model;
Lets zipvalidator use another module: de.codecentric.zipvalidator.model.
module de.codecentric.zipvalidator{
exports de.codecentric.zipvalidator.api;
requires de.codecentric.zipvalidator.model;
}
JEP 261: Module System – Example (9 of 12)
15
16. New file structure:
three‐modules‐ok/
├── de.codecentric.addresschecker
│ │ │ ├── …
├── de.codecentric.zipvalidator
│ │ │ └── …
├── de.codecentric.zipvalidator.model
│ ├── de
│ │ └── codecentric
│ │ └── zipvalidator
│ │ └── model
│ │ └── api
│ │ └── ZipCodeValidationResult.java
│ └── module‐info.java
JEP 261: Module System – Example (10 of 12)
16
17. New file structure:
@Override
public <strong>ZipCodeValidationResult</strong> zipCodeIsValid(String zipCode) {
if (zipCode == null) {
return ZipCodeValidationResult.ZIP_CODE_NULL;
[snip]
} else {
return ZipCodeValidationResult.OK;
}
}
The addresschecker module has been adapted to work with this enum as return type as well,
When compiling:
./de.codecentric.addresschecker/de/[..]/internal/AddressCheckerImpl.java:5:
error: ZipCodeValidationResult is not visible because package
de.codecentric.zipvalidator.model.api is not visible
JEP 261: Module System – Example (11 of 12)
17
18. Note:
the zipvalidator uses exported types from the zipvalidator model in its public API.
Since the addresschecker does not read this module, it cannot access this type.
Solution:
module de.codecentric.zipvalidator{
exports de.codecentric.zipvalidator.api;
requires public de.codecentric.zipvalidator.model;
}
Note:
The public keyword tells all modules that read the zipvalidator that they also need to read the zipvalidator model.
JEP 261: Module System – Example (12 of 12)
18
19. Modularizes the Java Platform Module System (JPMS)
The modules can be combined:
Configurations corresponding to the JRE and JDK
Configuration equivalent in content to each of the Compact Profiles defined in JDK 8
e.g. compact1, compact2
Custom configurations that contain only a specified set of modules and their required
modules.
JEP 200: The Modular JDK (1 of 3)
19
20. JEP 200: The Modular JDK (2 of 3)
20
JDK 9 vs JDK 8
21. You can now specify which modules of the Java Runtime you want to use
At the bottom of the graph resides java.base.
Every module you create reads java.base
java.base exports packages such as java.lang, java.util, java.math, etc.
JEP 200: The Modular JDK (3 of 3)
21
22. Restructures the JDK and JRE runtime images to accommodate modules.
Removes the rt.jar and tools.jar from JRE:
Class and resource files previously stored in lib/rt.jar, lib/tools.jar, lib/dt.jar and various other
internal jar files are stored in a more efficient format in implementation-specific files in the lib
directory.
Removes the endorsed-standards override mechanism:
The java.endorsed.dirs system property and the lib/endorsed directory are no longer present
Remember the old days with XML parser like Xerces
Use upgradeable modules mechanism instead
JEP 220: Modular Runtime Images
22
23. Makes most of the JDK’s internal APIs inaccessible by default
But widely used internal APIs (e.g. sun.misc.Unsafe) still accessible by requiring the
jdk.unsupported module.
Module declaration for jdk.unsupported:
jdk.unsupported {
exports sun.misc;
exports sun.reflect;
exports com.sun.nio.file;
opens sun.misc;
opens sun.reflect;
}
To use Unsafe:
module alithyaModule {
requires jdk.unsupported;
}
To determine whether your code uses internal JDK APIs:
jdeps –jdkinternals
JEP 260: Encapsulate Most Internal APIs
23
24. Simplified version-string format.
New format:
$MAJOR.$MINOR.$SECURITY.$PATCH+$BUILD
e.g. 9.0.5+20
Where:
$MAJOR: version number for a major release (e.g. 9 for JDK 9)
$MINOR: version number for a minor update (e.g. bug fixes)
$SECURITY: version number for a security-update release
$PATCH: version number for a release containing security and high-priority customer
fixes.
$BUILD: version of the build
New java.lang.Runtime.Version class parses, validates, and compares version strings.
JEP 223: New Version-String Scheme
24
25. Considering Java 9u5 release:
Before JDK 9, the version string would be:
1.9.0_5-b20.
Using JDK 9:
the Short version: 9.0.5,
the Long version: 9.0.5+20
Using JDK9’s Version class:
Version version = Runtime.version(); // version contains list: 9,0,5,20
String major = version.major(); // major contains 9
String minor = version.minor(); // minor contains 0
String security = version.security(); // security contains 5
String build= version.build(); // major contains 20
JEP 223: New Version-String Scheme - Example
25
27. Adds Read-Eval-Print Loop (REPL) functionality to the Java Platform. You type Java code, and it
immediately evaluates it.
The Jshell tool continually reads user input, evaluates the input, and prints the value of the input or a
description of the state change the input caused.
Some of you may recognize Venkat Subramaniam’s special REPL based editor:
Jshell API enables applications (e.g. Eclipse) to leverage REPL functionality.
JEP 223: The Java Shell (REPL)
27
28. Assembles and optimizes a set of modules and their dependencies into a custom runtime
image.
JEP 282: jlink: The Java Linker
28
30. JEP 219 Datagram Transport Layer Security (DTLS)
JEP 244: TLS Application-Layer Protocol Negotiation Extension
JEP 249: OCSP Stapling for TLS
JEP 246: Leverage CPU Instructions for GHASH and RSA
JEP 273: DRBG-Based SecureRandom Implementation
JEP 229: Create PKCS12 Keystores by Default
JEP 287: SHA-3 Hash Algorithms
SHA3-224, SHA3-256, SHA3-384, SHA3-512
What’s New for Security
30
32. Deprecate the Java Plug-in
Enhanced Java Control Panel
rewritten as a JavaFX application
location of some functions has changed
JEP 275: Modular Java Application Packaging
JDK modules enabling the Java Packager to reduce the size of the bundled runtime image
JEP 289: Deprecate the Applet API
The Applet class will be considered for removal in future release
What’s New for Deployment
32
34. Project Coin introduced a set of small language changes to JDK 7.
JDK 9 improves on these changes:
Allow @SafeVargs on private instance methods
Allow effectively-final variables to be used as resources in the try-with-resources statement
Pre-Java 9: try (FileInputStream fis2 = fis) [requires fresh variable]
Java 9: try (FileInputStream fis)
Allow diamond with anonymous classes if the argument type of the inferred type is
denotable
Complete the removal, begun in Java SE 8, of underscore from the set of legal identifier
names
Java 10 will rehabilitate underscore to indicate unused lambda parameter
Support for private methods in interfaces
Will allow common code to be extracted to methods that will remain encapsulated
within the interface
JEP-213: Milling Project Coin
34
35. 4 new methods in the Stream interface:
takeWhile(Predicate):
it continue to take elements from the input stream and pass them to the output stream until the test method of
the Predicate returns true
dropWhile(Predicate):
It drops elements on the input stream until the test method of the Predicate returns true. All remaining
elements in the input stream will then be passed to the output stream.
ofNullable(T t):
returns a stream of zero or one elements depending on whether the value passed is null or not.
iterate():
version that takes three parameters.
gives you the ability to replicate the standard for loop syntax as a stream.
e.g. Stream.iterate(0, i > i < 5, i > i + 1) will give you a stream of Integers from 0 to 4.
Several new sources added:
Java.util.Scanner ( e.g. Stream stream = scanner.tokens() )
Java.util.regex.Matcher ( e.g. Stream stream = matcher.results() )
Optional has a stream() method that returns a stream of zero or one element ( public Stream<T> stream() )
New Stream Features
35
36. If the Stream is parallel, the lines() method will map the file
into memory and assign regions of the file to each thread
processing the stream
Parallel Support for Files.lines()
36
39. Supports documentation comments in module declarations.
new command-line options to configure the set of modules to be documented and
generates a new summary page for any modules being documented.
Javadoc – JEP 261: Module System
39
40. Supports generating HTML5 output.
To get fully compliant HTML5 output, ensure that any HTML content provided in
documentation comments are compliant with HTML5.
Javadoc – JEP 224: HTML5 Javadoc
40
41. Replace the Doclet API with a simpler design
leverages newer alternative APIs with improved functionality
update the standard doclet to use it
Reformulate the Doclet API to use the Language Model API and DocTree API
Existing Doclet API will be deprecated soon
Javadoc – JEP 221: Simplified Doclet API
41
43. VM enhancements include the following:
JEP 165: Compiler Control
JEP 197: Segmented Code Cache
JEP 276: Dynamic Linking of Language-Defined Object
What’s New for the VM
43
47. Improves the API for controlling and managing operating system processes.
The ProcessHandle provides:
The process ID: process.getPid()
Arguments
Command
Start time
Accumulated CPU time
User
Parent process
descendants
can also monitor processes' liveness and destroy processes
With the ProcessHandle.onExit method, the asynchronous mechanisms of the CompletableFuture
class can perform an action when the process exits.
Core - JEP 102: Process API Updates
47
48. @Test
public void getPid() throws IOException {
ProcessBuilder builder = new ProcessBuilder("/bin/sleep", "5");
Process proc = builder.start();
assertThat(proc.getPid()).isGreaterThan(0);
}
Core – JEP 102: Process API Improvements - Example
48
49. Adds further concurrency updates to those introduced in JDK 8 in JEP 155
(Concurrency Updates):
Interoperable publish-subscribe framework: Interfaces supporting the
Reactive Streams publish-subscribe framework.
Enhancements to CompletableFuture API:
Time-based enhancements:
enable a feature to complete with a value after a certain duration
support for delays,
timeout(),
completeTimeout()
Subclass enhancements to extend CompletableFuture
Javadoc spec rewording
Core - JEP 266: More Concurrency Updates
49
50. Defines several factory methods (.of(…)) on the List, Set, and Map
interfaces for conveniently creating instances of unmodifiable collections
and maps with small numbers of elements.
Factory methods added to List interface:
static <E> List<E> of()
static <E> List<E> of(E e1)
static <E> List<E> of(E e1, E e2)
static <E> List<E> of(E e1, E e2, E e3)
static <E> List<E> of(E e1, E e2, E e3, E e4)
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5)
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6)
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7)
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8)
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9)
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9, E e10)
static <E> List<E> of(E... elements)
Core – JEP 269: Convenience Factory Methods for Collections
50
51. List<String> fruits = List.of("apple", "orange", "banana");
for (String fruit: fruits)
System.out.println(fruit);
try
{
fruits.add("pear");
}
catch (UnsupportedOperationException uoe)
{
System.err.println("unable to modify fruits list");
}
Will output:
apple
orange
banana
unable to modify fruits list
JEP 269: Convenience Factory Methods for Collections - Example
51
52. @Deprecated annotation provides better information about the status and intended future of APIs:
forRemoval():
This returns a boolean to indicate whether this API element is intended for removal in some future release
E.g. @Deprecated(forRemoval=true) indicates the API will be removed in the next release of the Java SE platform.
Since():
This returns the release or version number, as a string, when this API element was first marked as deprecated
@Deprecated(since="version") contains the Java SE version string that indicates when the API element was
deprecated for those deprecated in Java SE 9 and beyond.
E.g. @Deprecated(since="9", forRemoval=true)
New tool, jdeprscan, to scan a class library (JAR file) for uses of deprecated JDK API elements.
Core - JEP 277: Enhanced Deprecation
52
53. JEP 193: Variable Handles
JEP 254: Compact Strings
JEP 264: Platform Logging API and Service
JEP 268: XML Catalogs
JEP 274: Enhanced Method Handles
JEP 290: Filter Incoming Serialization Data
JEP 259: Stack-Walking API
Core - What’s New in Core Libraries - More
53
55. Add support for Unicode 8.0.
JDK 8 supported Unicode 6.2.
The Unicode 6.3, 7.0 and 8.0 standards combined introduced 10,555 characters, 29
scripts, and 42 blocks.
Internationalization - JEP 267 Unicode 8.0
55
56. Loads properties files in UTF-8 encoding.
UTF-8 is a much more convenient way to represent non-Latin characters.
No more Unicode escapes are required (e.g. u20AC is Unicode representation for €)
In previous releases:
ISO-8859-1 encoding was used when loading property resource bundles.
provided an escape mechanism for characters that cannot be represented in that encoding
Difficult to use because it requires continuous conversion between its escaped form and text
in character encodings that are directly editable.
Can explicitly designate the encoding either ISO-8859-1 or UTF-8, by setting the system property
"java.util.PropertyResourceBundle.encoding".
Internationalization - JEP 226: UTF-8 Properties Files
56
57. Considering a single money property in config.properties file:
money = € / u20AC
Using JDK 8, this property will be read as:
money = â▯¬ / €
Using JDK 9, this property will be read as:
money = € / €
JEP 226: UTF-8 Properties Files - Example
57
58. Use locale data from the Unicode Consortium's Common Locale Data Repository
(CLDR) by default.
CLDR is the de-facto standard for locale data on many platforms.
Pre-Java 9: need to set system property: java.locale.providers=JRE,CLDR
Java 9: enabled by default
Internationalization – JEP 252 Use CLDR Locale Data
58
60. 1. Download JDK 9:
https://jdk9.java.net/download/
2. Download Eclipse Oxygen:
http://www.eclipse.org/downloads/packages/release/Oxygen
3. Using Eclipse, patch Eclipse to enable JDK 9 support:
Add the following update site URL:
http://download.eclipse.org/eclipse/updates/4.7-P-builds
4. Add the JDK 9 to Installed JREs:
Window -> Preferences – Java – Installed JREs
How to setup DEV environment in Eclipse
60