SlideShare a Scribd company logo
1 of 31
Download to read offline
Contributors Guide to the
Jakarta EE 10 Galaxy
Reza Rahman
Jakarta EE Ambassador, Author, Blogger, Speaker
reza_rahman@lycos.com
@reza_rahman
Jakarta EE
https://jakarta.ee
• Java EE transitioned from JCP to Eclipse Foundation as Jakarta EE
• Open governance, open source, open compatibility testing
• Well defined specification process, clear IP flow, vendor-neutral open
collaboration, level playing field
• Key stakeholders maintained if not expanded including Oracle, IBM, Red
Hat, Payara and VMware
• Community participation and contribution key
The Importance of Jakarta EE
2020 Jakarta EE Developer Survey: https://outreach.jakartaee.org/2020-developer-survey-report
• Jakarta EE is an important part of the Java ecosystem and cloud
• 25-35% of Java applications run on Jakarta EE application servers
• WebLogic, WebSphere/Liberty, JBoss EAP, WildFly, Payara
• 70-80% of Java applications depend on at least one or more Jakarta EE APIs
• Tomcat, Hibernate, ActiveMQ, Jetty, MicroProfile, Spring, Quarkus
A healthy ecosystem continues
to evolve, with a stable Jakarta
EE core
Quarkus and MicroProfile are
enjoying a notable increase in
interest
Jakarta EE Evolution
Jakarta EE 9/9.1
• Jakarta EE 9 moves all relevant specifications from javax to jakarta
namespace
• Remove older technologies
• Primarily aimed for ecosystem to adapt to Jakarta
• Some implementations are in place already
• You should begin testing!
• Jakarta EE 9.1 will likely be released soon after adapting to Java SE 11 as
opposed to Java SE 8
• Your contribution is welcome and needed to get work done on time!
• Jakarta EE 10 will likely be delivered some time in 2021
Ambassadors’ Jakarta EE 10 Contribution Guide
https://docs.google.com/document/d/1uZFBoIujXCc-
gQhCzh_ZdlKEsrsV0yVVIHzBTI3usF8/edit?usp=sharing
Jakarta EE 10 Themes
• CDI Alignment
• @Asynchronous, @Schedule, @Lock, @MaxConcurrency in
Concurrency, @MessageListener in Messaging, @RolesAllowed,
@RunAs in Security
• Better CDI support in REST, Batch, Concurrency
• Java SE Alignment
• CompletableFuture in Concurrency
• Bootstrap APIs for REST, Messaging
• Decoupling TCKs, modularization
• Closing standardization gaps
• Security, Batch, Concurrency, Persistence, Transactions
• Microservices Profile
• Innovation
• NoSQL, MVC, Configuration
• CDI based, modernized equivalents for @Asynchronous, @Schedule,
@Lock
• Adding @MaxConcurrency
• Adding @ManagedExecutorServiceDefinition
• Add support for CompletableFuture
• CDI context propagation
Jakarta Concurrency
@Asynchronous + CompletableFuture
@Asynchronous
public CompletableFuture<Confirmation> processPayment(Order order)
{
...
Confirmation status = ...;
return
CompletableFuture<Confirmation>.completedFuture(status);
}
paymentService
.processPayment(order)
.thenAccept(
confirmation -> System.out.println(confirmation));
CDI Based @Lock
@ApplicationScoped @Lock(READ)
public class CountryInfoService {
...
public List<String> getStates(String country) {
return countryStatesMap.get(country);
}
...
@Lock(WRITE)
public void setStates(String country,
List<String> states) {
countryStatesMap.put(country, states);
}
}
@ManagedExecutorServiceDefinition + CompletableFuture
@ManagedExecutorServiceDefinition(
name = “java:app/concurrency/MyExecutorService”,
min-threads=“5”,
max-threads=“25”,
keepalive-time=“5000”,
hung-task-threshold=“60000”)
@Resource(name = "java:app/concurrency/MyExecutorService")
private ManagedExecutorService executor;
...
CompletableFuture<Long> stage = executor.newCompletableFuture()
.thenApply(function)
.thenAccept(consumer);
stage.completeAsync(supplier);
@Service CDI Stereotype
@ApplicationScoped
@Transactional
@MaxConcurrency(DEFAULT)
@Lock(READ)
@Stereotype
@Target(TYPE)
@Retention(RUNTIME)
public @interface Service {}
@Service
public class DefaultBookingService
implements BookingService {
• CDI based, modernized @MessageListener
• Standalone bootstrap API
• AMQP interoperability
• Kafka interoperability
Jakarta Messaging
@MessageListener Example
@ApplicationScoped
@MaxConcurrency(10)
public class HandlingEventRegistrationAttemptConsumer {
@MessageListener(
destinationLookup="jms/HandlingEventRegistrationAttemptQueue",
selector="source = 'mobile'",
batchSize=10, retry=5, retryDelay=7000,
orderBy=TIMESTAMP)
public void onEventRegistrationAttempt(
HandlingEventRegistrationAttempt... attempts) {
...
}
}
Bootstrap API for Jakarta Messaging
JmsContainer container = JmsContainerFactory.newInstance();
...
JMSContext jmsContext = container.getJmsContext();
Destination handlingEventQueue = container.getDestination(
“jms/HandlingEventRegistrationAttemptQueue” true);
...
jmsContext.createProducer()
.setDisableMessageID(true)
.setDisableMessageTimestamp(true)
.setStringProperty("source", source)
.send(handlingEventQueue, attempt);
...
container.close();
• CDI based, modernized equivalents for @RolesAllowed and @RunAs
• OAuth 2.0, OpenID Connect, JWT support
• EL enabled authorization annotation
Jakarta Security
Modern Security Providers
@OpenIdConnectIdentityStoreDefinition(
clientId=“${client.id}”, clientSecret=“${client.secret}”,
discoveryEndpoint=“https://.../openid-configuration”,
userNameAttribute=“preferred_username”)
@JwtIdentityStoreDefinition(
jwksUri="https://.../keys",
issuer="https://.../${tenant.id}/v2.0",
audiences="${client.id}",
userNameAttribute="preferred_username")
@OAuth2IdentityStoreDefinition(
clientId="${client.id}", clientSecret="${client.secret}",
tokenEndpointAuthMethod="client_secret_post",
authorizationEndpoint="https://.../authorize",
userNameAttribute="preferred_username",
website="https://.../authentication/")
EL Enabled Authorization Annotation
@Authorized("hasRoles('Manager') && schedule.officeHours")
public void transferFunds();
@Authorized("hasAttribute('directReports', employeeId)")
public double getSalary(long employeeId);
• Jakarta Persistence
• Make persistence.xml optional/empty marker
• More SQL features in JPQL such as sub-selects
• JCache as a second-level cache provider
• Jakarta REST
• @Inject instead of @Context
• Standalone bootstrap API
• Jakarta Batch
• CDI alignment
• Java job definition API as alternative to XML
• Jakarta Transactions
• Standardize common performance optimizations
Other Possibilities
Job Definition API Example
Job job = new JobBuilder(jobName).property("jobk1", "J")
.listener("jobListener1", new String[]{"jobListenerk1",
"#{jobParameters['jobListenerPropVal']}"},
.step(new StepBuilder(stepName)
.properties(new String[]{"stepk1", "S"},
new String[]{"stepk2", "S"})
.batchlet(batchlet1Name, new String[]{"batchletk1", "B"},
new String[]{"batchletk2", "B"})
.listener("stepListener1", stepListenerProps)
.stopOn("STOP").restartFrom(stepName).exitStatus()
.endOn("END").exitStatus("new status for end")
.failOn("FAIL").exitStatus()
.nextOn("*").to(step2Name)
.build())
...
.build();
• Standard action-based web framework
• Jakarta Faces continues to evolve separately
• Model
• CDI, Bean Validation
• View
• Facelets, Jakarta Server Pages
• Controller
• Majority of work here
• Based on Jakarta REST
Jakarta MVC
Jakarta MVC Example
@Controller
@Path("/")
@View("my-index.xhtml")
public class Bookstore {
@Inject private Models model;
@Inject private BookService service;
...
@GET
public void index() {
...
model.put(“books”, books);
}
}
• Specification for accessing NoSQL databases
• Layers of flexible abstractions
• Communication API akin to JDBC
• Mapping/template API akin to JPA
• Repository API akin to DeltaSpike/Spring Data
• API variants by NoSQL taxonomy
• Key-value pair, column family, document and graph
• Bean validation, externalized configuration
Jakarta NoSQL
Jakarta NoSQL Example
@Entity public class Order {
@Id private long id;
@Column @NotBlank private String description;
@Column @NotEmpty private List<OrderLine> orderLines;
@Column @NotNull private Customer customer;
@Column @NotNull private Address address;
template.insert(order);
...
DocumentQuery query = select().from("Order")
.where("description").like("^Pinball").build();
logger.info("Found orders for pinball: "
+ template.select(query).count());
Configuration
• Externalizing application configuration
• Built-in stores
• Property files, Java system properties, environment variables
• Extensible stores
• Kubernetes secrets
• Secure cloud storage
• NoSQL stores
• @Inject into code
• Reference in EL
• Reference in XML
• MicroProfile alignment
Configuration Examples
@Inject
@ConfigProperty(name = “admin.group”, defaultValue=“admin”)
private String adminGroup;
persistence.provider=org.hibernate.ejb.HibernatePersistence
persistence.datasource=java:app/jdbc/CargoTrackerDatabase
persistence.schema.generation.database.action=create
<data-source>
<name>java:app/jdbc/CargoTrackerDatabase</name>
<class-name>org.apache.derby.jdbc.EmbeddedDriver</class-name>
<url>jdbc:derby:${temp.dir}/cargo-tracker-database</url>
</data-source>
Ways of Contributing
• Follow Jakarta EE technologies that interest you and share opinion
• https://jakarta.ee/connect/mailing-lists/
• Advocate for a specific change or feature
• https://jakarta.ee/projects/
• Help implement a change in API, specification, TCK or implementation
• Sign Eclipse Contributor Agreement
• https://www.eclipse.org/legal/ECA.php
• Becoming a committer comes much later
• Engage an Ambassador if needed
• https://jakartaee-ambassadors.io
Beyond Jakarta EE 10
• Persistence alignment with Java SE Records
• JSON schema support
• Reactive/NIO support
• Servlet, REST, MVC
• Persistence - requires reactive/NIO JDBC, ideally in Java SE
• Making modularity and embedded runtimes required
Summary
• Jakarta EE 8, 9, 9.1 very significant for the future of Java
• Many possible important changes for Jakarta EE 10 and beyond
• The time to get involved is now!
Resources
• Jakarta EE Community alias
• https://accounts.eclipse.org/mailing-list/jakarta.ee-community
• Jakarta EE Twitter handle
• @JakartaEE
• Jakarta Tech Talks
• https://www.meetup.com/jakartatechtalks_
Contributors Guide to the Jakarta EE 10 Galaxy

More Related Content

What's hot

Enterprise Java Web Application Frameworks Sample Stack Implementation
Enterprise Java Web Application Frameworks   Sample Stack ImplementationEnterprise Java Web Application Frameworks   Sample Stack Implementation
Enterprise Java Web Application Frameworks Sample Stack Implementation
Mert Çalışkan
 

What's hot (19)

Maven
MavenMaven
Maven
 
Servlet programming
Servlet programmingServlet programming
Servlet programming
 
High Performance Cloud Native APIs Using Apache Geode
High Performance Cloud Native APIs Using Apache Geode High Performance Cloud Native APIs Using Apache Geode
High Performance Cloud Native APIs Using Apache Geode
 
Modern web application development with java ee 7
Modern web application development with java ee 7Modern web application development with java ee 7
Modern web application development with java ee 7
 
The Making of the Oracle R2DBC Driver and How to Take Your Code from Synchron...
The Making of the Oracle R2DBC Driver and How to Take Your Code from Synchron...The Making of the Oracle R2DBC Driver and How to Take Your Code from Synchron...
The Making of the Oracle R2DBC Driver and How to Take Your Code from Synchron...
 
Getting Started with Java EE 7
Getting Started with Java EE 7Getting Started with Java EE 7
Getting Started with Java EE 7
 
Refactor your Java EE application using Microservices and Containers - Arun G...
Refactor your Java EE application using Microservices and Containers - Arun G...Refactor your Java EE application using Microservices and Containers - Arun G...
Refactor your Java EE application using Microservices and Containers - Arun G...
 
Enterprise Java Web Application Frameworks Sample Stack Implementation
Enterprise Java Web Application Frameworks   Sample Stack ImplementationEnterprise Java Web Application Frameworks   Sample Stack Implementation
Enterprise Java Web Application Frameworks Sample Stack Implementation
 
HTTP/2 comes to Java. What Servlet 4.0 means to you. DevNexus 2015
HTTP/2 comes to Java.  What Servlet 4.0 means to you. DevNexus 2015HTTP/2 comes to Java.  What Servlet 4.0 means to you. DevNexus 2015
HTTP/2 comes to Java. What Servlet 4.0 means to you. DevNexus 2015
 
Java EE 8
Java EE 8Java EE 8
Java EE 8
 
EJB 3.2 - Java EE 7 - Java One Hyderabad 2012
EJB 3.2 - Java EE 7 - Java One Hyderabad 2012EJB 3.2 - Java EE 7 - Java One Hyderabad 2012
EJB 3.2 - Java EE 7 - Java One Hyderabad 2012
 
Java EE 8 Update
Java EE 8 UpdateJava EE 8 Update
Java EE 8 Update
 
Java EE Revisits GoF Design Patterns
Java EE Revisits GoF Design PatternsJava EE Revisits GoF Design Patterns
Java EE Revisits GoF Design Patterns
 
50 New Features of Java EE 7 in 50 minutes
50 New Features of Java EE 7 in 50 minutes50 New Features of Java EE 7 in 50 minutes
50 New Features of Java EE 7 in 50 minutes
 
Streaming to a New Jakarta EE
Streaming to a New Jakarta EEStreaming to a New Jakarta EE
Streaming to a New Jakarta EE
 
Enterprise Persistence in OSGi - Mike Keith, Oracle
Enterprise Persistence in OSGi - Mike Keith, OracleEnterprise Persistence in OSGi - Mike Keith, Oracle
Enterprise Persistence in OSGi - Mike Keith, Oracle
 
Spring User Guide
Spring User GuideSpring User Guide
Spring User Guide
 
Understanding MicroSERVICE Architecture with Java & Spring Boot
Understanding MicroSERVICE Architecture with Java & Spring BootUnderstanding MicroSERVICE Architecture with Java & Spring Boot
Understanding MicroSERVICE Architecture with Java & Spring Boot
 
Java Spring framework, Dependency Injection, DI, IoC, Inversion of Control
Java Spring framework, Dependency Injection, DI, IoC, Inversion of ControlJava Spring framework, Dependency Injection, DI, IoC, Inversion of Control
Java Spring framework, Dependency Injection, DI, IoC, Inversion of Control
 

Similar to Contributors Guide to the Jakarta EE 10 Galaxy

Spring design-juergen-qcon
Spring design-juergen-qconSpring design-juergen-qcon
Spring design-juergen-qcon
Yiwei Ma
 

Similar to Contributors Guide to the Jakarta EE 10 Galaxy (20)

Migrating to Jakarta EE 10
Migrating to Jakarta EE 10Migrating to Jakarta EE 10
Migrating to Jakarta EE 10
 
Why jakarta ee matters (ConFoo 2021)
Why jakarta ee matters (ConFoo 2021)Why jakarta ee matters (ConFoo 2021)
Why jakarta ee matters (ConFoo 2021)
 
Life outside WO
Life outside WOLife outside WO
Life outside WO
 
Oracle OpenWorld 2014 Review Part Four - PaaS Middleware
Oracle OpenWorld 2014 Review Part Four - PaaS MiddlewareOracle OpenWorld 2014 Review Part Four - PaaS Middleware
Oracle OpenWorld 2014 Review Part Four - PaaS Middleware
 
Lecture 7 Web Services JAX-WS & JAX-RS
Lecture 7   Web Services JAX-WS & JAX-RSLecture 7   Web Services JAX-WS & JAX-RS
Lecture 7 Web Services JAX-WS & JAX-RS
 
Developing real-time data pipelines with Spring and Kafka
Developing real-time data pipelines with Spring and KafkaDeveloping real-time data pipelines with Spring and Kafka
Developing real-time data pipelines with Spring and Kafka
 
Integrating Microservices with Apache Camel
Integrating Microservices with Apache CamelIntegrating Microservices with Apache Camel
Integrating Microservices with Apache Camel
 
Cloud Conference Day - A High-Speed Data Ingestion Service in Java Using MQTT...
Cloud Conference Day - A High-Speed Data Ingestion Service in Java Using MQTT...Cloud Conference Day - A High-Speed Data Ingestion Service in Java Using MQTT...
Cloud Conference Day - A High-Speed Data Ingestion Service in Java Using MQTT...
 
Spring design-juergen-qcon
Spring design-juergen-qconSpring design-juergen-qcon
Spring design-juergen-qcon
 
The Spring Framework
The Spring FrameworkThe Spring Framework
The Spring Framework
 
The Spring Framework
The Spring FrameworkThe Spring Framework
The Spring Framework
 
BarcelonaJUG - A High-Speed Data Ingestion Service in Java Using MQTT, AMQP, ...
BarcelonaJUG - A High-Speed Data Ingestion Service in Java Using MQTT, AMQP, ...BarcelonaJUG - A High-Speed Data Ingestion Service in Java Using MQTT, AMQP, ...
BarcelonaJUG - A High-Speed Data Ingestion Service in Java Using MQTT, AMQP, ...
 
Real world #microservices with Apache Camel, Fabric8, and OpenShift
Real world #microservices with Apache Camel, Fabric8, and OpenShiftReal world #microservices with Apache Camel, Fabric8, and OpenShift
Real world #microservices with Apache Camel, Fabric8, and OpenShift
 
Real-world #microservices with Apache Camel, Fabric8, and OpenShift
Real-world #microservices with Apache Camel, Fabric8, and OpenShiftReal-world #microservices with Apache Camel, Fabric8, and OpenShift
Real-world #microservices with Apache Camel, Fabric8, and OpenShift
 
Elastic and Cloud-ready Applications with Payara Micro
Elastic and Cloud-ready Applications with Payara MicroElastic and Cloud-ready Applications with Payara Micro
Elastic and Cloud-ready Applications with Payara Micro
 
Elastic and Cloud-ready Applications with Payara Micro
Elastic and Cloud-ready Applications with Payara MicroElastic and Cloud-ready Applications with Payara Micro
Elastic and Cloud-ready Applications with Payara Micro
 
Elastic and Cloud-ready Applications with Payara Micro
Elastic and Cloud-ready Applications with Payara MicroElastic and Cloud-ready Applications with Payara Micro
Elastic and Cloud-ready Applications with Payara Micro
 
Managing your camels in the cloud with CI/CD
Managing your camels in the cloud with CI/CDManaging your camels in the cloud with CI/CD
Managing your camels in the cloud with CI/CD
 
Scala and Spring
Scala and SpringScala and Spring
Scala and Spring
 
NoSQL Endgame DevoxxUA Conference 2020
NoSQL Endgame DevoxxUA Conference 2020NoSQL Endgame DevoxxUA Conference 2020
NoSQL Endgame DevoxxUA Conference 2020
 

More from Jakarta_EE

More from Jakarta_EE (20)

Applied Domain-Driven Design Blueprints for Jakarta EE
Applied Domain-Driven Design Blueprints for Jakarta EEApplied Domain-Driven Design Blueprints for Jakarta EE
Applied Domain-Driven Design Blueprints for Jakarta EE
 
Eclipse Transformer
Eclipse TransformerEclipse Transformer
Eclipse Transformer
 
Eclipse GlassFish 6.0.0-M1
Eclipse GlassFish 6.0.0-M1Eclipse GlassFish 6.0.0-M1
Eclipse GlassFish 6.0.0-M1
 
Jakarta EE 9 Platform Project
Jakarta EE 9 Platform ProjectJakarta EE 9 Platform Project
Jakarta EE 9 Platform Project
 
Jakarta EE 9 Milestone Release Party - Overview
Jakarta EE 9 Milestone Release Party - OverviewJakarta EE 9 Milestone Release Party - Overview
Jakarta EE 9 Milestone Release Party - Overview
 
Jakarta EE 9 Platform Report
Jakarta EE 9 Platform ReportJakarta EE 9 Platform Report
Jakarta EE 9 Platform Report
 
Cloud Native Java: Present and Future at Eclipse Foundation
Cloud Native Java: Present and Future at Eclipse FoundationCloud Native Java: Present and Future at Eclipse Foundation
Cloud Native Java: Present and Future at Eclipse Foundation
 
JakartaOne Livestream CN4J: Driving Jakarta EE Success
JakartaOne Livestream CN4J: Driving Jakarta EE SuccessJakartaOne Livestream CN4J: Driving Jakarta EE Success
JakartaOne Livestream CN4J: Driving Jakarta EE Success
 
JakartaOne Livestream CN4J: Cloud Native Runtimes - Revolution or Evolution?
JakartaOne Livestream CN4J: Cloud Native Runtimes - Revolution or Evolution?JakartaOne Livestream CN4J: Cloud Native Runtimes - Revolution or Evolution?
JakartaOne Livestream CN4J: Cloud Native Runtimes - Revolution or Evolution?
 
JakartaOne Livestream CN4J: Bringing Reactive to Enterprise Developers
JakartaOne Livestream CN4J: Bringing Reactive to Enterprise DevelopersJakartaOne Livestream CN4J: Bringing Reactive to Enterprise Developers
JakartaOne Livestream CN4J: Bringing Reactive to Enterprise Developers
 
JakartaOne Livestream CN4J: Eclipse MicroProfile - Your Cloud-Native Companion
JakartaOne Livestream CN4J: Eclipse MicroProfile - Your Cloud-Native CompanionJakartaOne Livestream CN4J: Eclipse MicroProfile - Your Cloud-Native Companion
JakartaOne Livestream CN4J: Eclipse MicroProfile - Your Cloud-Native Companion
 
Kubernetes Native Java and Eclipse MicroProfile | EclipseCon Europe 2019
Kubernetes Native Java and Eclipse MicroProfile | EclipseCon Europe 2019Kubernetes Native Java and Eclipse MicroProfile | EclipseCon Europe 2019
Kubernetes Native Java and Eclipse MicroProfile | EclipseCon Europe 2019
 
Jakarta for dummEEs | JakartaOne Livestream
Jakarta for dummEEs | JakartaOne LivestreamJakarta for dummEEs | JakartaOne Livestream
Jakarta for dummEEs | JakartaOne Livestream
 
Jakarta EE Meets NoSQL at the Cloud Age | JakartaOne Livestream
Jakarta EE Meets NoSQL at the Cloud Age | JakartaOne LivestreamJakarta EE Meets NoSQL at the Cloud Age | JakartaOne Livestream
Jakarta EE Meets NoSQL at the Cloud Age | JakartaOne Livestream
 
Turbocharged Java with Quarkus | JakartaOne Livestream
 Turbocharged Java with Quarkus | JakartaOne Livestream Turbocharged Java with Quarkus | JakartaOne Livestream
Turbocharged Java with Quarkus | JakartaOne Livestream
 
Building Interoperable Microservices With Eclipse MicroProfile| JakartaOne Li...
Building Interoperable Microservices With Eclipse MicroProfile| JakartaOne Li...Building Interoperable Microservices With Eclipse MicroProfile| JakartaOne Li...
Building Interoperable Microservices With Eclipse MicroProfile| JakartaOne Li...
 
Jakarta RESTful Web Services: Status Quo and Roadmap | JakartaOne Livestream
Jakarta RESTful Web Services: Status Quo and Roadmap | JakartaOne LivestreamJakarta RESTful Web Services: Status Quo and Roadmap | JakartaOne Livestream
Jakarta RESTful Web Services: Status Quo and Roadmap | JakartaOne Livestream
 
Cloud Native Java Community Day | EclipseCon Europe 2019
Cloud Native Java Community Day | EclipseCon Europe 2019Cloud Native Java Community Day | EclipseCon Europe 2019
Cloud Native Java Community Day | EclipseCon Europe 2019
 
My Open Source journey | Community Day, EclipseCon Europe 2019
My Open Source journey | Community Day, EclipseCon Europe 2019My Open Source journey | Community Day, EclipseCon Europe 2019
My Open Source journey | Community Day, EclipseCon Europe 2019
 
Eclipse Jemo | Community Day, EclipseCon Europe 2019
Eclipse Jemo | Community Day, EclipseCon Europe 2019Eclipse Jemo | Community Day, EclipseCon Europe 2019
Eclipse Jemo | Community Day, EclipseCon Europe 2019
 

Recently uploaded

Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Medical / Health Care (+971588192166) Mifepristone and Misoprostol tablets 200mg
 

Recently uploaded (20)

%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
 
WSO2CON 2024 - OSU & WSO2: A Decade Journey in Integration & Innovation
WSO2CON 2024 - OSU & WSO2: A Decade Journey in Integration & InnovationWSO2CON 2024 - OSU & WSO2: A Decade Journey in Integration & Innovation
WSO2CON 2024 - OSU & WSO2: A Decade Journey in Integration & Innovation
 
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open SourceWSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
 
WSO2Con2024 - GitOps in Action: Navigating Application Deployment in the Plat...
WSO2Con2024 - GitOps in Action: Navigating Application Deployment in the Plat...WSO2Con2024 - GitOps in Action: Navigating Application Deployment in the Plat...
WSO2Con2024 - GitOps in Action: Navigating Application Deployment in the Plat...
 
WSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - KeynoteWSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - Keynote
 
WSO2CON 2024 - Lessons from the Field: Legacy Platforms – It's Time to Let Go...
WSO2CON 2024 - Lessons from the Field: Legacy Platforms – It's Time to Let Go...WSO2CON 2024 - Lessons from the Field: Legacy Platforms – It's Time to Let Go...
WSO2CON 2024 - Lessons from the Field: Legacy Platforms – It's Time to Let Go...
 
WSO2Con2024 - Low-Code Integration Tooling
WSO2Con2024 - Low-Code Integration ToolingWSO2Con2024 - Low-Code Integration Tooling
WSO2Con2024 - Low-Code Integration Tooling
 
WSO2Con2024 - Unleashing the Financial Potential of 13 Million People
WSO2Con2024 - Unleashing the Financial Potential of 13 Million PeopleWSO2Con2024 - Unleashing the Financial Potential of 13 Million People
WSO2Con2024 - Unleashing the Financial Potential of 13 Million People
 
WSO2Con2024 - Organization Management: The Revolution in B2B CIAM
WSO2Con2024 - Organization Management: The Revolution in B2B CIAMWSO2Con2024 - Organization Management: The Revolution in B2B CIAM
WSO2Con2024 - Organization Management: The Revolution in B2B CIAM
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
What Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the SituationWhat Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the Situation
 
WSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security ProgramWSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security Program
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
WSO2Con2024 - Simplified Integration: Unveiling the Latest Features in WSO2 L...
WSO2Con2024 - Simplified Integration: Unveiling the Latest Features in WSO2 L...WSO2Con2024 - Simplified Integration: Unveiling the Latest Features in WSO2 L...
WSO2Con2024 - Simplified Integration: Unveiling the Latest Features in WSO2 L...
 
WSO2CON 2024 - Software Engineering for Digital Businesses
WSO2CON 2024 - Software Engineering for Digital BusinessesWSO2CON 2024 - Software Engineering for Digital Businesses
WSO2CON 2024 - Software Engineering for Digital Businesses
 
WSO2CON2024 - Why Should You Consider Ballerina for Your Next Integration
WSO2CON2024 - Why Should You Consider Ballerina for Your Next IntegrationWSO2CON2024 - Why Should You Consider Ballerina for Your Next Integration
WSO2CON2024 - Why Should You Consider Ballerina for Your Next Integration
 
WSO2Con2024 - Navigating the Digital Landscape: Transforming Healthcare with ...
WSO2Con2024 - Navigating the Digital Landscape: Transforming Healthcare with ...WSO2Con2024 - Navigating the Digital Landscape: Transforming Healthcare with ...
WSO2Con2024 - Navigating the Digital Landscape: Transforming Healthcare with ...
 
Artyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxArtyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptx
 

Contributors Guide to the Jakarta EE 10 Galaxy

  • 1. Contributors Guide to the Jakarta EE 10 Galaxy Reza Rahman Jakarta EE Ambassador, Author, Blogger, Speaker reza_rahman@lycos.com @reza_rahman
  • 2. Jakarta EE https://jakarta.ee • Java EE transitioned from JCP to Eclipse Foundation as Jakarta EE • Open governance, open source, open compatibility testing • Well defined specification process, clear IP flow, vendor-neutral open collaboration, level playing field • Key stakeholders maintained if not expanded including Oracle, IBM, Red Hat, Payara and VMware • Community participation and contribution key
  • 3. The Importance of Jakarta EE 2020 Jakarta EE Developer Survey: https://outreach.jakartaee.org/2020-developer-survey-report • Jakarta EE is an important part of the Java ecosystem and cloud • 25-35% of Java applications run on Jakarta EE application servers • WebLogic, WebSphere/Liberty, JBoss EAP, WildFly, Payara • 70-80% of Java applications depend on at least one or more Jakarta EE APIs • Tomcat, Hibernate, ActiveMQ, Jetty, MicroProfile, Spring, Quarkus A healthy ecosystem continues to evolve, with a stable Jakarta EE core Quarkus and MicroProfile are enjoying a notable increase in interest
  • 5. Jakarta EE 9/9.1 • Jakarta EE 9 moves all relevant specifications from javax to jakarta namespace • Remove older technologies • Primarily aimed for ecosystem to adapt to Jakarta • Some implementations are in place already • You should begin testing! • Jakarta EE 9.1 will likely be released soon after adapting to Java SE 11 as opposed to Java SE 8 • Your contribution is welcome and needed to get work done on time! • Jakarta EE 10 will likely be delivered some time in 2021
  • 6. Ambassadors’ Jakarta EE 10 Contribution Guide https://docs.google.com/document/d/1uZFBoIujXCc- gQhCzh_ZdlKEsrsV0yVVIHzBTI3usF8/edit?usp=sharing
  • 7. Jakarta EE 10 Themes • CDI Alignment • @Asynchronous, @Schedule, @Lock, @MaxConcurrency in Concurrency, @MessageListener in Messaging, @RolesAllowed, @RunAs in Security • Better CDI support in REST, Batch, Concurrency • Java SE Alignment • CompletableFuture in Concurrency • Bootstrap APIs for REST, Messaging • Decoupling TCKs, modularization • Closing standardization gaps • Security, Batch, Concurrency, Persistence, Transactions • Microservices Profile • Innovation • NoSQL, MVC, Configuration
  • 8. • CDI based, modernized equivalents for @Asynchronous, @Schedule, @Lock • Adding @MaxConcurrency • Adding @ManagedExecutorServiceDefinition • Add support for CompletableFuture • CDI context propagation Jakarta Concurrency
  • 9. @Asynchronous + CompletableFuture @Asynchronous public CompletableFuture<Confirmation> processPayment(Order order) { ... Confirmation status = ...; return CompletableFuture<Confirmation>.completedFuture(status); } paymentService .processPayment(order) .thenAccept( confirmation -> System.out.println(confirmation));
  • 10. CDI Based @Lock @ApplicationScoped @Lock(READ) public class CountryInfoService { ... public List<String> getStates(String country) { return countryStatesMap.get(country); } ... @Lock(WRITE) public void setStates(String country, List<String> states) { countryStatesMap.put(country, states); } }
  • 11. @ManagedExecutorServiceDefinition + CompletableFuture @ManagedExecutorServiceDefinition( name = “java:app/concurrency/MyExecutorService”, min-threads=“5”, max-threads=“25”, keepalive-time=“5000”, hung-task-threshold=“60000”) @Resource(name = "java:app/concurrency/MyExecutorService") private ManagedExecutorService executor; ... CompletableFuture<Long> stage = executor.newCompletableFuture() .thenApply(function) .thenAccept(consumer); stage.completeAsync(supplier);
  • 13. • CDI based, modernized @MessageListener • Standalone bootstrap API • AMQP interoperability • Kafka interoperability Jakarta Messaging
  • 14. @MessageListener Example @ApplicationScoped @MaxConcurrency(10) public class HandlingEventRegistrationAttemptConsumer { @MessageListener( destinationLookup="jms/HandlingEventRegistrationAttemptQueue", selector="source = 'mobile'", batchSize=10, retry=5, retryDelay=7000, orderBy=TIMESTAMP) public void onEventRegistrationAttempt( HandlingEventRegistrationAttempt... attempts) { ... } }
  • 15. Bootstrap API for Jakarta Messaging JmsContainer container = JmsContainerFactory.newInstance(); ... JMSContext jmsContext = container.getJmsContext(); Destination handlingEventQueue = container.getDestination( “jms/HandlingEventRegistrationAttemptQueue” true); ... jmsContext.createProducer() .setDisableMessageID(true) .setDisableMessageTimestamp(true) .setStringProperty("source", source) .send(handlingEventQueue, attempt); ... container.close();
  • 16. • CDI based, modernized equivalents for @RolesAllowed and @RunAs • OAuth 2.0, OpenID Connect, JWT support • EL enabled authorization annotation Jakarta Security
  • 17. Modern Security Providers @OpenIdConnectIdentityStoreDefinition( clientId=“${client.id}”, clientSecret=“${client.secret}”, discoveryEndpoint=“https://.../openid-configuration”, userNameAttribute=“preferred_username”) @JwtIdentityStoreDefinition( jwksUri="https://.../keys", issuer="https://.../${tenant.id}/v2.0", audiences="${client.id}", userNameAttribute="preferred_username") @OAuth2IdentityStoreDefinition( clientId="${client.id}", clientSecret="${client.secret}", tokenEndpointAuthMethod="client_secret_post", authorizationEndpoint="https://.../authorize", userNameAttribute="preferred_username", website="https://.../authentication/")
  • 18. EL Enabled Authorization Annotation @Authorized("hasRoles('Manager') && schedule.officeHours") public void transferFunds(); @Authorized("hasAttribute('directReports', employeeId)") public double getSalary(long employeeId);
  • 19. • Jakarta Persistence • Make persistence.xml optional/empty marker • More SQL features in JPQL such as sub-selects • JCache as a second-level cache provider • Jakarta REST • @Inject instead of @Context • Standalone bootstrap API • Jakarta Batch • CDI alignment • Java job definition API as alternative to XML • Jakarta Transactions • Standardize common performance optimizations Other Possibilities
  • 20. Job Definition API Example Job job = new JobBuilder(jobName).property("jobk1", "J") .listener("jobListener1", new String[]{"jobListenerk1", "#{jobParameters['jobListenerPropVal']}"}, .step(new StepBuilder(stepName) .properties(new String[]{"stepk1", "S"}, new String[]{"stepk2", "S"}) .batchlet(batchlet1Name, new String[]{"batchletk1", "B"}, new String[]{"batchletk2", "B"}) .listener("stepListener1", stepListenerProps) .stopOn("STOP").restartFrom(stepName).exitStatus() .endOn("END").exitStatus("new status for end") .failOn("FAIL").exitStatus() .nextOn("*").to(step2Name) .build()) ... .build();
  • 21. • Standard action-based web framework • Jakarta Faces continues to evolve separately • Model • CDI, Bean Validation • View • Facelets, Jakarta Server Pages • Controller • Majority of work here • Based on Jakarta REST Jakarta MVC
  • 22. Jakarta MVC Example @Controller @Path("/") @View("my-index.xhtml") public class Bookstore { @Inject private Models model; @Inject private BookService service; ... @GET public void index() { ... model.put(“books”, books); } }
  • 23. • Specification for accessing NoSQL databases • Layers of flexible abstractions • Communication API akin to JDBC • Mapping/template API akin to JPA • Repository API akin to DeltaSpike/Spring Data • API variants by NoSQL taxonomy • Key-value pair, column family, document and graph • Bean validation, externalized configuration Jakarta NoSQL
  • 24. Jakarta NoSQL Example @Entity public class Order { @Id private long id; @Column @NotBlank private String description; @Column @NotEmpty private List<OrderLine> orderLines; @Column @NotNull private Customer customer; @Column @NotNull private Address address; template.insert(order); ... DocumentQuery query = select().from("Order") .where("description").like("^Pinball").build(); logger.info("Found orders for pinball: " + template.select(query).count());
  • 25. Configuration • Externalizing application configuration • Built-in stores • Property files, Java system properties, environment variables • Extensible stores • Kubernetes secrets • Secure cloud storage • NoSQL stores • @Inject into code • Reference in EL • Reference in XML • MicroProfile alignment
  • 26. Configuration Examples @Inject @ConfigProperty(name = “admin.group”, defaultValue=“admin”) private String adminGroup; persistence.provider=org.hibernate.ejb.HibernatePersistence persistence.datasource=java:app/jdbc/CargoTrackerDatabase persistence.schema.generation.database.action=create <data-source> <name>java:app/jdbc/CargoTrackerDatabase</name> <class-name>org.apache.derby.jdbc.EmbeddedDriver</class-name> <url>jdbc:derby:${temp.dir}/cargo-tracker-database</url> </data-source>
  • 27. Ways of Contributing • Follow Jakarta EE technologies that interest you and share opinion • https://jakarta.ee/connect/mailing-lists/ • Advocate for a specific change or feature • https://jakarta.ee/projects/ • Help implement a change in API, specification, TCK or implementation • Sign Eclipse Contributor Agreement • https://www.eclipse.org/legal/ECA.php • Becoming a committer comes much later • Engage an Ambassador if needed • https://jakartaee-ambassadors.io
  • 28. Beyond Jakarta EE 10 • Persistence alignment with Java SE Records • JSON schema support • Reactive/NIO support • Servlet, REST, MVC • Persistence - requires reactive/NIO JDBC, ideally in Java SE • Making modularity and embedded runtimes required
  • 29. Summary • Jakarta EE 8, 9, 9.1 very significant for the future of Java • Many possible important changes for Jakarta EE 10 and beyond • The time to get involved is now!
  • 30. Resources • Jakarta EE Community alias • https://accounts.eclipse.org/mailing-list/jakarta.ee-community • Jakarta EE Twitter handle • @JakartaEE • Jakarta Tech Talks • https://www.meetup.com/jakartatechtalks_