102
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 1

Fifty New Features of Java EE 7 in Fifty Minutes

Embed Size (px)

DESCRIPTION

Fifty New Features of Java EE 7 in Fifty Minutes

Citation preview

Page 1: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 1

Page 2: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 2

50 new features of Java EE 7 in 50 minutes Antonio Goncalves, @agoncal Arun Gupta, @arungupta

Page 3: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 3

#NN: <spec>: <feature>

Page 4: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 4

JAX-RS 2.0

JSON-P 1.0 Web Socket 1.0 Servlet 3.1

JSF 2.2 EL 3.0 JSP JSTL

Bea

n Va

lidat

ion

1.1

Inte

rcep

tors

1.2

CD

I 1.1

Con

curr

ency

1.0

JPA 2.1

JTA 1.2 EJB 3.2 JMS 2.0 Batch 1.0

JCA 1.7

Java EE 7

JavaMail 1.5

Page 5: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 5

JAX-RS 2.0

JSON-P 1.0 Web Socket 1.0 Servlet 3.1

JSF 2.2 EL 3.0 JSP JSTL

Bea

n Va

lidat

ion

1.1

Inte

rcep

tors

1.2

CD

I 1.1

Con

curr

ency

1.0

JPA 2.1

JTA 1.2 EJB 3.2 JMS 2.0 Batch 1.0

JCA 1.7

Java EE 7

JavaMail 1.5

CDI 1.1 (JSR 346)

Page 6: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 6

#01: CDI: Default enabling Finer scanning control

§ Possible values: all, annotated, none!§ all behaves like in Java EE 6 (default if not set)!

<beans ... version="1.1" bean-discovery-mode="all">! <alternatives>! <class>org.agoncal.book.MockGenerator</class>! </alternatives>!</beans>!

Page 7: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 7

#02: CDI: @Vetoed Veto the processing of the class or package

@Vetoed!

public class NonProcessedBean { ...!

}!

!

package-info.java @Vetoed!

package com.non.processed.package;!

Page 8: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 8

JAX-RS 2.0

JSON-P 1.0 Web Socket 1.0 Servlet 3.1

JSF 2.2 EL 3.0 JSP JSTL

Bea

n Va

lidat

ion

1.1

Inte

rcep

tors

1.2

CD

I 1.1

Con

curr

ency

1.0

JPA 2.1

JTA 1.2 EJB 3.2 JMS 2.0 Batch 1.0

JCA 1.7

Java EE 7

JavaMail 1.5

Bean Validation 1.1 (JSR 349)

Page 9: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 9

#03: Bean Validation: Method validation Pre/post conditions on method and constructors

public class CardValidator {!! public CardValidator(@NotNull Algorithm algorithm) {! this.algorithm = algorithm;! }!! @AssertTrue! public Boolean validate(@NotNull CreditCard creditCard) {! return algorithm.validate(creditCard.getNumber());! }!}!

Page 10: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 10

JAX-RS 2.0

JSON-P 1.0 Web Socket 1.0 Servlet 3.1

JSF 2.2 EL 3.0 JSP JSTL

Bea

n Va

lidat

ion

1.1

Inte

rcep

tors

1.2

CD

I 1.1

Con

curr

ency

1.0

JPA 2.1

JTA 1.2 EJB 3.2 JMS 2.0 Batch 1.0

JCA 1.7

Java EE 7

JavaMail 1.5

Interceptors 1.2 (JSR 318)

Page 11: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 11

#04: Interceptors: AroundConstruct Interceptor associated with a constructor

