Moin erstmal,
habe da ein ein Problem in Sachen JMS. Sicherlich liegt es nicht am code, sondern eher an der Konfiguration.
- activeMQ läuft
- jndi.properties sind vorhanden im classpath des projekts
- 2 Klassen sind vorhanden die kommunizieren sollen
EchoServer.java:
EchoClient.java:
jndi.properties:
Das Problem liegt an der Initialisierung der
da der
nichterzeugt werden kann.
Die Properties stimmen, die activeMQ läuft auch. der Code ist soweit auch korrekt.
Habe bisher verschiedene Möcglichkeiten ausprobiert, auch das direkte setzen der Properties(mittlerweile auskommentiert).
Ich vermute, dass die jndi.properties erst garnicht gelesen wird.
Im Grunde verstehe ich auch garnicht was activeMQ macht und wie es angesteuert wird.
Vielen dank für hilfreiche Vorschläge im Voraus.
habe da ein ein Problem in Sachen JMS. Sicherlich liegt es nicht am code, sondern eher an der Konfiguration.
- activeMQ läuft
- jndi.properties sind vorhanden im classpath des projekts
- 2 Klassen sind vorhanden die kommunizieren sollen
EchoServer.java:
Java:
package rrJMS;
import java.util.Properties;
import javax.jms.*;
import javax.naming.*;
public class EchoServer {
private static final String DESTINATION = "queue/myQueue1";
private static final String USER = "guest";
private static final String PASSWORD = "guest";
private QueueConnectionFactory factory;
private Queue queue;
public EchoServer() throws NamingException, JMSException {
// Properties env = new Properties();
// env.put(Context.SECURITY_PRINCIPAL, "guest");
// env.put(Context.SECURITY_CREDENTIALS, "guest");
// env.put(Context.INITIAL_CONTEXT_FACTORY,
// "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
// env.put(Context.PROVIDER_URL,
// "tcp://localhost:61616");
Context ctx = new InitialContext();
factory = (QueueConnectionFactory) ctx.lookup("ConnectionFactory");
queue = (Queue) ctx.lookup("queue/myQueue1");
}
public static void main(String[] args) throws Exception {
EchoServer server = new EchoServer();
server.process();
}
public void process() throws JMSException {
QueueConnection connection = factory.createQueueConnection(USER,
PASSWORD);
QueueSession session = connection.createQueueSession(false,
Session.AUTO_ACKNOWLEDGE);
QueueReceiver receiver = session.createReceiver(queue);
connection.start();
System.out.println("EchoServer gestartet ...");
while (true) {
TextMessage request = (TextMessage) receiver.receive();
String text = request.getText();
Queue tempQueue = (Queue) request.getJMSReplyTo();
TextMessage response = session.createTextMessage();
response.setText(text);
QueueSender sender = session.createSender(tempQueue);
sender.send(response);
}
}
}
EchoClient.java:
Java:
package rrJMS;
import java.util.Properties;
import javax.jms.*;
import javax.naming.*;
public class EchoClient {
private static final String DESTINATION = "queue/myQueue1";
private static final String USER = "guest";
private static final String PASSWORD = "guest";
private String text;
private QueueConnectionFactory factory;
private Queue queue;
public EchoClient(String text) throws NamingException, JMSException {
// Properties env = new Properties();
// env.put(Context.SECURITY_PRINCIPAL, "guest");
// env.put(Context.SECURITY_CREDENTIALS, "guest");
// env.put(Context.INITIAL_CONTEXT_FACTORY,
// "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
// env.put(Context.PROVIDER_URL,
// "tcp://localhost:61616");
this.text = text;
Context ctx = new InitialContext();
factory = (QueueConnectionFactory) ctx.lookup("ConnectionFactory");
queue = (Queue) ctx.lookup("queue/myQueue1");
}
public static void main(String[] args) throws Exception {
String text = "Hallo";
EchoClient client = new EchoClient(text);
client.process();
}
public void process() throws JMSException {
TemporaryQueue tempQueue = null;
QueueSender sender = null;
QueueReceiver receiver = null;
QueueSession session = null;
QueueConnection connection = null;
try {
connection = factory.createQueueConnection(USER,
PASSWORD);
session = connection.createQueueSession(false,
Session.AUTO_ACKNOWLEDGE);
// temporäre Queue für die Antwort erzeugen
tempQueue = session.createTemporaryQueue();
sender = session.createSender(queue);
receiver = session.createReceiver(tempQueue);
connection.start();
TextMessage request = session.createTextMessage();
request.setText(text);
request.setJMSReplyTo(tempQueue);
sender.send(request);
// auf Antwort warten
TextMessage response = (TextMessage) receiver.receive();
System.out.println(response.getText());
} finally {
sender.close();
receiver.close();
tempQueue.delete();
session.close();
connection.close();
}
}
}
jndi.properties:
Java:
java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory
java.naming.provider.url=tcp://localhost:61616
# queue.[jndiName]= [physicalName]
queue.queue/myQueue1 = myQueue1
Das Problem liegt an der Initialisierung der
Code:
queue
Code:
InitialContext
Die Properties stimmen, die activeMQ läuft auch. der Code ist soweit auch korrekt.
Habe bisher verschiedene Möcglichkeiten ausprobiert, auch das direkte setzen der Properties(mittlerweile auskommentiert).
Ich vermute, dass die jndi.properties erst garnicht gelesen wird.
Im Grunde verstehe ich auch garnicht was activeMQ macht und wie es angesteuert wird.
Vielen dank für hilfreiche Vorschläge im Voraus.