====== Message Driven Bean (MDB) példa - Üzenet szűrés ======
Hozzunk létre egy olyan MDBMessageSelector osztályt, amely csak a "pirosnak jelölt" üzeneteket fogja fogadni az üzenetsorról.
@MessageDriven(name = "MDBMessageSelectorExample",
activationConfig =
{
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "destination", propertyValue = "ColorQueue"),
@ActivationConfigProperty(propertyName = "messageSelector", propertyValue = "color = 'RED'")
})
@TransactionManagement(value= TransactionManagementType.CONTAINER)
@TransactionAttribute(value= TransactionAttributeType.REQUIRED)
public class MDBMessageSelector implements MessageListener
{
public void onMessage(Message message)
{
try
{
TextMessage textMessage = (TextMessage)message;
String text = textMessage.getText();
String color = textMessage.getStringProperty("color");
System.out.println("message " + text + " received color=" + color);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
A standalone-full.xml-ben adjuk hozzá a távoli elérést:
A hozzá tartozó klienst viszont most ne a dinamikus web projektben, hanem egy külön java projektben hozzuk létre. A projektre jobb egérgombbal kattintva: Properties/Java Build Path/Add External Jar - segítségével adjuk hozzá a jboss-client.jar-t a [wildfly]\bin\client\ könyvtárból.
A [wildfly]\bin\add-user.bat segítségével egy távoli felhasználót is létre kell hozni. A példában a felhasználónév:quser és a jelszó:Password_1 és a "guest" csoportba kell tartoznia.
import java.util.Hashtable;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.NamingException;
import org.wildfly.naming.client.WildFlyInitialContextFactory;
public class TestRemoteQueue {
public static void main(String[] args) throws Exception {
Context initialContext = null;
try {
initialContext = getInitialContext();
QueueConnectionFactory qconFactory = (QueueConnectionFactory) initialContext
.lookup("jms/RemoteConnectionFactory");
QueueConnection qcon = qconFactory.createQueueConnection("quser", "Password_1");
QueueSession qsession = qcon.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = (Queue) initialContext.lookup("java:/jms/queue/TaskQueue");
QueueSender qsender = qsession.createSender(queue);
qcon.start();
TextMessage msg = qsession.createTextMessage();
msg.setStringProperty("color", "RED");
msg.setText("Hello world! :)");
qsender.send(msg);
qsender.close();
qsession.close();
qcon.close();
} catch (Exception e) {
e.printStackTrace();
}
}
private static Context getInitialContext() throws NamingException {
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "org.wildfly.naming.client.WildFlyInitialContextFactory");
env.put(Context.PROVIDER_URL, "remote+http://127.0.0.1:8080");
return new WildFlyInitialContextFactory().getInitialContext(env);
}
}