public class LoggingInterceptor {!! @AroundConstruct! private void init(InvocationContext ic) throws Exception{! logger.fine("Entering constructor");! ic.proceed();! logger.fine("Exiting constructor");! }!! @AroundInvoke! public Object logMethod(InvocationContext ic) ... {! // ...! }!}!

Page 12: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 12

#05: Interceptors: @Priority Prioritizing interceptor bindings

§ PLATFORM_BEFORE (0), LIBRARY_BEFORE (1000), APPLICATION (2000), LIBRARY_AFTER (3000), PLATFORM_AFTER (4000)!

@Interceptor!@Loggable!@Priority(Interceptor.Priority.LIBRARY_BEFORE + 10)!public class LoggingInterceptor {!! @AroundInvoke! ...!}!

Page 13: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 13

JAX-RS 2.0

JSON-P 1.0 Web Socket 1.0 Servlet 3.1

JSF 2.2 EL 3.0 JSP JSTL

Bea

n Va

lidat

ion

1.1

Inte

rcep

tors

1.2

CD

I 1.1

Con

curr

ency

1.0

JPA 2.1

JTA 1.2 EJB 3.2 JMS 2.0 Batch 1.0

JCA 1.7

Java EE 7

JavaMail 1.5

Concurrency utilities 1.0 (JSR 236)

Page 14: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 14

#06: Concurrency: ManagedExecutor

§ User threads in Java EE applications § Support simple and advance concurrency design patterns § Extend Concurrency Utilities API from Java SE (JSR 166y)

–  java.util.concurrent package

Page 15: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 15

#06: Concurrency: ManagedExecutor

@Resource ManagedExecutorService executor; !ManagedExecutorService executor = (ManagedExecutorService) ctx .lookup("java:comp/DefaultManagedExecutorService");!

Default ManagedExectuor

Page 16: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 16

#06: Concurrency: ManagedExecutor

<web-app … version="3.1">! <resource-env-ref>! <resource-env-ref-name>! concurrent/myExecutor! </resource-env-ref-name>! <resource-env-ref-type>! javax.enterprise.concurrent.ManagedExecutorService! </resource-env-ref-type>! </resource-env-ref>!</web-app>!

Specify in web.xml

Page 17: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 17

#07: Concurrency: ManagedScheduledExecutor

§ Managed version of ScheduledExecutorService!§ Submit delayed or periodic tasks

@Resource ManagedScheduledExecutorService executor;!

Page 18: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 18

#07: Concurrency: ManagedScheduledExecutor

InitialContext ctx = new InitialContext(); ManagedScheduledExecutorService executor = (ManagedScheduledExecutorService)ctx.lookup( "java:comp/DefaultManagedScheduledExecutorService"); !

§ Can be defined in web.xml as well

Access using JNDI

Page 19: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 19

#07: Concurrency: ManagedScheduledExecutor

§ executor.schedule(new MyCallableTask(), 5, TimeUnit.SECONDS);!

§ executor.scheduleAtFixedRate(new MyRunnableTask(), 2, 3, TimeUnit.SECONDS);!

§ executor.scheduleWithFixedDelay(new MyRunnableTask(), 2, 3, TimeUnit.SECONDS);!

Page 20: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 20

#08: Concurrency: ManagedThreadFactory

§ Extends ThreadFactory @Resource(name = "DefaultManagedThreadFactory") ManagedThreadFactory factory; ManagedThreadFactory factory = (ManagedThreadFactory) ctx.lookup("java:comp/DefaultManagedThreadFactory");

Page 21: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 21

#08: Concurrency: ManagedThreadFactory

§ Thread thread = factory.newThread(new MyTask());

§ ((ManageableThread)thread).isShutdown();

Page 22: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 22

#09: Concurrency: DynamicProxy

§ Create dynamic proxy objects, adds contextual information available for applications running in Java EE environment

§ Classloading, JNDI, Security, …

Page 23: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 23

#09: Concurrency: DynamicProxy

@Resource ContextService service; Runnable proxy = service.createContextualProxy(new MyRunnable(), Runnable.class); Future f = executor.submit(proxy);!

Page 24: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 24

JAX-RS 2.0

JSON-P 1.0 Web Socket 1.0 Servlet 3.1

JSF 2.2 EL 3.0 JSP JSTL

Bea

n Va

lidat

ion

1.1

Inte

rcep

tors

1.2

CD

I 1.1

Con

curr

ency

1.0

JPA 2.1

JTA 1.2 EJB 3.2 JMS 2.0 Batch 1.0

JCA 1.7

Java EE 7

JavaMail 1.5

JPA 2.1 (JSR 338)

Page 25: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 25

#10: JPA: Schema Generation Standardized database schema generation

<persistence ... version="2.1">! <persistence-unit ...>! <properties>! <property name="javax.persistence.schema-generation.scripts.action"! value="drop-and-create"/>! <property name="javax.persistence.schema-generation.scripts.create-target" ! value="create.sql"/>! <property name="javax.persistence.sql-load-script-source" ! value="insert.sql"/>! </properties>!</persistence-unit>!

Page 26: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 26

#11: JPA: @Index Defines additional indexes in schema generation

@Entity!@Table(indexes = {! @Index(columnList = "ISBN"),! @Index(columnList = "NBOFPAGE")!})!public class Book {!! @Id @GeneratedValue! private Long id;! private String isbn;! private Integer nbOfPage;! ...!}!

Page 27: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 27

#12: JPA: Unsynchronized Persistence Context Persistence context is not enlisted in any tx unless explicitly joined

@PersistenceContext(synchronization =! SynchronizationType.UNSYNCHRONIZED)!private EntityManager em;!...!!em.persist(book);!!...!em.joinTransaction();!!

Page 28: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 28

#13: JPA: Stored Procedure Calling a stored procedure

@Entity!@NamedStoredProcedureQuery(name = "archiveOldBooks", ! procedureName = "sp_archive_books",! parameters = {! @StoredProcedureParameter(name = ”date", mode = IN, ! type = Date.class),! @StoredProcedureParameter(name = "warehouse", mode = IN, ! type = String.class)!})!public class Book {...}!

Page 29: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 29

JAX-RS 2.0

JSON-P 1.0 Web Socket 1.0 Servlet 3.1

JSF 2.2 EL 3.0 JSP JSTL

Bea

n Va

lidat

ion

1.1

Inte

rcep

tors

1.2

CD

I 1.1

Con

curr

ency

1.0

JPA 2.1

JTA 1.2 EJB 3.2 JMS 2.0 Batch 1.0

JCA 1.7

Java EE 7

JavaMail 1.5

JTA 1.2 (JSR 907)

Page 30: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 30

#14: JTA: @Transactional Transaction management on Managed Beans as CDI interceptor binding

@Path("book")!@Transactional(value = Transactional.TxType.REQUIRED,! rollbackOn = {SQLException.class, JMSException.class},! dontRollbackOn = SQLWarning.class)!public class BookRestService {!! @PersistenceContext! private EntityManager em;!! @POST! @Consumes(MediaType.APPLICATION_XML)! public Response createBook(Book book) {...}!}!

Page 31: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 31

#15: JTA: @TransactionScoped CDI scope whose lifecycle is scoped to the currently active JTA transaction

@TransactionScoped!public class BookBean {...}!!@WebServlet!public class TxServlet extends HttpServlet {! @Inject UserTransaction tx;! @Inject BookBean b1;! @Inject BookBean b2;!! protected void processRequest(...) {! tx.begin();! s_out.println(b1.getReference());! s_out.println(b2.getReference());! tx.commit();! }!}!

Page 32: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 32

JAX-RS 2.0

JSON-P 1.0 Web Socket 1.0 Servlet 3.1

JSF 2.2 EL 3.0 JSP JSTL

Bea

n Va

lidat

ion

1.1

Inte

rcep

tors

1.2

CD

I 1.1

Con

curr

ency

1.0

JPA 2.1

JTA 1.2 EJB 3.2 JMS 2.0 Batch 1.0

JCA 1.7

Java EE 7

JavaMail 1.5

EJB 3.2 (JSR 345)

Page 33: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 33

#16: EJB: Disable passivation of stateful In some cases increases performance, scalability and robustness

@Stateful(passivationCapable = false)!public class ShoppingCart {! ...!}!

Page 34: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 34

#17: EJB-Lite: Async + Non-persistent timer Extended the EJB Lite to include local asynchronous invocations and non-persistent EJB Timer Service

@Stateless!public class OrderEJB {!! @Asynchronous! public void sendEmail (Order order) {! // Very Long task! }! ! @Schedule(hour="2", persistent=false)! public void createDailyReport() {! // ...! }!}!

Page 35: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 35

JAX-RS 2.0

JSON-P 1.0 Web Socket 1.0 Servlet 3.1

JSF 2.2 EL 3.0 JSP JSTL

Bea

n Va

lidat

ion

1.1

Inte

rcep

tors

1.2

CD

I 1.1

Con

curr

ency

1.0

JPA 2.1

JTA 1.2 EJB 3.2 JMS 2.0 Batch 1.0

JCA 1.7

Java EE 7

JavaMail 1.5

JMS 2.0 (JSR 343)

Page 36: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 36

#18: JMS: JMSContext API New simplified API to produce and consume messages

JMSContext ctx = connectionFactory.createContext()!!ctx.createProducer().send(queue, "Text message sent");!!ctx.createConsumer(queue).receiveBody(String.class);!!ctx.createProducer()! .setPriority(2)! .setTimeToLive(1000)! .setDeliveryMode(DeliveryMode.NON_PERSISTENT)! .send(queue, message);!

Page 37: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 37

#19: JMS: Autocloseable Several JMS interfaces implement Autocloseable

try (JMSContext ctx = connectionFactory.createContext()) {! ctx.createProducer().send(queue, "Text message sent");!}!!...!!try (JMSContext ctx = connectionFactory.createContext()) {! while (true) {! String s = ctx.createConsumer(queue).receiveBody(String.class);! }!}!

Page 38: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 38

#20: JMS: JMSConnectionFactoryDefinition A JMS ConnectionFactory can be defined using an annotation on a container-managed class

@Stateless!@JMSConnectionFactoryDefinition(! name = "java:app/jms/MyConnectionFactory",! interfaceName = "javax.jms.TopicConnectionFactory")! ! ! !public class ExpensiveOrderEJB {...}!

Page 39: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 39

#21: JMS: JMSDestinationDefinition A JMS queue or topic can be defined using an annotation

@Stateless!@JMSConnectionFactoryDefinition(! name = "java:app/jms/MyConnectionFactory",! interfaceName = "javax.jms.TopicConnectionFactory")!@JMSDestinationDefinition(! name = "java:app/jms/MyTopic",! interfaceName = "javax.jms.Topic")!public class ExpensiveOrderEJB {...}!

Page 40: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 40

JAX-RS 2.0

JSON-P 1.0 Web Socket 1.0 Servlet 3.1

JSF 2.2 EL 3.0 JSP JSTL

Bea

n Va

lidat

ion

1.1

Inte

rcep

tors

1.2

CD

I 1.1

Con

curr

ency

1.0

JPA 2.1

JTA 1.2 EJB 3.2 JMS 2.0 Batch 1.0

JCA 1.7

Java EE 7

JavaMail 1.5

Servlet 3.1 (JSR 340)

Page 41: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 41

#22: Servlet: Non-blocking I/O

public class TestServlet extends HttpServlet protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { ServletInputStream input = request.getInputStream(); byte[] b = new byte[1024]; int len = -1; while ((len = input.read(b)) != -1) { . . . } } }!

Page 42: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 42

#22: Servlet: Non-blocking I/O

§ ServletInputStream!–  public void setReadListener(ReadListener listener);!–  public boolean isFinished();!

–  public boolean isReady();!

§ ServletOutputStream!–  public setWriteListener(WriteListener listener);!

–  public boolean canWrite();!

New methods to existing interfaces

Page 43: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 43

#22: Servlet: Non-blocking I/O

public interface ReadListener extends EventListener { public void onDataAvailable(); pubic void onAllDataRead(); public void onError(); }!

public interface WriteListener extends EventListener { public void onWritePossible(); public void onError(); }!

New interfaces

Page 44: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 44

#22: Servlet: Non-blocking I/O

AsyncContext context = request.startAsync(); ServletInputStream input = request.getInputStream(); input.setReadListener( new MyReadListener(input, context)); !

Only for Asynchronous Servlets

Page 45: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 45

#23: Servlet: Protocol Upgrade

§ <T extends HttpUpgradeHandler> T HttpServletRequest.upgrade(Class<T> class) throws IOException; !

§ HttpUpgradeHandler!–  init(WebConnection wc);!–  destroy();!

Page 46: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 46

#23: Servlet: Protocol Upgrade

public interface WebConnection { ServletInputStream getInputStream(); ServletOutputStream getOutputStream(); }!

Page 47: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 47

#24: Servlet: Improved Security

<web-app . . . version="3.1"> <web-resource-collection> <url-pattern>/account/*</url-pattern> <http-method>GET</http-method> </web-resource-collection> </web-app> !

!

Deny an HTTP method request for an uncovered HTTP method

Page 48: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 48

#24: Servlet: Improved Security

<web-app . . . version="3.1"> <deny-uncovered-http-methods/> <web-resource-collection> <url-pattern>/account/*</url-pattern> <http-method>GET</http-method> </web-resource-collection> </web-app> !

!

Deny an HTTP method request for an uncovered HTTP method

Page 49: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 49

JAX-RS 2.0

JSON-P 1.0 Web Socket 1.0 Servlet 3.1

JSF 2.2 EL 3.0 JSP JSTL

Bea

n Va

lidat

ion

1.1

Inte

rcep

tors

1.2

CD

I 1.1

Con

curr

ency

1.0

JPA 2.1

JTA 1.2 EJB 3.2 JMS 2.0 Batch 1.0

JCA 1.7

Java EE 7

JavaMail 1.5

Web Socket 1.0 (JSR 356)

Page 50: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 50

#25: WebSocket: Annotated server endpoint

§ Enables full-duplex bi-directional communication over single TCP connection @javax.websocket.server.ServerEndpoint("/chat") public class ChatServer { @OnMessage public String chat(String name, Session session) { for (Session peer : client.getOpenSessions()) {! peer.getBasicRemote().sendObject(message);! } } }!

Page 51: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 51

#26: WebSocket: Lifecycle callbacks

@javax.websocket.OnOpen public void open(Session s) { . . . } @javax.websocket.OnClose public void close(CloseReason c) { . . . } @javax.websocket.OnError public void error(Throwable t) { . . . }!

Page 52: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 52

#27: WebSocket: Annotated client endpoint

@javax.websocket.ClientEndpoint public class MyClient { @javax.websocket.OnOpen public void open(Session session) { … } // Lifecycle callbacks }!

Page 53: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 53

#27: WebSocket: Annotated client endpoint

ContainerProvider .getWebSocketContainer() .connectToServer( MyClient.class, URI.create("ws://. . ."));!

Page 54: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 54

#28: WebSocket: Programmatic endpoints

public class ChatServer extends Endpoint { @Override public void onOpen(Session s, EndpointConfig ec) { s.addMessageHandler(new MessageHandler.Whole<String>() { public void onMessage(String text) { . . . } } } @Override public void onClose(Session s, CloseReason cr) { . . . } //. . . }!

Page 55: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 55

#28: WebSocket: Programmatic endpoints

public class MyApplicationConfig implements ServerApplicationConfig { public Set<ServerEndpointConfig> getEndpointConfigs(…) { ServerEndpointConfig.Builder .create(MyEndpoint.class, "/websocket”) .configurator(new MyConfig()) .build() } }!

Page 56: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 56

#28: WebSocket: Programmatic endpoints

public class MyConfig extends ServerEndpointConfig.Configurator { public <T> T getEndpointInstance(. . .) { . . . } public void modifyHandshake(. . .) { . . . } . . . }!

Page 57: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 57

#29: WebSocket: Encoder and Decoder

@javax.websocket.server.ServerEndpoint( value="/chat", decoders="MyDecoder.class", encoders="MyEncoder.class") public class ChatServer { @OnMessage public String chat(ChatMessage name, Session session) { . . . } }!

Page 58: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 58

#29: WebSocket: Encoder and Decoder

public class MyDecoder implements Decoder.Text<ChatMessage> { public ChatMessage decode(String s) { // . . . } public boolean willDecode(String string) { // . . . } //. . . } !

Page 59: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 59

#29: WebSocket: Encoder and Decoder

public class MyEncoder implements Encoder.Text<ChatMessage> { public String encode(ChatMessage chatMessage) { // . . . } !

// . . . }!

Page 60: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 60

JAX-RS 2.0

JSON-P 1.0 Web Socket 1.0 Servlet 3.1

JSF 2.2 EL 3.0 JSP JSTL

Bea

n Va

lidat

ion

1.1

Inte

rcep

tors

1.2

CD

I 1.1

Con

curr

ency

1.0

JPA 2.1

JTA 1.2 EJB 3.2 JMS 2.0 Batch 1.0

JCA 1.7

Java EE 7

JavaMail 1.5

Expression Language 3.0 (JSR 341)

Page 61: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 61

#30: Expression Langauge: ELProcessor

§ Use EL in a stand-alone environment –  Evaluate EL expressions –  Get/set bean properties –  Defining a static method as an EL function –  Defining an object instance as an EL name

ELProcessor elp = new ELProcessor(); elp.defineBean("employee", new Employee("Charlie Brown")); String name = elp.eval("employee.name");!

Page 62: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 62

JAX-RS 2.0

JSON-P 1.0 Web Socket 1.0 Servlet 3.1

JSF 2.2 EL 3.0 JSP JSTL

Bea

n Va

lidat

ion

1.1

Inte

rcep

tors

1.2

CD

I 1.1

Con

curr

ency

1.0

JPA 2.1

JTA 1.2 EJB 3.2 JMS 2.0 Batch 1.0

JCA 1.7

Java EE 7

JavaMail 1.5

JSF 2.2 (JSR 344)

Page 63: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 63

#31: JSF: Faces Flow

./src/main/webapp/flow1 /flow1.xhtml /flow1a.xhtml /flow1b.xhtml ./src/main/webapp/flow2 /flow2-flow.xml /flow2.xhtml /flow2a.xhtml /flow2b.xhtml /index.xhtml!

Package reusable flows in JAR

Page 64: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 64

#31: JSF: Faces Flow

@Named @FlowScoped("flow1") public class Flow1Bean implements Serializable { }!

!

@Produces @FlowDefinition public Flow defineFlow(@FlowBuilderParameter FlowBuilder fb) { String flowId = "flow1"; //. . . return fb.getFlow(); }!

Package reusable flows in JAR

Page 65: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 65

#31: JSF: Faces Flow Package reusable flows in JAR

#{flowScope}: Local flow storage #{facesContext.application.flowHandler.currentFlow}: Returns true if within a flow

Page 66: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 66

#32: JSF: Resource Library Contract

index-blue.xhtml index-red.xhtml WEB-INF/lib/contracts-library-1.0-SNAPSHOT.jar /META-INF/contracts/blue /style.css /javax.faces.contract.xml /template.xhtml /META-INF/contracts/red /style.css /javax.faces.contract.xml /template.xhtml!

Apply templates in a reusable and interchangeable manner

Page 67: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 67

#32: JSF: Resource Library Contract

<f:view contracts=”red”> <ui:composition template="/template.xhtml"> . . . </ui:composition> </f:view> !

Apply templates in a reusable and interchangeable manner

Page 68: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 68

#33: JSF: Pass-through Attributes

<h:inputText type="email" value="#{user.email}"/> !

<input type="text" name="j_idt6:j_idt10"/>!

HTML5-Friendly Markup

<h:inputText p:type="email" value="#{user.email}"/> <input type="email" name="j_idt6:j_idt10"/>!!

Page 69: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 69

#34: JSF: File Upload Component

<h:form enctype="multipart/form-data"> <h:inputFile value="#{fileUploadBean.file}"/><br/> <h:commandButton value="Upload"/><p/> </h:form> !

@Named @RequestScoped public class FileUploadBean { private Part file; //getter and setter } !

Page 70: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 70

JAX-RS 2.0

JSON-P 1.0 Web Socket 1.0 Servlet 3.1

JSF 2.2 EL 3.0 JSP JSTL

Bea

n Va

lidat

ion

1.1

Inte

rcep

tors

1.2

CD

I 1.1

Con

curr

ency

1.0

JPA 2.1

JTA 1.2 EJB 3.2 JMS 2.0 Batch 1.0

JCA 1.7

Java EE 7

JavaMail 1.5

JAX-RS 2.0 (JSR 339)

Page 71: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 71

#35: JAX-RS: Client API New API to consume rest services

Client client = ClientBuilder.newClient();!WebTarget target = client.target("http://www.foo.com/book");!Invocation invocation = target.request(TEXT_PLAIN).buildGet();!Response response = invocation.invoke();!!Response response = ClientBuilder.newClient()! .target("http://www.foo.com/book")! .request(MediaType.TEXT_PLAIN)! .get();!!String body = ClientBuilder.newClient()! .target("http://www.foo.com/book")! .request()! .get(String.class);!

Page 72: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 72

#36: JAX-RS: Async Client The client API also supports asynchronous invocation

Future<String> future = ClientBuilder.newClient()! .target("http://www.foo.com/book")! .request()! .async()! .get(String.class);!!try {! String body = future.get(1, TimeUnit.MINUTES);!} catch (InterruptedException | ExecutionException e) {...}!

Page 73: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 73

#37: JAX-RS: Async Server Asynchronous request processing on the server

@Path("/async")!public class AsyncResource {!! @GET! public void asyncGet(@Suspended AsyncResponse asyncResp) {! ! new Thread(new Runnable() {!! public void run() {! String result = veryExpensiveOperation();! asyncResp.resume(result);! }! }).start();! }}!

Page 74: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 74

#38: JAX-RS: Message Filter Used to process incoming and outgoing request or response headers

§ Filters on client side –  ClientRequestFilter!–  ClientResponseFilter!

§ Filters on server side –  ContainerRequestFilter!–  ContainerResponseFilter!

Page 75: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 75

#38: JAX-RS: Message Filter Used to process incoming and outgoing request or response headers

public class LogginFilter implements ClientRequestFilter {!! public void filter(ClientRequestContext ctx) throws IOException {! System.out.println(ctx.getMethod());! System.out.println(ctx.getUri());! }!}!

Page 76: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 76

#39: JAX-RS: Entity Interceptors Marshalling and unmarshalling HTTP message bodies

§  Intercepts inbound entity streams (read from the “wire”) –  ReaderInterceptor!

§  Intercepts outbound entity streams (written to the “wire”) –  WriterInterceptor!

Page 77: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 77

#39: JAX-RS: Entity Interceptors Marshalling and unmarshalling HTTP message bodies

public class GZipInterceptor implements WriterInterceptor {!! public void aroundWriteTo(WriterInterceptorContext ctx){! OutputStream os = ctx.getOutputStream();! ctx.setOutputStream(new GZIPOutputStream(os));! ctx.proceed();! }!}!

Page 78: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 78

JAX-RS 2.0

JSON-P 1.0 Web Socket 1.0 Servlet 3.1

JSF 2.2 EL 3.0 JSP JSTL

Bea

n Va

lidat

ion

1.1

Inte

rcep

tors

1.2

CD

I 1.1

Con

curr

ency

1.0

JPA 2.1

JTA 1.2 EJB 3.2 JMS 2.0 Batch 1.0

JCA 1.7

Java EE 7

JavaMail 1.5

JSON-P 1.0 (JSR 353)

Page 79: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 79

#40: JSON-P: JSON Builder Creates an object model (or an array) in memory by adding elements

JsonObject value = Json.createObjectBuilder()! .add("id", "1234")! .add("date", "19/09/2012")! .add("total_amount", "93.48")! .add("customer", Json.createObjectBuilder()! .add("first_name", "James")! .add("last_name", "Rorrison")! .add("email", "[email protected]")! .add("phoneNumber", "+44 1234 1234")! )! .build();!

Page 80: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 80

#41: JSON-P: JsonParser Event-based parser that can read JSON data from a stream

JsonParser parser = Json.createParser(new FileReader(“order.json"));!while (parser.hasNext()) {! JsonParser.Event event = parser.next();!! if (event.equals(JsonParser.Event.KEY_NAME) && ! parser.getString().matches("email")) {! parser.next();! email = parser.getString();! }!}!

Page 81: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 81

JAX-RS 2.0

JSON-P 1.0 Web Socket 1.0 Servlet 3.1

JSF 2.2 EL 3.0 JSP JSTL

Bea

n Va

lidat

ion

1.1

Inte

rcep

tors

1.2

CD

I 1.1

Con

curr

ency

1.0

JPA 2.1

JTA 1.2 EJB 3.2 JMS 2.0 Batch 1.0

JCA 1.7

Java EE 7

JavaMail 1.5

Batch 1.0 (JSR 352)

Page 82: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 82

#42: Batch: Chunk-style Processing Item-oriented Processing Style (primary)

Page 83: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 83

#42: Batch: Chunk-style Processing

<step id=”sendStatements”>! <chunk item-count=“3”> <reader ref=”accountReader”/>! <processor ref=”accountProcessor”/> <writer ref=”emailWriter”/>!</step>!

…implements ItemReader { public Object readItem() { // read account using JPA!}!!

…implements ItemProcessor {!public Object processItems(Object account) { // read Account, return Statement!}!!

…implements ItemWriter {!public void writeItems(List accounts) { // use JavaMail to send email!}!!

Page 84: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 84

#43: Batch: Batchlet-style Processing Task-oriented processing style

<step id=”transferFile”>! <batchlet ref=“MyFileTransfer” />!</step>!

…implements Batchlet {!@Override public void process() { // Transfer file!}!!

Page 85: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 85

#44: Batch: Job/Step/Chunk Listeners

<job id="myJob" xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="1.0”> <listeners> <listener ref="myJobListener"/> </listeners> <step id="myStep" > <listeners> <listener ref="myStepListener"/> <listener ref="myChunkListener"/> <listener ref="myItemReadListener"/> <listener ref="myItemProcessorListener"/> <listener ref="myItemWriteListener"/> </listeners> <chunk item-count="3”>. . .</chunk> </step> </job>!

!

Page 86: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 86

#44: Batch: Job/Step/Chunk Listeners

Interface Abstract Classes

JobListener! AbstractJobListener!

StepListener! AbstractStepListener!

ChunkListener! AbstractChunkListener!

ItemRead/Write/ProcessListener! AbstractItemRead/Write/ProcessListener!

SkipRead/Write/ProcessListener! AbstractSkipRead/Write/ProcessListener!

RetryRead/Write/ProcessListener! AbstractRetryRead/Write/ProcessListener!

Page 87: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 87

#44: Batch: Job/Step/Chunk Listeners

@Named public class MyJobListener extends AbstractJobListener { @Override public void beforeJob() throws Exception { . . . } @Override public void afterJob() throws Exception { . . . } }!

Page 88: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 88

#45: Batch: Partition

<step> <chunk item-count="3"> <reader ref="myItemReader"> <properties> <property name="start" value="#{partitionPlan['start']}"/> <property name="end" value="#{partitionPlan['end']}"/> </properties> </reader> . . . </chunk>!

Page 89: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 89

#45: Batch: Partition

<partition> <plan partitions="2"> <properties partition="0"> <property name="start" value="1"/> <property name="end" value="10"/> </properties> <properties partition="1"> <property name="start" value="11"/> <property name="end" value="20"/> </properties> </plan> </partition> </step>!

Page 90: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 90

#46: Batch: Creating Workflows

<flow id="flow1" next="step3"> <step id="step1" next="step2"> . . . </step> <step id="step2"> . . . </step> </flow> <step id="step3"> . . . </step>!

Flow: Elements that execute together as a unit

Page 91: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 91

#46: Batch: Creating Workflows

<split id="split1" next=" . . . "> <flow id="flow1”> <step id="step1”> . . . </step> </flow> <flow id="flow2”> <step id="step2”> . . . </step> </flow> </split>!

Split: Concurrent execution of flows

Page 92: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 92

#46: Batch: Creating Workflows

<step id="step1" next="decider1">. . .</step> <decision id="decider1" ref="myDecider"> <next on="DATA_LOADED" to="step2"/> <end on="NOT_LOADED"/> </decision> <step id="step2">. . .</step> !

!

Decision: Customized way of sequencing between steps, flows, splits

@Named public class MyDecider implements Decider { @Override public String decide(StepExecution[] ses) throws Exception { . . . return "DATA_LOADED"; // or "NOT_LOADED"! } !}!

Page 93: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 93

JAX-RS 2.0

JSON-P 1.0 Web Socket 1.0 Servlet 3.1

JSF 2.2 EL 3.0 JSP JSTL

Bea

n Va

lidat

ion

1.1

Inte

rcep

tors

1.2

CD

I 1.1

Con

curr

ency

1.0

JPA 2.1

JTA 1.2 EJB 3.2 JMS 2.0 Batch 1.0

JCA 1.7

Java EE 7

JavaMail 1.5

JavaMail 1.5 (JSR 919)

Page 94: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 94

#48: JavaMail

@MailSessionDefinition(name = "java:comp/myMailSession", properties = { "mail.smtp.host=smtp.gmail.com", "mail.smtp.ssl.enable=true", "mail.smtp.auth=true", "mail.transport.protocol=smtp", "mail.debug=true" }) @Resource(lookup = "java:comp/myMailSession") Session session;!

Page 95: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 95

JAX-RS 2.0

JSON-P 1.0 Web Socket 1.0 Servlet 3.1

JSF 2.2 EL 3.0 JSP JSTL

Bea

n Va

lidat

ion

1.1

Inte

rcep

tors

1.2

CD

I 1.1

Con

curr

ency

1.0

JPA 2.1

JTA 1.2 EJB 3.2 JMS 2.0 Batch 1.0

JCA 1.7

Java EE 7

JavaMail 1.5

JCA 1.7 (JSR 322)

Page 96: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 96

#49: Java Connector Architecture

@ConnectionDefinition( connection="MyConnection.class", connectionImpl="MyConnectionImpl.class", connectionFactory="MyConnectionFactory.class", connectionFactoryImpl="MyConnectionFactoryImpl.class" ) !

@AdministeredObjectDefinition( className="MyQueueImpl.class", name="java:comp/MyQueue", resourceAdapter="myAdapter", )!

Page 97: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 97

#47: Default Resources

JNDI name: java:comp/DefaultDataSource

Default Data Source

@Resource(lookup="java:comp/DefaultDataSource") DataSource myDS; !

@Resource DataSource myDS; !

Page 98: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 98

JAX-RS 2.0

JSON-P 1.0 Web Socket 1.0 Servlet 3.1

JSF 2.2 EL 3.0 JSP JSTL

Bea

n Va

lidat

ion

1.1

Inte

rcep

tors

1.2

CD

I 1.1

Con

curr

ency

1.0

JPA 2.1

JTA 1.2 EJB 3.2 JMS 2.0 Batch 1.0

JCA 1.7

Java EE 7

JavaMail 1.5

Java EE 7 (JSR 342)

Page 99: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 99

#47: Default Resources

JNDI name: java:comp/DefaultJMSConnectionFactory @Resource(lookup="java:comp/DefaultJMSConnectionFactory") ConnectionFactory myCF; @Resource ConnectionFactory myCF;!

Default JMS Connection Factory

Page 100: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 100

#47: Default Resources

JNDI names § java:comp/DefaultManagedExecutorService!§ java:comp/DefaultManagedScheduledExecutorService!§ java:comp/DefaultManagedThreadFactory!§ java:comp/DefaultContextService!

Default Concurrency Utilities Objects

Page 101: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 101

#50: Buy our books!

Page 102: Fifty New Features of Java EE 7 in Fifty Minutes

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 102

DOWNLOAD Java EE 7 SDK oracle.com/javaee

GlassFish 4.0 Full Platform or Web Profile glassfish.org