Project: EJB31-Common
package helloworld.beans;
import helloworld.vo.GreetingRequest;
import javax.ejb.Remote;
/**
*
* @author rwatsh
*/
@Remote
public interface MessageFacadeRemote {
GreetingRequest sayHello();
}
Project: EJB31-ejb
package helloworld.beans;
import helloworld.vo.GreetingRequest;
import java.io.Serializable;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.Resource;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.ObjectMessage;
import javax.jms.Queue;
import javax.jms.Session;
/**
* Message Facade bean that produces message.
* @author rwatsh
*/
@Stateless
public class MessageFacade implements MessageFacadeRemote {
@Resource(mappedName = "jms/HelloWorldQueue")
private Queue helloWorldQueue;
@Resource(mappedName = "jms/HelloWorldQueueFactory")
private ConnectionFactory helloWorldQueueFactory;
@EJB
private SingletonHelloWorldBean singletonHelloWorldBean;
private ObjectMessage createJMSMessageForjmsHelloWorldQueue(Session session, Serializable messageData) throws JMSException {
// TODO create and populate message to send
ObjectMessage om = session.createObjectMessage(messageData);
return om;
}
private void sendJMSMessageToHelloWorldQueue(Serializable messageData) throws JMSException {
Connection connection = null;
Session session = null;
try {
connection = helloWorldQueueFactory.createConnection();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer messageProducer = session.createProducer(helloWorldQueue);
messageProducer.send(createJMSMessageForjmsHelloWorldQueue(session, messageData));
} finally {
if (session != null) {
try {
session.close();
} catch (JMSException e) {
Logger.getLogger(this.getClass().getName()).log(Level.WARNING, "Cannot close session", e);
}
}
if (connection != null) {
connection.close();
}
}
}
@Override
public GreetingRequest sayHello() {
GreetingRequest result = singletonHelloWorldBean.sayHello();
try {
sendJMSMessageToHelloWorldQueue(result);
System.out.println("MessageFacade.sayHello: sent message - " + result);
} catch (JMSException ex) {
System.err.println("MessageFacade.sayHello: error sending message - "
+ ex);
}
return result;
}
}
package helloworld.beans;
import helloworld.vo.GreetingRequest;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.ObjectMessage;
import javax.jms.TextMessage;
/**
* MDB that consumes the message.
* @author rwatsh
*/
@MessageDriven(mappedName = "jms/HelloWorldQueue", activationConfig = {
@ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")
})
public class HelloWorldMDB implements MessageListener {
public HelloWorldMDB() {
}
@PostConstruct
private void postConstruct() {
System.out.println("HelloWorldMDB: @PostConstruct");
}
@Override
public void onMessage(Message message) {
if (message instanceof TextMessage) {
try {
TextMessage textMessage = (TextMessage) message;
String messageValue = textMessage.getText();
System.out.println("HelloWorldMDB.onMessage: received text message - " + messageValue);
} catch (JMSException ex) {
Logger.getLogger(HelloWorldMDB.class.getName()).log(Level.SEVERE, null, ex);
}
}
else if (message instanceof ObjectMessage) {
try {
ObjectMessage objMessage = (ObjectMessage) message;
Object contents = objMessage.getObject();
if (contents instanceof GreetingRequest) {
String messageValue = contents.toString();
System.out.println("HelloWorldMDB.onMessage: received object message - " + messageValue);
}
} catch (JMSException ex) {
}
} else {
//do nothing
}
}
@PreDestroy
private void destroy() {
System.out.println("HelloWorldMDB: @PreDestroy");
}
}
Project: EJB31-app-client
package ejb31;
import helloworld.beans.MessageFacadeRemote;
import helloworld.vo.GreetingRequest;
import javax.ejb.EJB;
/**
* Message facade tester which triggers the facade to send message to MDB.
*
* @author rwatsh
*/
public class MessageFacadeTest {
@EJB
private static MessageFacadeRemote messageFacade;
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
GreetingRequest request = messageFacade.sayHello();
System.out.println("MessageFacadeTest.main: facade said - "
+ request);
}
}