1
#javaland #javaee7
50 new features
of
Java EE 7
in
50 minutes
Antonio Goncalves, @agoncal
Arun Gupta, @arungupta
43
2
#javaland #javaee7
#NN: <spec>: <feature>
3
#javaland #javaee7
JAX-RS 2.0
JSON-P 1.0
Web Socket 1.0Servlet 3.1
JSF 2.2EL 3.0
JSP
JSTLBeanValidation1.1
Interceptors1...
4
#javaland #javaee7
JAX-RS 2.0
JSON-P 1.0
Web Socket 1.0Servlet 3.1
JSF 2.2EL 3.0
JSP
JSTLBeanValidation1.1
Interceptors1...
5
#javaland #javaee7
#01: CDI: Default enabling
Finer scanning control
§  Possible values: all, annotated, none!
§  all ...
6
#javaland #javaee7
#02: CDI: @Vetoed
Veto the processing of the class or package
@Vetoed!
public class NonProcessedBean ...
7
#javaland #javaee7
JAX-RS 2.0
JSON-P 1.0
Web Socket 1.0Servlet 3.1
JSF 2.2EL 3.0
JSP
JSTLBeanValidation1.1
Interceptors1...
8
#javaland #javaee7
#03: Bean Validation: Method validation
Pre/post conditions on method and constructors
public class C...
9
#javaland #javaee7
JAX-RS 2.0
JSON-P 1.0
Web Socket 1.0Servlet 3.1
JSF 2.2EL 3.0
JSP
JSTLBeanValidation1.1
Interceptors1...
10
#javaland #javaee7
#04: Interceptors: AroundConstruct
Interceptor associated with a constructor
public class LoggingInt...
11
#javaland #javaee7
#05: Interceptors: @Priority
Prioritizing interceptor bindings
§  PLATFORM_BEFORE (0), LIBRARY_BEFO...
12
#javaland #javaee7
JAX-RS 2.0
JSON-P 1.0
Web Socket 1.0Servlet 3.1
JSF 2.2EL 3.0
JSP
JSTLBeanValidation1.1
Interceptors...
13
#javaland #javaee7
#06: Concurrency: ManagedExecutor
§  User threads in Java EE applications
§  Support simple and ad...
14
#javaland #javaee7
#06: Concurrency: ManagedExecutor
@Resource

ManagedExecutorService executor;

!


ManagedExecutorSe...
15
#javaland #javaee7
#06: Concurrency: ManagedExecutor
<web-app … version="3.1">!
<resource-env-ref>!
<resource-env-ref-n...
16
#javaland #javaee7
#07: Concurrency: ManagedScheduledExecutor
§  Managed version of ScheduledExecutorService!
§  Subm...
17
#javaland #javaee7
#07: Concurrency: ManagedScheduledExecutor
InitialContext ctx = new InitialContext(); 



