From 9e07e624e0aa1d9dddd0aa497a7fcbc07b80fe3d Mon Sep 17 00:00:00 2001 From: Fabio Scotto di Santolo Date: Tue, 2 Apr 2019 12:31:18 +0200 Subject: [PATCH] Aggiunto l'esempio del capitolo sulle Java Message Service --- .idea/compiler.xml | 3 + .idea/encodings.xml | 2 + ejbdemo/ejbdemo.iml | 29 -------- jmsdemo/pom.xml | 66 +++++++++++++++++++ .../it/plague/jeedemo/ExpensiveOrderMDB.java | 25 +++++++ .../java/it/plague/jeedemo/OrderConsumer.java | 29 ++++++++ .../main/java/it/plague/jeedemo/OrderDTO.java | 18 +++++ .../java/it/plague/jeedemo/OrderProducer.java | 32 +++++++++ pom.xml | 1 + 9 files changed, 176 insertions(+), 29 deletions(-) create mode 100644 jmsdemo/pom.xml create mode 100644 jmsdemo/src/main/java/it/plague/jeedemo/ExpensiveOrderMDB.java create mode 100644 jmsdemo/src/main/java/it/plague/jeedemo/OrderConsumer.java create mode 100644 jmsdemo/src/main/java/it/plague/jeedemo/OrderDTO.java create mode 100644 jmsdemo/src/main/java/it/plague/jeedemo/OrderProducer.java diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 07edf43..13249f0 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -2,6 +2,7 @@ + @@ -9,7 +10,9 @@ + + diff --git a/.idea/encodings.xml b/.idea/encodings.xml index b8f3ecd..236f921 100644 --- a/.idea/encodings.xml +++ b/.idea/encodings.xml @@ -3,6 +3,8 @@ + + diff --git a/ejbdemo/ejbdemo.iml b/ejbdemo/ejbdemo.iml index d94b47a..423fba3 100644 --- a/ejbdemo/ejbdemo.iml +++ b/ejbdemo/ejbdemo.iml @@ -12,33 +12,4 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jmsdemo/pom.xml b/jmsdemo/pom.xml new file mode 100644 index 0000000..39bb98a --- /dev/null +++ b/jmsdemo/pom.xml @@ -0,0 +1,66 @@ + + + 4.0.0 + jmsdemo + jmsdemo + + + jeedemo + it.plague.jeedemo + 1.0-SNAPSHOT + + + + UTF-8 + 1.7 + 1.7 + + + + + org.projectlombok + lombok + provided + + + org.glassfish.main.extras + glassfish-embedded-all + provided + + + junit + junit + test + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.0 + + 1.7 + 1.7 + + + + org.apache.maven.plugins + maven-failsafe-plugin + 2.12.4 + + + integration-test + + integration-test + verify + + + + + + + diff --git a/jmsdemo/src/main/java/it/plague/jeedemo/ExpensiveOrderMDB.java b/jmsdemo/src/main/java/it/plague/jeedemo/ExpensiveOrderMDB.java new file mode 100644 index 0000000..894a17c --- /dev/null +++ b/jmsdemo/src/main/java/it/plague/jeedemo/ExpensiveOrderMDB.java @@ -0,0 +1,25 @@ +package it.plague.jeedemo; + +import javax.ejb.ActivationConfigProperty; +import javax.ejb.MessageDriven; +import javax.jms.JMSException; +import javax.jms.Message; +import javax.jms.MessageListener; + +@MessageDriven(mappedName = "jms/javaee7/Topic", + activationConfig = { + @ActivationConfigProperty(propertyName = "acknowledgeMod", propertyValue = "Auto-acknowledge"), + @ActivationConfigProperty(propertyName = "messageSelector", propertyValue = "orderAmount > 1000") + }) +public class ExpensiveOrderMDB implements MessageListener { + + @Override + public void onMessage(Message message) { + try { + OrderDTO order = message.getBody(OrderDTO.class); + System.out.println("Expensive order received: " + order); + } catch (JMSException e) { + e.printStackTrace(); + } + } +} diff --git a/jmsdemo/src/main/java/it/plague/jeedemo/OrderConsumer.java b/jmsdemo/src/main/java/it/plague/jeedemo/OrderConsumer.java new file mode 100644 index 0000000..e47ccdc --- /dev/null +++ b/jmsdemo/src/main/java/it/plague/jeedemo/OrderConsumer.java @@ -0,0 +1,29 @@ +package it.plague.jeedemo; + +import javax.jms.ConnectionFactory; +import javax.jms.Destination; +import javax.jms.JMSContext; +import javax.naming.Context; +import javax.naming.InitialContext; +import javax.naming.NamingException; + +public class OrderConsumer { + + public static void main(String[] args) throws NamingException { + // Get the JNDI context + Context jndiContext = new InitialContext(); + + // Looks up the administered objects + ConnectionFactory connectionFactory = + (ConnectionFactory) jndiContext.lookup("jms/javaee7/ConnectionFactory"); + Destination destination = + (Destination) jndiContext.lookup("jms/javaee7/Topic"); + + try (JMSContext context = connectionFactory.createContext()) { + while (true) { + OrderDTO order = context.createConsumer(destination).receiveBody(OrderDTO.class); + System.out.println("Order received: " + order); + } + } + } +} diff --git a/jmsdemo/src/main/java/it/plague/jeedemo/OrderDTO.java b/jmsdemo/src/main/java/it/plague/jeedemo/OrderDTO.java new file mode 100644 index 0000000..4f3f405 --- /dev/null +++ b/jmsdemo/src/main/java/it/plague/jeedemo/OrderDTO.java @@ -0,0 +1,18 @@ +package it.plague.jeedemo; + +import java.io.Serializable; +import java.util.Date; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class OrderDTO implements Serializable { + + private Long orderId; + private Date creationDate; + private String customerName; + private Float totalAmount; +} diff --git a/jmsdemo/src/main/java/it/plague/jeedemo/OrderProducer.java b/jmsdemo/src/main/java/it/plague/jeedemo/OrderProducer.java new file mode 100644 index 0000000..7429ab2 --- /dev/null +++ b/jmsdemo/src/main/java/it/plague/jeedemo/OrderProducer.java @@ -0,0 +1,32 @@ +package it.plague.jeedemo; + +import java.util.Date; +import javax.jms.ConnectionFactory; +import javax.jms.Destination; +import javax.jms.JMSContext; +import javax.naming.Context; +import javax.naming.InitialContext; +import javax.naming.NamingException; + +public class OrderProducer { + + public static void main(String[] args) throws NamingException { + // Creates an orderDto with a total amount parameter + Float totalAmount = Float.valueOf(args[0]); + OrderDTO order = new OrderDTO(12342L, new Date(), "Betty Moreu", totalAmount); + + // Get the JNDI context + Context jndiContext = new InitialContext(); + + // Looks up the administered objects + ConnectionFactory connectionFactory = + (ConnectionFactory) jndiContext.lookup("jms/javaee7/ConnectionFactory"); + Destination destination = + (Destination) jndiContext.lookup("jms/javaee7/Topic"); + + try (JMSContext context = connectionFactory.createContext()) { + // Sends an object message to the topic + context.createProducer().setProperty("orderAmount", totalAmount).send(destination, order); + } + } +} diff --git a/pom.xml b/pom.xml index c1e9333..f8f7084 100644 --- a/pom.xml +++ b/pom.xml @@ -14,6 +14,7 @@ jpademo ejbdemo xmlandjsondemo + jmsdemo