What's new and noteworthy in Java EE 8?
Expertenkreis Java, 05.12.2017, GEDOPLAN
Dirk Weil, GEDOPLAN GmbH
Dirk Weil
GEDOPLAN GmbH, Bielefeld
GEDOPLAN IT Consulting
Konzeption, Realisierung von IT-Lösungen
GEDOPLAN IT Training
Seminare in Berlin, Bielefeld, on-site
Java EE seit 1998
Vorträge, Veröffentlichungen
What's new and noteworthy in Java EE 8? 2gedoplan.de
New and noteworthy in CDI 2.0
Observer ordering
What's new and noteworthy in Java EE 8? 3gedoplan.de
@ApplicationScoped
public class EventObserver {
void a(@Observes @Priority(Interceptor.Priority.APPLICATION + 1) DemoEvent e) {
…
}
void b(@Observes @Priority(Interceptor.Priority.APPLICATION + 2) DemoEvent e) {
…
}
@ApplicationScoped
public class EventProducer {
@Inject
Event<DemoEvent> eventSource;
public void fireSyncEvent() {
this.eventSource.fire(new DemoEvent());
New and noteworthy in CDI 2.0
Asynchronuous
events
What's new and noteworthy in Java EE 8? 4gedoplan.de
@ApplicationScoped
public class EventObserver {
void x(@ObservesAsync DemoEvent e) {
…
}
void y(@ObservesAsync DemoEvent e) {
…
}
@ApplicationScoped
public class EventProducer {
@Inject
Event<DemoEvent> eventSource;
public void fireAsyncEvent() {
CompletionStage<DemoEvent> completionStage
= this.eventSource.fireAsync(new DemoEvent());
New and noteworthy in CDI 2.0
SE container
What's new and noteworthy in Java EE 8? 5gedoplan.de
SeContainerInitializer seContainerInitializer
= SeContainerInitializer.newInstance();
try (SeContainer container = seContainerInitializer.initialize()) {
HelloWorldService helloWorldService
= container.select(HelloWorldService.class).get();
this.log.debug(helloWorldService.getHelloWorld());
}
<dependency>
<groupId>org.jboss.weld.se</groupId>
<artifactId>weld-se-shaded</artifactId>
<version>3.0.2.Final</version>
</dependency>
<dependency>
<groupId>org.apache.openwebbeans</groupId>
<artifactId>openwebbeans-se</artifactId>
<version>2.0.2</version>
</dependency>
New and noteworthy in CDI 2.0
Java 8 alignment
Repeatable qualifier annotations
Instance.stream()
Various minor adjustments
No context control in SE 
What's new and noteworthy in Java EE 8? 6gedoplan.de
New and noteworthy in Bean Validation 2.0
New constraints
@Email, @NotEmpty, @NotBlank, @Positive,
@PositiveOrZero, @Negative, @NegativeOrZero,
@PastOrPresent, @FutureOrPresent
Container element constraints
Java 8 alignment
Repeatable constraint annotations
Support for Java 8 date and time types
Support for Optional<T>
What's new and noteworthy in Java EE 8? 7gedoplan.de
List<@Positive @Max(6) Integer> marks;
Optional<@Email String> getEmail() {
…
}
New and noteworthy in JPA 2.2
Java 8 alignment
Repeatable annotations
Support for LocalDate, LocalDateTime, LocalTime,
OffsetDateTime, OffsetTime
Query.getResultStream()
Allow CDI injections into AttributeConverter
What's new and noteworthy in Java EE 8? 8gedoplan.de
public class Employee {
@AttributeOverride(name = "street", column = @Column(name = "HOME_STREET"))
@AttributeOverride(name = "zipCode", column = @Column(name = "HOME_ZIPCODE"))
@AttributeOverride(name = "city", column = @Column(name = "HOME_CITY"))
private Address homeAddress;
public class DocumentRepository {
public Stream<Document> findAllAsStream() {
return entityManager
.createQuery("select x from Document x", Document.class)
.getResultStream();
New and noteworthy in JSF 2.3
Java Time Support in <f:convertDateTime>
CDI integration
Deprecate javax.faces.bean
Allow injection of specific JSF artifacts (e.g. FacesContext)
Support CDI injections into converters
What's new and noteworthy in Java EE 8? 9gedoplan.de
<h:outputText id="founded" value="#{countryPresenter.someCountry.founded}">
<f:convertDateTime type="localDate"/>
</h:outputText>
public class Country {
private LocalDate founded;
@FacesConverter(forClass = Country.class, managed = true)
public class CountryConverter implements Converter<Country> {
@Inject
CountryRepository countryRepository;
New and noteworthy in JSF 2.3
Websocket integration
What's new and noteworthy in Java EE 8? 10gedoplan.de
<f:websocket
channel="ticker"
onmessage="function(message) {
document.getElementById('coolNewFeature').value=message;
}" />
<h:inputText id="coolNewFeature" value="" size="25" readonly="true" />
public class TickerEndpoint {
@Inject
@Push(channel = "ticker")
private PushContext channel;
public void tick() {
String message = …
this.channel.send(message);
New and noteworthy in JSF 2.3
Multi-field validation
Use non-default
bean validation
group for one or
more input fields
Use <f:validateWholeBean> after input fields
Enable feature in web.xml
Works by validating a temporary copy
Not working on GlassFish 5 
Incredibly bloated 
What's new and noteworthy in Java EE 8? 11gedoplan.de
<h:inputText value="#{questionnaire.email}">
<f:validateBean validationGroups="InitialInput" />
</h:inputText>
<h:inputText value="#{questionnaire.comment}">
<f:validateBean validationGroups="InitialInput" />
</h:inputText>
<f:validateWholeBean value="#{questionnaire}"
validationGroups="InitialInput" />
New and noteworthy: JSON-B 1.0
Java – JSON binding
Similar to JAXB
Mapping annotations
@JsonbVisibility
@JsonbNillable
@JsonbTransient
@JsonbTypeAdapter
@JsonbDateFormat
@JsonbNumberFormat
What's new and noteworthy in Java EE 8? 12gedoplan.de
@JsonbNillable
public class Country {
private String id;
private String name;
@JsonbTypeAdapter(ContinentConverter.class)
private Continent continent;
@JsonbTransient
private String dummy = "unused";
New and noteworthy: JSON-B 1.0
(De)serialization API: JsonbBuilder, Jsonb
Configuration:
Class level annotations (@JsonbNillable, …)
JsonbConfig
What's new and noteworthy in Java EE 8? 13gedoplan.de
Country country = …
try (Jsonb jsonb = JsonbBuilder.create()) {
String json = jsonb.toJson(country);
…
} String json = …
try (Jsonb jsonb = JsonbBuilder.create()) {
Country country = jsonb.fromJson(json, Country.class);
…
}
JsonbConfig jsonbConfig = new JsonbConfig().withFormatting(true);
Jsonb jsonb = JsonbBuilder.create(jsonbConfig);
New and noteworthy in Servlet 4.0
HTTP/2 support
Header compression
Request multiplexing:
Allow multiple parallel requests on same connection
Server push:
Send content probably needed in advance
In general „behind the scenes“
What's new and noteworthy in Java EE 8? 14gedoplan.de
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
PushBuilder pushBuilder = req.newPushBuilder();
if (pushBuilder != null) {
pushBuilder.path("/dummy.css").push();
}
…
New and noteworthy in JAX-RS 2.1
Reactive client support
What's new and noteworthy in Java EE 8? 15gedoplan.de
Client client= ClientBuilder.newClient();
CompletionStage<String> planetearthCompletionStage = client
.path("http://localhost:8080/whats-new-in-jee8/rest/planetearth")
.request()
.accept(MediaType.TEXT_PLAIN)
.rx()
.get(String.class)
.exceptionally(e -> "the ultimate question of life, the universe, and everything");
New and noteworthy in JAX-RS 2.1
SSE support
What's new and noteworthy in Java EE 8? 16gedoplan.de
@Path("sse")
public class SseResource {
@Context Sse sse;
SseBroadcaster sseBroadcaster;
@PostConstruct
void init() {
this.sseBroadcaster = this.sse.newBroadcaster();
}
@GET
@Produces(MediaType.SERVER_SENT_EVENTS)
public void register(@Context SseEventSink sseEventSink) {
this.sseBroadcaster.register(sseEventSink);
}
public void tick() {
this.sseBroadcaster.broadcast(this.sse.newEvent("Hello, it is " + new Date()));
}
New and noteworthy in JAX-RS 2.1
SSE support
What's new and noteworthy in Java EE 8? 17gedoplan.de
try (SseEventSource sseEventSource = SseEventSource
.target("http://localhost:8080/whats-new-in-jee8/rest/sse")
.build()) {
sseEventSource.register(e -> log.debug("Event received: " + e));
sseEventSource.open();
Odds and ends
JSON-P
JSON-Pointer
JSON-Patch
JSON-Big-Data
Java EE Security API
Authentication Mechanism
Identity Store
Security Context
What's new and noteworthy in Java EE 8? 18gedoplan.de
<TTFN>
 -  = 3 years, 5 months
Evolution or maintenance release?
Implementations
GlassFish 5.0 (big areas nonfunctional)
Payara 5.0.0 (still alpha)
Open Liberty (daily build)
What's new and noteworthy in Java EE 8? 19gedoplan.de
The future …
What's new and noteworthy in Java EE 8? 20gedoplan.de
More
gedoplan-it-consulting.de/expertenkreis-java
Slides
github.com/GEDOPLAN/whats-new-in-jee8
Demo project
www.gedoplan-it-training.de
Trainings in Berlin, Bielefeld, inhouse
www.gedoplan-it-consulting.de
Reviews, Coaching, …
Blog
 dirk.weil@gedoplan.de
@dirkweil
What's new and noteworthy in Java EE 8? 21gedoplan.de

What's new and noteworthy in Java EE 8?

  • 1.
    What's new andnoteworthy in Java EE 8? Expertenkreis Java, 05.12.2017, GEDOPLAN Dirk Weil, GEDOPLAN GmbH
  • 2.
    Dirk Weil GEDOPLAN GmbH,Bielefeld GEDOPLAN IT Consulting Konzeption, Realisierung von IT-Lösungen GEDOPLAN IT Training Seminare in Berlin, Bielefeld, on-site Java EE seit 1998 Vorträge, Veröffentlichungen What's new and noteworthy in Java EE 8? 2gedoplan.de
  • 3.
    New and noteworthyin CDI 2.0 Observer ordering What's new and noteworthy in Java EE 8? 3gedoplan.de @ApplicationScoped public class EventObserver { void a(@Observes @Priority(Interceptor.Priority.APPLICATION + 1) DemoEvent e) { … } void b(@Observes @Priority(Interceptor.Priority.APPLICATION + 2) DemoEvent e) { … } @ApplicationScoped public class EventProducer { @Inject Event<DemoEvent> eventSource; public void fireSyncEvent() { this.eventSource.fire(new DemoEvent());
  • 4.
    New and noteworthyin CDI 2.0 Asynchronuous events What's new and noteworthy in Java EE 8? 4gedoplan.de @ApplicationScoped public class EventObserver { void x(@ObservesAsync DemoEvent e) { … } void y(@ObservesAsync DemoEvent e) { … } @ApplicationScoped public class EventProducer { @Inject Event<DemoEvent> eventSource; public void fireAsyncEvent() { CompletionStage<DemoEvent> completionStage = this.eventSource.fireAsync(new DemoEvent());
  • 5.
    New and noteworthyin CDI 2.0 SE container What's new and noteworthy in Java EE 8? 5gedoplan.de SeContainerInitializer seContainerInitializer = SeContainerInitializer.newInstance(); try (SeContainer container = seContainerInitializer.initialize()) { HelloWorldService helloWorldService = container.select(HelloWorldService.class).get(); this.log.debug(helloWorldService.getHelloWorld()); } <dependency> <groupId>org.jboss.weld.se</groupId> <artifactId>weld-se-shaded</artifactId> <version>3.0.2.Final</version> </dependency> <dependency> <groupId>org.apache.openwebbeans</groupId> <artifactId>openwebbeans-se</artifactId> <version>2.0.2</version> </dependency>
  • 6.
    New and noteworthyin CDI 2.0 Java 8 alignment Repeatable qualifier annotations Instance.stream() Various minor adjustments No context control in SE  What's new and noteworthy in Java EE 8? 6gedoplan.de
  • 7.
    New and noteworthyin Bean Validation 2.0 New constraints @Email, @NotEmpty, @NotBlank, @Positive, @PositiveOrZero, @Negative, @NegativeOrZero, @PastOrPresent, @FutureOrPresent Container element constraints Java 8 alignment Repeatable constraint annotations Support for Java 8 date and time types Support for Optional<T> What's new and noteworthy in Java EE 8? 7gedoplan.de List<@Positive @Max(6) Integer> marks; Optional<@Email String> getEmail() { … }
  • 8.
    New and noteworthyin JPA 2.2 Java 8 alignment Repeatable annotations Support for LocalDate, LocalDateTime, LocalTime, OffsetDateTime, OffsetTime Query.getResultStream() Allow CDI injections into AttributeConverter What's new and noteworthy in Java EE 8? 8gedoplan.de public class Employee { @AttributeOverride(name = "street", column = @Column(name = "HOME_STREET")) @AttributeOverride(name = "zipCode", column = @Column(name = "HOME_ZIPCODE")) @AttributeOverride(name = "city", column = @Column(name = "HOME_CITY")) private Address homeAddress; public class DocumentRepository { public Stream<Document> findAllAsStream() { return entityManager .createQuery("select x from Document x", Document.class) .getResultStream();
  • 9.
    New and noteworthyin JSF 2.3 Java Time Support in <f:convertDateTime> CDI integration Deprecate javax.faces.bean Allow injection of specific JSF artifacts (e.g. FacesContext) Support CDI injections into converters What's new and noteworthy in Java EE 8? 9gedoplan.de <h:outputText id="founded" value="#{countryPresenter.someCountry.founded}"> <f:convertDateTime type="localDate"/> </h:outputText> public class Country { private LocalDate founded; @FacesConverter(forClass = Country.class, managed = true) public class CountryConverter implements Converter<Country> { @Inject CountryRepository countryRepository;
  • 10.
    New and noteworthyin JSF 2.3 Websocket integration What's new and noteworthy in Java EE 8? 10gedoplan.de <f:websocket channel="ticker" onmessage="function(message) { document.getElementById('coolNewFeature').value=message; }" /> <h:inputText id="coolNewFeature" value="" size="25" readonly="true" /> public class TickerEndpoint { @Inject @Push(channel = "ticker") private PushContext channel; public void tick() { String message = … this.channel.send(message);
  • 11.
    New and noteworthyin JSF 2.3 Multi-field validation Use non-default bean validation group for one or more input fields Use <f:validateWholeBean> after input fields Enable feature in web.xml Works by validating a temporary copy Not working on GlassFish 5  Incredibly bloated  What's new and noteworthy in Java EE 8? 11gedoplan.de <h:inputText value="#{questionnaire.email}"> <f:validateBean validationGroups="InitialInput" /> </h:inputText> <h:inputText value="#{questionnaire.comment}"> <f:validateBean validationGroups="InitialInput" /> </h:inputText> <f:validateWholeBean value="#{questionnaire}" validationGroups="InitialInput" />
  • 12.
    New and noteworthy:JSON-B 1.0 Java – JSON binding Similar to JAXB Mapping annotations @JsonbVisibility @JsonbNillable @JsonbTransient @JsonbTypeAdapter @JsonbDateFormat @JsonbNumberFormat What's new and noteworthy in Java EE 8? 12gedoplan.de @JsonbNillable public class Country { private String id; private String name; @JsonbTypeAdapter(ContinentConverter.class) private Continent continent; @JsonbTransient private String dummy = "unused";
  • 13.
    New and noteworthy:JSON-B 1.0 (De)serialization API: JsonbBuilder, Jsonb Configuration: Class level annotations (@JsonbNillable, …) JsonbConfig What's new and noteworthy in Java EE 8? 13gedoplan.de Country country = … try (Jsonb jsonb = JsonbBuilder.create()) { String json = jsonb.toJson(country); … } String json = … try (Jsonb jsonb = JsonbBuilder.create()) { Country country = jsonb.fromJson(json, Country.class); … } JsonbConfig jsonbConfig = new JsonbConfig().withFormatting(true); Jsonb jsonb = JsonbBuilder.create(jsonbConfig);
  • 14.
    New and noteworthyin Servlet 4.0 HTTP/2 support Header compression Request multiplexing: Allow multiple parallel requests on same connection Server push: Send content probably needed in advance In general „behind the scenes“ What's new and noteworthy in Java EE 8? 14gedoplan.de protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { PushBuilder pushBuilder = req.newPushBuilder(); if (pushBuilder != null) { pushBuilder.path("/dummy.css").push(); } …
  • 15.
    New and noteworthyin JAX-RS 2.1 Reactive client support What's new and noteworthy in Java EE 8? 15gedoplan.de Client client= ClientBuilder.newClient(); CompletionStage<String> planetearthCompletionStage = client .path("http://localhost:8080/whats-new-in-jee8/rest/planetearth") .request() .accept(MediaType.TEXT_PLAIN) .rx() .get(String.class) .exceptionally(e -> "the ultimate question of life, the universe, and everything");
  • 16.
    New and noteworthyin JAX-RS 2.1 SSE support What's new and noteworthy in Java EE 8? 16gedoplan.de @Path("sse") public class SseResource { @Context Sse sse; SseBroadcaster sseBroadcaster; @PostConstruct void init() { this.sseBroadcaster = this.sse.newBroadcaster(); } @GET @Produces(MediaType.SERVER_SENT_EVENTS) public void register(@Context SseEventSink sseEventSink) { this.sseBroadcaster.register(sseEventSink); } public void tick() { this.sseBroadcaster.broadcast(this.sse.newEvent("Hello, it is " + new Date())); }
  • 17.
    New and noteworthyin JAX-RS 2.1 SSE support What's new and noteworthy in Java EE 8? 17gedoplan.de try (SseEventSource sseEventSource = SseEventSource .target("http://localhost:8080/whats-new-in-jee8/rest/sse") .build()) { sseEventSource.register(e -> log.debug("Event received: " + e)); sseEventSource.open();
  • 18.
    Odds and ends JSON-P JSON-Pointer JSON-Patch JSON-Big-Data JavaEE Security API Authentication Mechanism Identity Store Security Context What's new and noteworthy in Java EE 8? 18gedoplan.de
  • 19.
    <TTFN>  - = 3 years, 5 months Evolution or maintenance release? Implementations GlassFish 5.0 (big areas nonfunctional) Payara 5.0.0 (still alpha) Open Liberty (daily build) What's new and noteworthy in Java EE 8? 19gedoplan.de
  • 20.
    The future … What'snew and noteworthy in Java EE 8? 20gedoplan.de
  • 21.
    More gedoplan-it-consulting.de/expertenkreis-java Slides github.com/GEDOPLAN/whats-new-in-jee8 Demo project www.gedoplan-it-training.de Trainings inBerlin, Bielefeld, inhouse www.gedoplan-it-consulting.de Reviews, Coaching, … Blog  [email protected] @dirkweil What's new and noteworthy in Java EE 8? 21gedoplan.de