ManagedSch...
18
#javaland #javaee7
#07: Concurrency: ManagedScheduledExecutor
§  executor.schedule(new MyCallableTask(), 5,
TimeUnit.S...
19
#javaland #javaee7
#08: Concurrency: ManagedThreadFactory
§  Extends ThreadFactory
@Resource(name = "DefaultManagedThr...
20
#javaland #javaee7
#08: Concurrency: ManagedThreadFactory
§  Thread thread = factory.newThread(new MyTask());
§  ((Ma...
21
#javaland #javaee7
#09: Concurrency: DynamicProxy
§  Create dynamic proxy objects, adds contextual information availab...
22
#javaland #javaee7
#09: Concurrency: DynamicProxy
@Resource

ContextService service;





Runnable proxy = service.crea...
23
#javaland #javaee7
JAX-RS 2.0
JSON-P 1.0
Web Socket 1.0Servlet 3.1
JSF 2.2EL 3.0
JSP
JSTLBeanValidation1.1
Interceptors...
24
#javaland #javaee7
#10: JPA: Schema Generation
Standardized database schema generation
<persistence ... version="2.1">!...
25
#javaland #javaee7
#11: JPA: @Index
Defines additional indexes in schema generation
@Entity!
@Table(indexes = {!
@Index...
26
#javaland #javaee7
#12: JPA: Unsynchronized Persistence Context
Persistence context is not enlisted in any tx unless ex...
27
#javaland #javaee7
#13: JPA: Stored Procedure
Calling a stored procedure
@Entity!
@NamedStoredProcedureQuery(name = "ar...
28
#javaland #javaee7
JAX-RS 2.0
JSON-P 1.0
Web Socket 1.0Servlet 3.1
JSF 2.2EL 3.0
JSP
JSTLBeanValidation1.1
Interceptors...
29
#javaland #javaee7
#14: JTA: @Transactional
Transaction management on Managed Beans as CDI interceptor binding
@Path("b...
30
#javaland #javaee7
#15: JTA: @TransactionScoped
CDI scope whose lifecycle is scoped to the currently active JTA
transac...
31
#javaland #javaee7
JAX-RS 2.0
JSON-P 1.0
Web Socket 1.0Servlet 3.1
JSF 2.2EL 3.0
JSP
JSTLBeanValidation1.1
Interceptors...
32
#javaland #javaee7
#16: EJB: Disable passivation of stateful
In some cases increases performance, scalability and robus...
33
#javaland #javaee7
#17: EJB-Lite: Async + Non-persistent timer
Extended the EJB Lite to include local asynchronous invo...
34
#javaland #javaee7
JAX-RS 2.0
JSON-P 1.0
Web Socket 1.0Servlet 3.1
JSF 2.2EL 3.0
JSP
JSTLBeanValidation1.1
Interceptors...
35
#javaland #javaee7
#18: JMS: JMSContext API
New simplified API to produce and consume messages
JMSContext ctx = connect...
36
#javaland #javaee7
#19: JMS: Autocloseable
Several JMS interfaces implement Autocloseable
try (JMSContext ctx = connect...
37
#javaland #javaee7
#20: JMS: JMSConnectionFactoryDefinition
A JMS ConnectionFactory can be defined using an annotation ...
38
#javaland #javaee7
#21: JMS: JMSDestinationDefinition
A JMS queue or topic can be defined using an annotation
@Stateles...
39
#javaland #javaee7
JAX-RS 2.0
JSON-P 1.0
Web Socket 1.0Servlet 3.1
JSF 2.2EL 3.0
JSP
JSTLBeanValidation1.1
Interceptors...
40
#javaland #javaee7
#22: Servlet: Non-blocking I/O
public class TestServlet extends HttpServlet

protected void doGet(Ht...
41
#javaland #javaee7
#22: Servlet: Non-blocking I/O
§  ServletInputStream!
–  public void setReadListener(ReadListener l...
42
#javaland #javaee7
#22: Servlet: Non-blocking I/O
public interface ReadListener extends EventListener {

public void on...
43
#javaland #javaee7
#22: Servlet: Non-blocking I/O
AsyncContext context = request.startAsync();

ServletInputStream inpu...
44
#javaland #javaee7
#23: Servlet: Protocol Upgrade
§  <T extends HttpUpgradeHandler> T
HttpServletRequest.upgrade(Class...
45
#javaland #javaee7
#23: Servlet: Protocol Upgrade
public interface WebConnection {

ServletInputStream getInputStream()...
46
#javaland #javaee7
#24: Servlet: Improved Security
<web-app . . . version="3.1"> 

<web-resource-collection>

<url-patt...
47
#javaland #javaee7
#24: Servlet: Improved Security
<web-app . . . version="3.1"> 

<deny-uncovered-http-methods/>

<web...
48
#javaland #javaee7
JAX-RS 2.0
JSON-P 1.0
Web Socket 1.0Servlet 3.1
JSF 2.2EL 3.0
JSP
JSTLBeanValidation1.1
Interceptors...
49
#javaland #javaee7
#25: WebSocket: Annotated server endpoint
§  Enables full-duplex bi-directional communication over ...
50
#javaland #javaee7
#26: WebSocket: Lifecycle callbacks
@javax.websocket.OnOpen

public void open(Session s) { . . . }

...
51
#javaland #javaee7
#27: WebSocket: Annotated client endpoint
@javax.websocket.ClientEndpoint

public class MyClient {

...
52
#javaland #javaee7
#27: WebSocket: Annotated client endpoint
ContainerProvider

.getWebSocketContainer()

.connectToSer...
53
#javaland #javaee7
#28: WebSocket: Programmatic endpoints
public class ChatServer extends Endpoint {

@Override

public...
54
#javaland #javaee7
#28: WebSocket: Programmatic endpoints
public class MyApplicationConfig implements
ServerApplication...
55
#javaland #javaee7
#28: WebSocket: Programmatic endpoints
public class MyConfig extends ServerEndpointConfig.Configurat...
56
#javaland #javaee7
#29: WebSocket: Encoder and Decoder
@javax.websocket.server.ServerEndpoint(

value="/chat",

decoder...
57
#javaland #javaee7
#29: WebSocket: Encoder and Decoder
public class MyDecoder implements Decoder.Text<ChatMessage> {

p...
58
#javaland #javaee7
#29: WebSocket: Encoder and Decoder
public class MyEncoder implements Encoder.Text<ChatMessage> {


...
59
#javaland #javaee7
JAX-RS 2.0
JSON-P 1.0
Web Socket 1.0Servlet 3.1
JSF 2.2EL 3.0
JSP
JSTLBeanValidation1.1
Interceptors...
60
#javaland #javaee7
#30: Expression Langauge: ELProcessor
§  Use EL in a stand-alone environment
–  Evaluate EL express...
61
#javaland #javaee7
JAX-RS 2.0
JSON-P 1.0
Web Socket 1.0Servlet 3.1
JSF 2.2EL 3.0
JSP
JSTLBeanValidation1.1
Interceptors...
62
#javaland #javaee7
#31: JSF: Faces Flow
./src/main/webapp/flow1

/flow1.xhtml

/flow1a.xhtml

/flow1b.xhtml

./src/main...
63
#javaland #javaee7
#31: JSF: Faces Flow
@Named

@FlowScoped("flow1")

public class Flow1Bean implements Serializable {
...
64
#javaland #javaee7
#31: JSF: Faces Flow
Package reusable flows in JAR
#{flowScope}: Local flow storage
#{facesContext.a...
65
#javaland #javaee7
#32: JSF: Resource Library Contract
index-blue.xhtml

index-red.xhtml

WEB-INF/lib/contracts-library...
66
#javaland #javaee7
#32: JSF: Resource Library Contract
<f:view contracts=”red”>

<ui:composition template="/template.xh...
67
#javaland #javaee7
#33: JSF: Pass-through Attributes
<h:inputText type="email" value="#{user.email}"/> 

!
<input type=...
68
#javaland #javaee7
#34: JSF: File Upload Component
<h:form enctype="multipart/form-data">

<h:inputFile value="#{fileUp...
69
#javaland #javaee7
JAX-RS 2.0
JSON-P 1.0
Web Socket 1.0Servlet 3.1
JSF 2.2EL 3.0
JSP
JSTLBeanValidation1.1
Interceptors...
70
#javaland #javaee7
#35: JAX-RS: Client API
New API to consume rest services
Client client = ClientBuilder.newClient();!...
71
#javaland #javaee7
#36: JAX-RS: Async Client
The client API also supports asynchronous invocation
Future<String> future...
72
#javaland #javaee7
#37: JAX-RS: Async Server
Asynchronous request processing on the server
@Path("/async")!
public clas...
73
#javaland #javaee7
#38: JAX-RS: Message Filter
Used to process incoming and outgoing request or response headers
§  Fi...
74
#javaland #javaee7
#38: JAX-RS: Message Filter
Used to process incoming and outgoing request or response headers
public...
75
#javaland #javaee7
#39: JAX-RS: Entity Interceptors
Marshalling and unmarshalling HTTP message bodies
§  Intercepts in...
76
#javaland #javaee7
#39: JAX-RS: Entity Interceptors
Marshalling and unmarshalling HTTP message bodies
public class GZip...
77
#javaland #javaee7
JAX-RS 2.0
JSON-P 1.0
Web Socket 1.0Servlet 3.1
JSF 2.2EL 3.0
JSP
JSTLBeanValidation1.1
Interceptors...
78
#javaland #javaee7
#40: JSON-P: JSON Builder
Creates an object model (or an array) in memory by adding elements
JsonObj...
79
#javaland #javaee7
#41: JSON-P: JsonParser
Event-based parser that can read JSON data from a stream
JsonParser parser =...
80
#javaland #javaee7
JAX-RS 2.0
JSON-P 1.0
Web Socket 1.0Servlet 3.1
JSF 2.2EL 3.0
JSP
JSTLBeanValidation1.1
Interceptors...
81
#javaland #javaee7
#42: Batch: Chunk-style Processing
Item-oriented Processing Style (primary)
82
#javaland #javaee7
#42: Batch: Chunk-style Processing
<step id=”sendStatements”>!
<chunk item-count=“3”>

<reader ref=”...
83
#javaland #javaee7
#43: Batch: Batchlet-style Processing
Task-oriented processing style
<step id=”transferFile”>!
<batc...
84
#javaland #javaee7
#44: Batch: Job/Step/Chunk Listeners
<job id="myJob" xmlns="http://xmlns.jcp.org/xml/ns/javaee" vers...
85
#javaland #javaee7
#44: Batch: Job/Step/Chunk Listeners
Interface Abstract Classes
JobListener! AbstractJobListener!
St...
86
#javaland #javaee7
#44: Batch: Job/Step/Chunk Listeners
@Named

public class MyJobListener extends AbstractJobListener ...
87
#javaland #javaee7
#45: Batch: Partition
<step>

<chunk item-count="3">

<reader ref="myItemReader">

<properties>

<pr...
88
#javaland #javaee7
#45: Batch: Partition
<partition>

<plan partitions="2">

<properties partition="0">

<property name...
89
#javaland #javaee7
#46: Batch: Creating Workflows
<flow id="flow1" next="step3">

<step id="step1" next="step2"> . . . ...
90
#javaland #javaee7
#46: Batch: Creating Workflows
<split id="split1" next=" . . . ">

<flow id="flow1”>

<step id="step...
91
#javaland #javaee7
#46: Batch: Creating Workflows
<step id="step1" next="decider1">. . .</step>

<decision id="decider1...
92
#javaland #javaee7
JAX-RS 2.0
JSON-P 1.0
Web Socket 1.0Servlet 3.1
JSF 2.2EL 3.0
JSP
JSTLBeanValidation1.1
Interceptors...
93
#javaland #javaee7
#47: JavaMail
@MailSessionDefinition(name = "java:comp/myMailSession",

properties = {

"mail.smtp.h...
94
#javaland #javaee7
JAX-RS 2.0
JSON-P 1.0
Web Socket 1.0Servlet 3.1
JSF 2.2EL 3.0
JSP
JSTLBeanValidation1.1
Interceptors...
95
#javaland #javaee7
#48: Java Connector Architecture
@ConnectionDefinition(

connection="MyConnection.class",

connectio...
96
#javaland #javaee7
JAX-RS 2.0
JSON-P 1.0
Web Socket 1.0Servlet 3.1
JSF 2.2EL 3.0
JSP
JSTLBeanValidation1.1
Interceptors...
97
#javaland #javaee7
#49: Default Resources
JNDI name: java:comp/DefaultDataSource
Default Data Source
@Resource(lookup="...
98
#javaland #javaee7
#49: Default Resources
JNDI name: java:comp/DefaultJMSConnectionFactory





@Resource(lookup="java:...
99
#javaland #javaee7
#49: Default Resources
JNDI names
§  java:comp/DefaultManagedExecutorService!
§  java:comp/Default...
100
#javaland #javaee7
#50: Buy our books!
101
#javaland #javaee7
References
§  github.com/javaee-samples/javaee7-samples
102
#javaland #javaee7
Upcoming SlideShare
Loading in...5
×

50 New Features of Java EE 7 in 50 minutes

2,725

Published on

50 New Features of Java EE 7 in 50 minutes @ JavaLand

Published in: Technology

50 New Features of Java EE 7 in 50 minutes

  1. 1. 1 #javaland #javaee7 50 new features of Java EE 7 in 50 minutes Antonio Goncalves, @agoncal Arun Gupta, @arungupta 43
  2. 2. 2 #javaland #javaee7 #NN: <spec>: <feature>
  3. 3. 3 #javaland #javaee7 JAX-RS 2.0 JSON-P 1.0 Web Socket 1.0Servlet 3.1 JSF 2.2EL 3.0 JSP JSTLBeanValidation1.1 Interceptors1.2 CDI1.1 Concurrency1.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
  4. 4. 4 #javaland #javaee7 JAX-RS 2.0 JSON-P 1.0 Web Socket 1.0Servlet 3.1 JSF 2.2EL 3.0 JSP JSTLBeanValidation1.1 Interceptors1.2 CDI1.1 Concurrency1.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)
  5. 5. 5 #javaland #javaee7 #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>!
  6. 6. 6 #javaland #javaee7 #02: CDI: @Vetoed Veto the processing of the class or package @Vetoed! public class NonProcessedBean {
 ...! }! ! package-info.java @Vetoed! package com.non.processed.package;!
  7. 7. 7 #javaland #javaee7 JAX-RS 2.0 JSON-P 1.0 Web Socket 1.0Servlet 3.1 JSF 2.2EL 3.0 JSP JSTLBeanValidation1.1 Interceptors1.2 CDI1.1 Concurrency1.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)
  8. 8. 8 #javaland #javaee7 #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());! }! }!
  9. 9. 9 #javaland #javaee7 JAX-RS 2.0 JSON-P 1.0 Web Socket 1.0Servlet 3.1 JSF 2.2EL 3.0 JSP JSTLBeanValidation1.1 Interceptors1.2 CDI1.1 Concurrency1.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)
  10. 10. 10 #javaland #javaee7 #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) ... {! // ...! }! }!
  11. 11. 11 #javaland #javaee7 #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! ...! }!
  12. 12. 12 #javaland #javaee7 JAX-RS 2.0 JSON-P 1.0 Web Socket 1.0Servlet 3.1 JSF 2.2EL 3.0 JSP JSTLBeanValidation1.1 Interceptors1.2 CDI1.1 Concurrency1.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)
  13. 13. 13 #javaland #javaee7 #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
  14. 14. 14 #javaland #javaee7 #06: Concurrency: ManagedExecutor @Resource
 ManagedExecutorService executor;
 ! 
 ManagedExecutorService executor = (ManagedExecutorService) ctx
 .lookup("java:comp/DefaultManagedExecutorService");! Default ManagedExectuor
  15. 15. 15 #javaland #javaee7 #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
  16. 16. 16 #javaland #javaee7 #07: Concurrency: ManagedScheduledExecutor §  Managed version of ScheduledExecutorService! §  Submit delayed or periodic tasks @Resource
 ManagedScheduledExecutorService executor;!
  17. 17. 17 #javaland #javaee7 #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
  18. 18. 18 #javaland #javaee7 #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);!
  19. 19. 19 #javaland #javaee7 #08: Concurrency: ManagedThreadFactory §  Extends ThreadFactory @Resource(name = "DefaultManagedThreadFactory")
 ManagedThreadFactory factory; ManagedThreadFactory factory = (ManagedThreadFactory) ctx.lookup("java:comp/ DefaultManagedThreadFactory");

  20. 20. 20 #javaland #javaee7 #08: Concurrency: ManagedThreadFactory §  Thread thread = factory.newThread(new MyTask()); §  ((ManageableThread)thread).isShutdown();

  21. 21. 21 #javaland #javaee7 #09: Concurrency: DynamicProxy §  Create dynamic proxy objects, adds contextual information available for applications running in Java EE environment §  Classloading, JNDI, Security, …
  22. 22. 22 #javaland #javaee7 #09: Concurrency: DynamicProxy @Resource
 ContextService service;
 
 
 Runnable proxy = service.createContextualProxy(new MyRunnable(), Runnable.class);
 
 
 Future f = executor.submit(proxy);!
  23. 23. 23 #javaland #javaee7 JAX-RS 2.0 JSON-P 1.0 Web Socket 1.0Servlet 3.1 JSF 2.2EL 3.0 JSP JSTLBeanValidation1.1 Interceptors1.2 CDI1.1 Concurrency1.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)
  24. 24. 24 #javaland #javaee7 #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>!
  25. 25. 25 #javaland #javaee7 #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;! ...! }!
  26. 26. 26 #javaland #javaee7 #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();! !
  27. 27. 27 #javaland #javaee7 #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 {...}!
  28. 28. 28 #javaland #javaee7 JAX-RS 2.0 JSON-P 1.0 Web Socket 1.0Servlet 3.1 JSF 2.2EL 3.0 JSP JSTLBeanValidation1.1 Interceptors1.2 CDI1.1 Concurrency1.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)
  29. 29. 29 #javaland #javaee7 #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) {...}! }!
  30. 30. 30 #javaland #javaee7 #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();! }! }!
  31. 31. 31 #javaland #javaee7 JAX-RS 2.0 JSON-P 1.0 Web Socket 1.0Servlet 3.1 JSF 2.2EL 3.0 JSP JSTLBeanValidation1.1 Interceptors1.2 CDI1.1 Concurrency1.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)
  32. 32. 32 #javaland #javaee7 #16: EJB: Disable passivation of stateful In some cases increases performance, scalability and robustness @Stateful(passivationCapable = false)! public class ShoppingCart {! ...! }!
  33. 33. 33 #javaland #javaee7 #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() {! // ...! }! }!
  34. 34. 34 #javaland #javaee7 JAX-RS 2.0 JSON-P 1.0 Web Socket 1.0Servlet 3.1 JSF 2.2EL 3.0 JSP JSTLBeanValidation1.1 Interceptors1.2 CDI1.1 Concurrency1.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)
  35. 35. 35 #javaland #javaee7 #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);!
  36. 36. 36 #javaland #javaee7 #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);! }! }!
  37. 37. 37 #javaland #javaee7 #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 {...}!
  38. 38. 38 #javaland #javaee7 #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 {...}!
  39. 39. 39 #javaland #javaee7 JAX-RS 2.0 JSON-P 1.0 Web Socket 1.0Servlet 3.1 JSF 2.2EL 3.0 JSP JSTLBeanValidation1.1 Interceptors1.2 CDI1.1 Concurrency1.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)
  40. 40. 40 #javaland #javaee7 #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) {
 . . .
 }
 }
 }!
  41. 41. 41 #javaland #javaee7 #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
  42. 42. 42 #javaland #javaee7 #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
  43. 43. 43 #javaland #javaee7 #22: Servlet: Non-blocking I/O AsyncContext context = request.startAsync();
 ServletInputStream input = request.getInputStream();
 input.setReadListener(
 new MyReadListener(input, context)); ! Only for Asynchronous Servlets
  44. 44. 44 #javaland #javaee7 #23: Servlet: Protocol Upgrade §  <T extends HttpUpgradeHandler> T HttpServletRequest.upgrade(Class<T> class) throws IOException;
 
 
 ! §  HttpUpgradeHandler! –  init(WebConnection wc);! –  destroy();!
  45. 45. 45 #javaland #javaee7 #23: Servlet: Protocol Upgrade public interface WebConnection {
 ServletInputStream getInputStream();
 ServletOutputStream getOutputStream();
 }!
  46. 46. 46 #javaland #javaee7 #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
  47. 47. 47 #javaland #javaee7 #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
  48. 48. 48 #javaland #javaee7 JAX-RS 2.0 JSON-P 1.0 Web Socket 1.0Servlet 3.1 JSF 2.2EL 3.0 JSP JSTLBeanValidation1.1 Interceptors1.2 CDI1.1 Concurrency1.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)
  49. 49. 49 #javaland #javaee7 #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);! }
 }
 }!
  50. 50. 50 #javaland #javaee7 #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) { . . . }!
  51. 51. 51 #javaland #javaee7 #27: WebSocket: Annotated client endpoint @javax.websocket.ClientEndpoint
 public class MyClient {
 @javax.websocket.OnOpen
 public void open(Session session) { … }
 
 // Lifecycle callbacks
 }!
  52. 52. 52 #javaland #javaee7 #27: WebSocket: Annotated client endpoint ContainerProvider
 .getWebSocketContainer()
 .connectToServer(
 MyClient.class, 
 URI.create("ws://. . ."));!
  53. 53. 53 #javaland #javaee7 #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) { . . . }
 
 //. . . 
 }!
  54. 54. 54 #javaland #javaee7 #28: WebSocket: Programmatic endpoints public class MyApplicationConfig implements ServerApplicationConfig {
 public Set<ServerEndpointConfig> getEndpointConfigs(…) { 
 ServerEndpointConfig.Builder
 .create(MyEndpoint.class, "/websocket”)
 .configurator(new MyConfig())
 .build()
 }
 }!
  55. 55. 55 #javaland #javaee7 #28: WebSocket: Programmatic endpoints public class MyConfig extends ServerEndpointConfig.Configurator {
 
 public <T> T getEndpointInstance(. . .) { . . . }
 
 public void modifyHandshake(. . .) { . . . }
 
 . . .
 }!
  56. 56. 56 #javaland #javaee7 #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) {
 . . . 
 }
 }!
  57. 57. 57 #javaland #javaee7 #29: WebSocket: Encoder and Decoder public class MyDecoder implements Decoder.Text<ChatMessage> {
 public ChatMessage decode(String s) {
 // . . .
 }
 
 public boolean willDecode(String string) {
 // . . .
 }
 
 //. . .
 }
 
 !
  58. 58. 58 #javaland #javaee7 #29: WebSocket: Encoder and Decoder public class MyEncoder implements Encoder.Text<ChatMessage> {
 
 public String encode(ChatMessage chatMessage) {
 // . . .
 }
 ! // . . .
 }!
  59. 59. 59 #javaland #javaee7 JAX-RS 2.0 JSON-P 1.0 Web Socket 1.0Servlet 3.1 JSF 2.2EL 3.0 JSP JSTLBeanValidation1.1 Interceptors1.2 CDI1.1 Concurrency1.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)
  60. 60. 60 #javaland #javaee7 #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");!
  61. 61. 61 #javaland #javaee7 JAX-RS 2.0 JSON-P 1.0 Web Socket 1.0Servlet 3.1 JSF 2.2EL 3.0 JSP JSTLBeanValidation1.1 Interceptors1.2 CDI1.1 Concurrency1.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)
  62. 62. 62 #javaland #javaee7 #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
  63. 63. 63 #javaland #javaee7 #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
  64. 64. 64 #javaland #javaee7 #31: JSF: Faces Flow Package reusable flows in JAR #{flowScope}: Local flow storage #{facesContext.application.flowHandler.currentFlow}: Returns true if within a flow
  65. 65. 65 #javaland #javaee7 #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
  66. 66. 66 #javaland #javaee7 #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
  67. 67. 67 #javaland #javaee7 #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"/>! !
  68. 68. 68 #javaland #javaee7 #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
 } !
  69. 69. 69 #javaland #javaee7 JAX-RS 2.0 JSON-P 1.0 Web Socket 1.0Servlet 3.1 JSF 2.2EL 3.0 JSP JSTLBeanValidation1.1 Interceptors1.2 CDI1.1 Concurrency1.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)
  70. 70. 70 #javaland #javaee7 #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);!
  71. 71. 71 #javaland #javaee7 #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) {...}!
  72. 72. 72 #javaland #javaee7 #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();! }}!
  73. 73. 73 #javaland #javaee7 #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!
  74. 74. 74 #javaland #javaee7 #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());! }! }!
  75. 75. 75 #javaland #javaee7 #39: JAX-RS: Entity Interceptors Marshalling and unmarshalling HTTP message bodies §  Intercepts inbound entity streams (reads from the “wire”) –  ReaderInterceptor! §  Intercepts outbound entity streams (writes to the “wire”) –  WriterInterceptor!
  76. 76. 76 #javaland #javaee7 #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();! }! }!
  77. 77. 77 #javaland #javaee7 JAX-RS 2.0 JSON-P 1.0 Web Socket 1.0Servlet 3.1 JSF 2.2EL 3.0 JSP JSTLBeanValidation1.1 Interceptors1.2 CDI1.1 Concurrency1.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)
  78. 78. 78 #javaland #javaee7 #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", "j.rorri@me.com")! .add("phoneNumber", "+44 1234 1234")! )! .build();!
  79. 79. 79 #javaland #javaee7 #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();! }! }!
  80. 80. 80 #javaland #javaee7 JAX-RS 2.0 JSON-P 1.0 Web Socket 1.0Servlet 3.1 JSF 2.2EL 3.0 JSP JSTLBeanValidation1.1 Interceptors1.2 CDI1.1 Concurrency1.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)
  81. 81. 81 #javaland #javaee7 #42: Batch: Chunk-style Processing Item-oriented Processing Style (primary)
  82. 82. 82 #javaland #javaee7 #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! }! !
  83. 83. 83 #javaland #javaee7 #43: Batch: Batchlet-style Processing Task-oriented processing style <step id=”transferFile”>! <batchlet ref=“MyFileTransfer” />! </step>! …implements Batchlet {! @Override
 public void process() {
 // Transfer file! }! !
  84. 84. 84 #javaland #javaee7 #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>! !
  85. 85. 85 #javaland #javaee7 #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!
  86. 86. 86 #javaland #javaee7 #44: Batch: Job/Step/Chunk Listeners @Named
 public class MyJobListener extends AbstractJobListener {
 
 @Override
 public void beforeJob() throws Exception { . . . }
 
 @Override
 public void afterJob() throws Exception { . . . }
 }!
  87. 87. 87 #javaland #javaee7 #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>!
  88. 88. 88 #javaland #javaee7 #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>!
  89. 89. 89 #javaland #javaee7 #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
  90. 90. 90 #javaland #javaee7 #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
  91. 91. 91 #javaland #javaee7 #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"! } ! }!
  92. 92. 92 #javaland #javaee7 JAX-RS 2.0 JSON-P 1.0 Web Socket 1.0Servlet 3.1 JSF 2.2EL 3.0 JSP JSTLBeanValidation1.1 Interceptors1.2 CDI1.1 Concurrency1.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)
  93. 93. 93 #javaland #javaee7 #47: 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;!
  94. 94. 94 #javaland #javaee7 JAX-RS 2.0 JSON-P 1.0 Web Socket 1.0Servlet 3.1 JSF 2.2EL 3.0 JSP JSTLBeanValidation1.1 Interceptors1.2 CDI1.1 Concurrency1.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)
  95. 95. 95 #javaland #javaee7 #48: 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",
 )!
  96. 96. 96 #javaland #javaee7 JAX-RS 2.0 JSON-P 1.0 Web Socket 1.0Servlet 3.1 JSF 2.2EL 3.0 JSP JSTLBeanValidation1.1 Interceptors1.2 CDI1.1 Concurrency1.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)
  97. 97. 97 #javaland #javaee7 #49: Default Resources JNDI name: java:comp/DefaultDataSource Default Data Source @Resource(lookup="java:comp/DefaultDataSource")
 DataSource myDS;
 ! @Resource
 DataSource myDS; !
  98. 98. 98 #javaland #javaee7 #49: Default Resources JNDI name: java:comp/DefaultJMSConnectionFactory
 
 
 @Resource(lookup="java:comp/DefaultJMSConnectionFactory") 
 ConnectionFactory myCF; @Resource
 ConnectionFactory myCF;! Default JMS Connection Factory
  99. 99. 99 #javaland #javaee7 #49: Default Resources JNDI names §  java:comp/DefaultManagedExecutorService! §  java:comp/DefaultManagedScheduledExecutorService! §  java:comp/DefaultManagedThreadFactory! §  java:comp/DefaultContextService! Default Concurrency Utilities Objects
  100. 100. 100 #javaland #javaee7 #50: Buy our books!
  101. 101. 101 #javaland #javaee7 References §  github.com/javaee-samples/javaee7-samples
  102. 102. 102 #javaland #javaee7
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×