Running the Topic Producer and Synchronous Topic Consumer Examples in Java Drawer Data Matrix in Java Running the Topic Producer and Synchronous Topic Consumer Examples

Running the Topic Producer and Synchronous Topic Consumer Examples generate, create datamatrix 2d barcode none for java projects Microsoft SQL Server Before we ca datamatrix 2d barcode for Java n run the examples we need to create the topic. As with connection factories and queues, this process is application server-dependent. In the case of GlassFish we can do this manually by means of the Administration Console, or by creating an Ant script which uses the GlassFish asadmin utility to perform the setup from the command line:.

<target n ame="create-topic"> <exec executable="${glassfish.home}/bin/asadmin" failonerror="true" vmlauncher="false"> [ 171 ]. Messaging &l jsp ECC200 t;arg line="create-jms-resource --user admin --passwordfile adminpassword --restype javax.jms.Topic --enabled=true --property Name=BankServiceJMSTopic BankServiceJMSTopic"/> </exec> </target>.

Now run the TopicProducer program. After it completes, run SynchTopicConsumer. This program will hang unlike the synchronous queue consumer example shown earlier.

This is because SynchTopicConsumer was not registered with the topic at the time that TopicProducer sent the message. If we run TopicProducer again then the hanging SynchTopicConsumer will read the message and terminate..

An Asynchronous Topic Consumer Example In this exam ple a Java application, AsynchTopicConsumer, simply asynchronously reads a message from the same topic used in the previous example. The code for this program is very similar to the asynchronous queue consumer program described earlier. We also need to create an instance of a MessageListener class and register it as a listener.

The code is shown below:. public class barcode data matrix for Java AsynchTopicConsumer{ public static void main(String[] args) { ConnectionFactory cf = null; Connection conn = null; Topic topic = null; MessageListener listener = null; try { listener = new TextMessageListener(); InitialContext ctx = new InitialContext(); cf = (ConnectionFactory) ctx.lookup("BankServiceConnectionFactory"); topic = (Topic) ctx.lookup("BankServiceJMSTopic"); } catch (NamingException e) { e.

printStackTrace(); } try { conn = cf.createConnection(); Session sess = conn.createSession(false, Session.

AUTO_ACKNOWLEDGE); MessageConsumer mcon = sess.createConsumer(topic); mcon.setMessageListener(listener); conn.

start(); [ 172 ]. 8 try { Thr ead.sleep(30000); } catch (Exception e) {} } catch (JMSException ex) { System.out.

println( "JMS Exception:" + ex.getMessage() ); } finally { try { conn.close(); } catch (JMSException ex) {} } } }.

We use JNDI Data Matrix ECC200 for Java to look up the BankServiceConnectionFactory connection factory and the BankServiceJMSTopic topic. As before, we create Connection, Session, and MessageConsumer objects. We also create an instance of the TextMessageListener class and register it as a listener.

However the program differs from the queue example in that after starting the connection we let the program sleep for 30 seconds. The reason for this is, you may recall, that a consumer must be registered with the topic at the time the message is sent. In this way, providing we run the topic producer within 30 seconds of the consumer starting, we will be able to read any message in the topic.

Alternatively we could have created an infinite loop which would require some sort of end of message from the producer to break from the loop.. Running the Asynchronous Topic Consumer Example First run th ECC200 for Java e AsynchTopicConsumer program. In another window immediately afterwards, run a second copy of AsynchTopicConsumer. Finally, in a third window run the TopicProducer program.

All three programs should be started within 30 seconds of each other. Because this is a topic and a topic can have any number of subscribers, both copies of AsynchTopicConsumer will receive the message sent by TopicProducer..

[ 173 ]. Messaging Motivation for Message-Driven Beans In enterpris jvm 2d Data Matrix barcode e scale environments we would like our messaging systems to take advantage of the services offered by an EJB container. These include security, transactions, concurrency, and the scalability of the EJB model. A session bean cannot be a message consumer since its business methods must be synchronously invoked by a client.

However, a session bean can act as a message producer as we shall see. To meet these requirements, EJB provides message-driven beans (MDBs). An added bonus of MDBs is that much of the boilerplate code of creating and starting connections and creating sessions and listeners is dispensed with.

MDBs are EJB components which act as asynchronous message consumers. Since EJB 2.1, MDBs can support non-JMS messaging systems as well as JMS messaging systems, but we will describe only JMS-based MDBs in this book.

MDBs do not have remote or local business interfaces. JMS-based MDBs must implement the MessageListener interface. As we have seen, this interface has just one method, onMessage().

This method, as well as receiving the message, also performs any business logic not unlike session beans. MDBs can use point-to-point (queue) or publish/subscribe (topic) modes. MDBs are stateless.

Like session beans, MDBs can invoke other session beans and can interact with entities by means of the EntityManager..
Copyright © . All rights reserved.