More Related Content Similar to The First Contact with Java EE 7 (20) More from Roberto Cortez (6) The First Contact with Java EE 75. Improvements
• Simplified JMS API
• Default Resources
• JAX-RS Client API
• EJB’s External Transactions
• More Annotations
• Entity Graphs
8. Websockets Chat Server
@ServerEndpoint("/chatWebSocket")
public class ChatWebSocket {
private static final Set<Session> sessions = Collections.synchronizedSet(new HashSet<Session>());
@OnOpen
public void onOpen(Session session) {sessions.add(session);}
@OnMessage
public void onMessage(String message) {
for (Session session : sessions) { session.getAsyncRemote().sendText(message);}
}
@OnClose
public void onClose(Session session) {sessions.remove(session);}
}
9. Batch Applications
• For long, non-interactive processes
• Either sequential or parallel (partitions)
• Task or Chunk oriented processing
11. Batch Applications - job.xml
<job id="myJob" xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="1.0">
<step id="myStep" >
<chunk item-count="3">
<reader ref="myItemReader"/>
<processor ref="myItemProcessor"/>
<writer ref="myItemWriter"/>
</chunk>
</step>
</job>
13. Concurrency Utilities
public class TestServlet extends HttpServlet {
@Resource(name = "concurrent/MyExecutorService")
ManagedExecutorService executor;
Future future = executor.submit(new MyTask());
class MyTask implements Runnable {
public void run() {
// do something
}
}
}
15. JSON Processing
JsonArray jsonArray = Json.createArrayBuilder()
.add(Json.createObjectBuilder()
.add("name", “Jack"))
.add("age", "30"))
.add(Json.createObjectBuilder()
.add("name", “Mary"))
.add("age", "45"))
.build();
[ {“name”:”Jack”, “age”:”30”},
{“name”:”Mary”, “age”:”45”} ]
16. JMS
• New interface JMSContext
• Modern API with Dependency Injection
• Resources AutoCloseable
• Simplified how to send messages
17. JMS
@Resource(lookup = "java:global/jms/demoConnectionFactory")
ConnectionFactory connectionFactory;
@Resource(lookup = "java:global/jms/demoQueue")
Queue demoQueue;
public void sendMessage(String payload) {
try {
Connection connection = connectionFactory.createConnection();
try {
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer messageProducer = session.createProducer(demoQueue);
TextMessage textMessage = session.createTextMessage(payload);
messageProducer.send(textMessage);
} finally {
connection.close();
}
} catch (JMSException ex) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
}
}
19. JAX-RS
• New API to consume REST services
• Asynchronous processing (client and server)
• Filters and Interceptors
20. JAX-RS
String movie = ClientBuilder.newClient()
.target("http://www.movies.com/movie")
.request(MediaType.TEXT_PLAIN)
.get(String.class);
22. JPA
<persistence-unit name="myPU" transaction-type="JTA">
<properties>
<property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
<property name="javax.persistence.schema-generation.create-source" value="script"/>
<property name="javax.persistence.schema-generation.drop-source" value="script"/>
<property name="javax.persistence.schema-generation.create-script-source" value="META-INF/
create.sql"/>
<property name="javax.persistence.schema-generation.drop-script-source" value="META-INF/
drop.sql"/>
<property name="javax.persistence.sql-load-script-source" value="META-INF/load.sql"/>
</properties>
</persistence-unit>
24. JSF
• HTML 5 support
• @FlowScoped and @ViewScoped
• File Upload component
• Flow Navigation by Convention
• Resource Library Contracts
25. Others
• JTA: @Transactional, @TransactionScoped
• Servlet: Non-blocking I/O, Security
• CDI: Automatic for EJB’s and annotated beans (beans.xml
opcional), @Vetoed
• Interceptors: @Priority, @AroundConstruct
• EJB: Passivation opcional
• EL: Lambdas, isolated API
• Bean Validator: Restrictions in parameters and return types
27. Java EE 8
• Alignment with Java 8
• JCache
• JSON-B
• MVC
• HTTP 2.0 Support
• Cloud Support
28. Materials
• Tutorial Java EE 7 - http://docs.oracle.com/javaee/7/
tutorial/doc/home.htm
• Samples Java EE 7 - https://github.com/javaee-
samples/javaee7-samples
• Batch Sample - WoW Auctions - https://github.com/
radcortez/wow-auctions
• WebSocket Sample - Chat Server - https://
github.com/radcortez/cbrjug-websockets-chat