coimbra jug - 2º encontro - o primeiro contacto com java ee 7

33
2º Encontro 13/02/2014 Departamento de Engenharia Informática - Faculdade de Ciências e Tecnologia Universidade de Coimbra

Upload: roberto-cortez

Post on 26-Dec-2014

190 views

Category:

Technology


2 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Coimbra JUG - 2º Encontro - O primeiro contacto com Java EE 7

2º Encontro13/02/2014

Departamento de Engenharia Informática - Faculdade de Ciências e Tecnologia Universidade de Coimbra

Page 2: Coimbra JUG - 2º Encontro - O primeiro contacto com Java EE 7

Objectivos

• Promover a comunidade de Java na zona Centro através de eventos periódicos

• Encorajar a participação de membros

• Aprender e divertir-se

Page 3: Coimbra JUG - 2º Encontro - O primeiro contacto com Java EE 7

Contactos

• Meetup - http://www.meetup.com/Coimbra-JUG/

• Mailing List - [email protected]

• Youtube - http://www.youtube.com/user/coimbrajug

Page 4: Coimbra JUG - 2º Encontro - O primeiro contacto com Java EE 7

O primeiro contacto com Java EE 7

Page 5: Coimbra JUG - 2º Encontro - O primeiro contacto com Java EE 7

Roberto Cortez Freelancer

twitter:!@radcortez!!mail:[email protected]!!blog:!http://www.radcortez.com

Page 6: Coimbra JUG - 2º Encontro - O primeiro contacto com Java EE 7

Questões?Assim que tiverem!

Page 7: Coimbra JUG - 2º Encontro - O primeiro contacto com Java EE 7
Page 8: Coimbra JUG - 2º Encontro - O primeiro contacto com Java EE 7

Novas Especificações

• Websockets

• Batch Applications

• Concurrency Utilities

• JSON Processing

Page 9: Coimbra JUG - 2º Encontro - O primeiro contacto com Java EE 7

Melhorias• Simplificação API JMS

• Default Resources

• JAX-RS Client API

• Transacções externas a EJB’s

• Mais Anotações

• Entity Graphs

Page 10: Coimbra JUG - 2º Encontro - O primeiro contacto com Java EE 7

Java EE 7 JSRs

Page 11: Coimbra JUG - 2º Encontro - O primeiro contacto com Java EE 7

Websockets

• Suporta cliente e servidor

• Declarativo e Programático

Page 12: Coimbra JUG - 2º Encontro - O primeiro contacto com Java EE 7

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);}!}

Page 13: Coimbra JUG - 2º Encontro - O primeiro contacto com Java EE 7

Batch Applications

• Ideal para processos massivos, longos e não-interactivos

• Execução sequencial ou paralela

• Processamento orientado à tarefa ou em secções.

Page 14: Coimbra JUG - 2º Encontro - O primeiro contacto com Java EE 7

Batch Applications

Page 15: Coimbra JUG - 2º Encontro - O primeiro contacto com Java EE 7

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>

Page 16: Coimbra JUG - 2º Encontro - O primeiro contacto com Java EE 7

Concurrency Utilities

• Capacidades assíncronas para componentes Java EE

• Extensão da API de Java SE Concurrency

• API segura e propaga contexto.

Page 17: Coimbra JUG - 2º Encontro - O primeiro contacto com Java EE 7

Concurrency Utilitiespublic 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! }! }!}

Page 18: Coimbra JUG - 2º Encontro - O primeiro contacto com Java EE 7

JSON Processing

• API para ler, gerar e transformar JSON

• Streaming API e Object Model API

Page 19: Coimbra JUG - 2º Encontro - O primeiro contacto com Java EE 7

JSON ProcessingJsonArray 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”} ]

Page 20: Coimbra JUG - 2º Encontro - O primeiro contacto com Java EE 7

JMS

• Nova interface JMSContext

• Modernização da API utilizando DI

• AutoCloseable dos recursos

• Simplificação no envio de mensagens

Page 21: Coimbra JUG - 2º Encontro - O primeiro contacto com Java EE 7

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);! }! }

Page 22: Coimbra JUG - 2º Encontro - O primeiro contacto com Java EE 7

JMS @Inject! private JMSContext context;!! @Resource(mappedName = "jms/inboundQueue")! private Queue inboundQueue;!! public void sendMessage (String payload) {! context.createProducer()! .setPriority(1)! .setTimeToLive(1000)! .setDeliveryMode(NON_PERSISTENT)! .send(inboundQueue, payload);! }

Page 23: Coimbra JUG - 2º Encontro - O primeiro contacto com Java EE 7

JAX-RS

• Nova API para consumir serviços REST

• Processamento assíncrono (cliente e servidor)

• Filtros e Interceptors

Page 24: Coimbra JUG - 2º Encontro - O primeiro contacto com Java EE 7

JAX-RS

String movie = ClientBuilder.newClient()! .target("http://www.movies.com/movie")! .request(MediaType.TEXT_PLAIN)! .get(String.class);

Page 25: Coimbra JUG - 2º Encontro - O primeiro contacto com Java EE 7

JPA

• Geração do schema da BD

• Stored Procedures

• Entity Graphs

• Unsynchronized Persistence Context

Page 26: Coimbra JUG - 2º Encontro - O primeiro contacto com Java EE 7

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>

Page 27: Coimbra JUG - 2º Encontro - O primeiro contacto com Java EE 7

JPA @Entity! @NamedStoredProcedureQuery(name="top10MoviesProcedure",! procedureName = "top10Movies")! public class Movie {}!! StoredProcedureQuery query = entityManager.createNamedStoredProcedureQuery(! "top10MoviesProcedure");! query.registerStoredProcedureParameter(1, String.class, ParameterMode.INOUT);! query.setParameter(1, "top10");! query.registerStoredProcedureParameter(2, Integer.class, ParameterMode.IN);! query.setParameter(2, 100);! query.execute();! query.getOutputParameterValue(1);

Page 28: Coimbra JUG - 2º Encontro - O primeiro contacto com Java EE 7

JSF• Suporte HTML 5

• @FlowScoped e @ViewScoped

• Componente para File Upload

• Navegação de flow por convenção

• Resource Library Contracts

Page 29: Coimbra JUG - 2º Encontro - O primeiro contacto com Java EE 7

Outros• JTA: @Transactional, @TransactionScoped

• Servlet: Non-blocking I/O, Segurança

• CDI: Automáticos para EJB’s e beans anotados (beans.xml opcional), @Vetoed

• Interceptors: @Priority, @AroundConstruct

• EJB: Passivation opcional

• EL: Lambdas, API isolada

• Bean Validator: Restrições nos parâmetros dos métodos e retornos

Page 30: Coimbra JUG - 2º Encontro - O primeiro contacto com Java EE 7

Servidores Certificados

• Glassfish 4.0

• Wildfly 8.0.0

• TMAX JEUS 8

Page 31: Coimbra JUG - 2º Encontro - O primeiro contacto com Java EE 7

Futuro Java EE 8• JCache

• Logging

• JSON-B

• Security

• Testability

• Cloud?

• Modularity?

• NoSQL?

Page 32: Coimbra JUG - 2º Encontro - O primeiro contacto com Java EE 7

Materiais

• Tutorial Java EE 7 - http://docs.oracle.com/javaee/7/tutorial/doc/home.htm

• Exemplos Java EE 7 - https://github.com/javaee-samples/javaee7-samples

Page 33: Coimbra JUG - 2º Encontro - O primeiro contacto com Java EE 7

Obrigado!