# JMS - Problem mit TemporaryQueue



## megachucky (12. Aug 2007)

Hallo.

Ich habe einen Client und einen Server. Der Server empfängt 5 Nachrichten und soll jeweils an die Temporary Queue eine Antwort senden. 

Ich benutze den Glassfish Application Server und starte beide Klassen mit appclient.

Der Client sendet die erste Nachricht und bekommt auch eine Antwort vom Server, die zweite Nachricht empängt der Sever zwar noch, gibt aber keine Antwort mehr und hängt.

Ich vermute, es passt etwas mit JMSCorrelationID oder JMSMessageID nicht und der Server schickt zwar eine zweite Nachricht, diese wird aber anscheinend auf Client Seite nicht korrekt empfangen / ist nicht zuordbar ?!?

Kann mir jemand weiterhelfen?

Danke.


Hier der Code:


```
public ServerSetup() {
		
		logger = Logger.getLogger("ClientSetup");
		logger.setLevel(Level.INFO);
		
		try {
			context = new InitialContext();
			connectionFactory = (ConnectionFactory) context.lookup("jms/ConnFact");
			connection = connectionFactory.createConnection();
			
			queue = (Queue) context.lookup("jms/Queue");
//			topic = (Topic) context.lookup("jms/Topic");
			
			session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
			
			MessageConsumer consumer = session.createConsumer(queue);
			
			connection.start();
			logger.info("start consuming text messages");
			
			while (true) {
		
				TextMessage textMessage = (TextMessage) consumer.receive();
				
				if (textMessage.getText().equals("dummy")) {
					break;
				}
				
				logger.info(textMessage.getJMSMessageID() + ": " + textMessage.getText());
				
				Queue replyQueue = (Queue) textMessage.getJMSReplyTo();
				
				MessageProducer replyProducer = session.createProducer(replyQueue);
				TextMessage replyMessage = session.createTextMessage();
				replyMessage.setText("ANSWER - Message " + textMessage.getJMSMessageID() + " arrived");
				replyMessage.setJMSCorrelationID(textMessage.getJMSMessageID());

				replyProducer.send(replyMessage);
			
				
			}
			
			logger.info("text messages received");
			
			
			session.close();
			connection.close();
		}
			
		catch (NamingException e) {
			e.printStackTrace();
		}
		
		 catch (JMSException e) {
			e.printStackTrace();
		}
		
	}
	
}
```




```
public ClientSetup() {
		
		System.out.println("test");
		
		logger = Logger.getLogger("ServerSetup");
		logger.setLevel(Level.INFO);
		
		try {
			context = new InitialContext();
			connectionFactory = (ConnectionFactory) context.lookup("jms/ConnFact");
			connection = connectionFactory.createConnection();
			
			queue = (Queue) context.lookup("jms/Queue");
//			topic = (Topic) context.lookup("jms/Topic");
			
			session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
			
			MessageProducer producer = session.createProducer(queue);
			TemporaryQueue temporaryQueue = session.createTemporaryQueue();
			
			connection.start();
			
			for (int i=0; i<5; i++) {
				
				TextMessage textMessage = session.createTextMessage();
				textMessage.setText("jms queue test " + i);
				textMessage.setJMSReplyTo(temporaryQueue);
				MessageConsumer consumer = session.createConsumer(temporaryQueue);
				
				
				producer.send(textMessage);
				logger.info("message " + textMessage.getJMSMessageID() + " sent: \n" + textMessage.getText() );
				
				TextMessage confirmation = (TextMessage) consumer.receive();
				logger.info("Confirmation: " + confirmation.getText());
				
			}
			// leere Message zum Abschluss
			TextMessage dummy = session.createTextMessage();
			dummy.setText("dummy");
			producer.send(dummy);
			
			logger.info("text messages sent");
			
	
			session.close();
			connection.close();
		}
			
		catch (NamingException e) {
			e.printStackTrace();
		}
		
		 catch (JMSException e) {
			e.printStackTrace();
		}
		
	}

}
```


----------



## megachucky (12. Aug 2007)

Nebenbei noch eine zweite Frage:

Ich kann zwar die ConnectionFactory und Queue über den Context-Lookup holen, aber eigentlich wollte ich es so machen:

@Resource(mappedName="jms/ConnFact")
private ConnectionFactory connectionFactory;

Dies funktioniert aber leider nicht und bringt immer eine NullPointer. Kanns sich das jemand erklären ?!? 
Andere Annotation wie zb für EJBs oder Entities funktionieren einwandfrei.


----------



## megachucky (14. Aug 2007)

Niemand? :-(


----------

