Hallo,
ich kann nicht mit JNDI und JMS klar zu kommen...
Habe einige Beispiele für AqtiveMQ gefunden:
Um JNDI zu benutzen, braucht man auch jndi.properties:
Ich will mit Queues arbeiten, deswegen brauche ich Topics nicht.
Was soll ich als nächstes machen? JNDI soll ausgelesen werden. Wie macht man das?
Und wie kann ich beide Klassen QSender und QReceiver gleichzeitig starten? Aus cmd.exe? Ich danke im Voraus.
ich kann nicht mit JNDI und JMS klar zu kommen...
Habe einige Beispiele für AqtiveMQ gefunden:
Java:
package activeMQ;
import java.io.*;
import javax.jms.*;
import javax.naming.*;
public class QSender {
public static void main(String[] args) {
new QSender().send();
}
public void send() {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try {
System.out.println("Enter QueueConnectionFactory name:");
String factoryName = reader.readLine();
System.out.println("Enter Queue name:");
String queueName = reader.readLine();
InitialContext initContext = new InitialContext();
QueueConnectionFactory factory =
(QueueConnectionFactory) initContext.lookup(factoryName);
Queue queue = (Queue) initContext.lookup(queueName);
initContext.close();
QueueConnection connection = factory.createQueueConnection();
QueueSession session =
connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
QueueSender sender = session.createSender(queue);
String messageText = null;
while (true) {
System.out.println("Enter message to send or 'quit':");
messageText = reader.readLine();
if ("quit".equals(messageText))
break;
TextMessage message = session.createTextMessage(messageText);
sender.send(message);
}
System.out.println("Exiting...");
reader.close();
connection.close();
System.out.println("Goodbye!");
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
}
Java:
package activeMQ;
import java.io.*;
import javax.jms.*;
import javax.naming.*;
public class QReceiver implements MessageListener {
private boolean stop = false;
public static void main(String[] args) {
new QReceiver().receive();
}
public void receive() {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try {
//JNDI-Namen
System.out.println("Enter QueueConnectionFactory name:");
String factoryName = reader.readLine();
System.out.println("Enter Queue name:");
String queueName = reader.readLine();
reader.close();
//Finde adm. Objekte
InitialContext initContext = new InitialContext();
QueueConnectionFactory factory =
(QueueConnectionFactory) initContext.lookup(factoryName);
Queue queue = (Queue) initContext.lookup(queueName);
initContext.close();
//Erzeuge JMS-Objekte
QueueConnection connection = factory.createQueueConnection();
QueueSession session =
connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
QueueReceiver receiver = session.createReceiver(queue);
receiver.setMessageListener(this);
connection.start();
//Warte auf Stop
while (!stop) {
Thread.sleep(1000);
}
//Exit
System.out.println("Exiting...");
connection.close();
System.out.println("Goodbye!");
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
public void onMessage(Message message) {
try {
String msgText = ((TextMessage) message).getText();
System.out.println(msgText);
if ("stop".equals(msgText))
stop = true;
} catch (JMSException e) {
e.printStackTrace();
stop = true;
}
}
}
Um JNDI zu benutzen, braucht man auch jndi.properties:
Code:
# START SNIPPET: jndi
java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory
# use the following property to configure the default connector
java.naming.provider.url = tcp://hostname:61616
# use the following property to specify the JNDI name the connection factory
# should appear as.
connectionFactoryNames = queueConnectionFactory
# register some queues in JNDI using the form
# queue.[jndiName] = [physicalName]
queue.MyQueue = example.MyQueue
# register some topics in JNDI using the form
# topic.[jndiName] = [physicalName]
#topic.MyTopic = example.MyTopic
# END SNIPPET: jndi
Ich will mit Queues arbeiten, deswegen brauche ich Topics nicht.
Was soll ich als nächstes machen? JNDI soll ausgelesen werden. Wie macht man das?
Und wie kann ich beide Klassen QSender und QReceiver gleichzeitig starten? Aus cmd.exe? Ich danke im Voraus.