# Probleme mit JMS



## recess (11. Mai 2014)

Hallo zusammen,

ich bin gerade an einer JMS Abgabe am arbeiten.
Dabei kommt bei mir folgende Fehlermeldung:


Exception in thread "main" java.lang.ClassCastException: org.apache.activemq.command.ActiveMQTextMessage cannot be cast to javax.jms.ObjectMessage
	at Server.JMSServer.process(JMSServer.java:224)
	at Server.JMSServer.main(JMSServer.java:45)


Wenn ich case 7 /8 ausführe läuft es für sich genommen schon, allerdings dann bei der Ausführung von case 5 , kommt unmittelbar danach die Fehlermeldung.

Habt ihr eine Idee was ich ändern muss?

Vielen Dank schonmal im voraus und sorry für den hässlichen Code, ich bin noch Anfänger 
Hier die Klassen:
Client:

```
package Client;


import functionality.Bestellposition;
import functionality.Bestellungen;
import interfaces.IBestellposition;
import interfaces.IBestellungen;
import interfaces.IKunde;

import java.io.IOException;
import java.io.Serializable;
import javax.jms.JMSException;
import javax.jms.ObjectMessage;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueReceiver;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import Server.BestellungenHandler;


public class JMSClient implements Serializable {
	private static final long serialVersionUID = 1L;
	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;
	QueueConnection connection;
	QueueSession session;
	QueueSender sender;
	QueueReceiver receiver;

	Queue tempQueue;
	String  gewaehlterMenuePunkt;
	IKunde kunde=null;


	public JMSClient() throws NamingException, JMSException {
		Context ctx = new InitialContext();
		factory = (QueueConnectionFactory) ctx.lookup("ConnectionFactory");
		queue = (Queue) ctx.lookup(DESTINATION);
	}
	public static void main(String[] args) throws Exception {
		JMSClient client = new JMSClient();
		client.process();

	}


	public void process() throws JMSException, IOException{
		try {
			System.out.println("Herzlich Willkommen");
			System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");

			Benutzeroberflaeche hauptmenue = new Benutzeroberflaeche(befuelleHauptmenue());
			hauptmenue.ausgabe();
			while ( true )
			{
				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();
				Benutzereingabe menue= new Benutzereingabe ("Wählen Sie nun Bitte Ihren Punkt aus: ");
				gewaehlterMenuePunkt= menue.getString();

				switch (gewaehlterMenuePunkt){

				case "1": 
					Benutzereingabe benutzernameEingabe= new Benutzereingabe ("Bitte geben Sie nun Ihren Benutzernamen ein: ");
					String benutzername= benutzernameEingabe.getString();
					Benutzereingabe passwortEingabe= new Benutzereingabe ("Bitte geben Sie nun Ihren Passwort ein: ");
					String passwort= passwortEingabe.getString();


					String login = "1"+","+benutzername+","+passwort;
					TextMessage auswahl = session.createTextMessage();
					auswahl.setText(login);
					auswahl.setJMSReplyTo(tempQueue);
					sender.send(auswahl);


					ObjectMessage loginKunde = (ObjectMessage) receiver.receive();
					kunde= (IKunde) loginKunde.getObject();
					System.out.println("Sie sind jetzt eingeloggt unter dem Benutzernamen: "+kunde.getBenutzernamen());

					break; 

				case "2": 	
					String logoutFunc="2";
					TextMessage logout =session.createTextMessage();
					logout.setText(logoutFunc);
					logout.setJMSReplyTo(tempQueue);
					sender.send(logout);

					ObjectMessage logoutKunde = session.createObjectMessage();
					logoutKunde.setObject((Serializable) kunde);
					logoutKunde.setJMSReplyTo(tempQueue);
					sender.send(logoutKunde);


					TextMessage logoutAccept = (TextMessage) receiver.receive();
					System.out.println(logoutAccept.getText());		

					break;


				case "3": 

					String kundenlisteFunc="3";
					TextMessage kundenListeCall =session.createTextMessage();
					kundenListeCall.setText(kundenlisteFunc);
					kundenListeCall.setJMSReplyTo(tempQueue);
					sender.send(kundenListeCall);

					TextMessage eingeloggteKunden = (TextMessage) receiver.receive();
					System.out.println(eingeloggteKunden.getText());		
					break;

				case "4" :
					String kundenInformationFunc="4";
					TextMessage  kundenInfoCall=session.createTextMessage();
					kundenInfoCall.setText(kundenInformationFunc);
					kundenInfoCall.setJMSReplyTo(tempQueue);
					sender.send(kundenInfoCall);

					TextMessage kundeninfo = (TextMessage) receiver.receive();
					System.out.println(kundeninfo.getText());		
					break;

				case "5" :
					String artikelFunc="5";
					TextMessage  artikellisteCall=session.createTextMessage();
					artikellisteCall.setText(artikelFunc);
					artikellisteCall.setJMSReplyTo(tempQueue);
					sender.send(artikellisteCall);

					TextMessage artikelliste = (TextMessage) receiver.receive();
					System.out.println(artikelliste.getText());		
					break;

				case "6" :
					String bestellungenFunc="6";
					TextMessage  bestellungenCall=session.createTextMessage();
					bestellungenCall.setText(bestellungenFunc);
					bestellungenCall.setJMSReplyTo(tempQueue);
					sender.send(bestellungenCall);


					TextMessage bestellungen = (TextMessage) receiver.receive();
					System.out.println(bestellungen.getText());		
					break;
				case "7" :
					String stornoFunc="7";
					TextMessage  stornoCall=session.createTextMessage();
					stornoCall.setText(stornoFunc);
					stornoCall.setJMSReplyTo(tempQueue);
					sender.send(stornoCall);


					TextMessage bestelllisteStorno = (TextMessage) receiver.receive();
					System.out.println(bestelllisteStorno.getText());	

					Benutzereingabe stornoId= new Benutzereingabe ("Bitte geben Sie nun die Id ein, welche Sie stornieren möchten: ");
					String stornoIdString= stornoId.getString();

					/*
					TextMessage  stornoIdSend=session.createTextMessage();
					stornoIdSend.setText(stornoIdString);
					stornoIdSend.setJMSReplyTo(tempQueue);
					sender.send(stornoIdSend);
					TextMessage stornoConfirm = (TextMessage) receiver.receive();
					System.out.println(stornoConfirm.getText());

					 */
					break;
				case "8":
					String neworderFunc="8";
					TextMessage  newOrderCall=session.createTextMessage();
					newOrderCall.setText(neworderFunc);
					newOrderCall.setJMSReplyTo(tempQueue);
					sender.send(newOrderCall);


					TextMessage artikelBestellung = (TextMessage) receiver.receive();
					System.out.println(artikelBestellung.getText());	

					String zusatzBestellposition="J";
					IBestellungen neueBestellung= new Bestellungen(kunde);
					BestellungenHandler bestellunghandler=new BestellungenHandler();
					while(zusatzBestellposition.equalsIgnoreCase("J")){
						String artikelnummer=new Benutzereingabe("Bitte geben Sie nun die Artikelnummer ein:").getString();
						String anzahleingabe =new Benutzereingabe("Bitte geben Sie nun die Anzahl ein:").getString();
						IBestellposition neueBestellposition = new Bestellposition(bestellunghandler.getArticleById(Integer.parseInt(artikelnummer)),Integer.parseInt(anzahleingabe));
						neueBestellung.addBestellposition(neueBestellposition);
						zusatzBestellposition = new Benutzereingabe("Moechten Sie eine weitere Bestellposition hinzufuegen? J/N").getString();;
					}

					ObjectMessage bestellungSend = session.createObjectMessage();
					bestellungSend.setObject((Serializable) neueBestellung);
					bestellungSend.setJMSReplyTo(tempQueue);
					sender.send(bestellungSend);


					TextMessage confirmation = (TextMessage) receiver.receive();
					System.out.println(confirmation.getText());

					break;

				case "9": 
					System.out.println( "Client ist geschlossen" );
					System.exit( 0 );
					break;

				}
			}
		}
		finally {
			sender.close();
			receiver.close();
			session.close();
			connection.close();
		}
	}

	private static String [] befuelleHauptmenue()
	{
		String [] hauptmenue = new String [9];
		hauptmenue [0] = "Login";
		hauptmenue [1] = "Logout";
		hauptmenue [2] = "Anzeigen eingeloggte Kunden";
		hauptmenue [3] = "Anzeigen der Kundendaten";
		hauptmenue [4] = "Anzeigen der Artikel die gekauft werden koennen";
		hauptmenue [5] = "Anzeige bisheriger Bestellungen";
		hauptmenue [6] = "Stornierung von Bestellungen";
		hauptmenue [7] = "Erstellen einer neuen Bestellung";
		hauptmenue [8] = "Programm beenden";
		return hauptmenue;
	}
}
```

Server:


```
package Server;


import interfaces.IArticle;
import interfaces.IBestellungen;
import interfaces.IKunde;

import java.io.Serializable;
import java.rmi.RemoteException;
import java.util.Iterator;
import java.util.List;

import javax.jms.JMSException;
import javax.jms.ObjectMessage;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueReceiver;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

public class JMSServer implements Serializable {
	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;
	private static final long serialVersionUID = 1L;
	IKunde kunde=null;



	public JMSServer() throws NamingException, JMSException {
		Context ctx = new InitialContext();
		factory = (QueueConnectionFactory) ctx.lookup("ConnectionFactory");
		queue = (Queue) ctx.lookup(DESTINATION);
	}
	public static void main(String[] args) throws Exception {
		JMSServer server = new JMSServer();
		server.process();

	}

	public void process() throws JMSException, RemoteException {
		BestellungenHandler bestellhandler = new BestellungenHandler();
		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();
			Queue tempQueue = (Queue) request.getJMSReplyTo();
			String benutzerAuswahl = request.getText();
			String [] benutzerAuswahlArray =benutzerAuswahl.split(",");

			switch (benutzerAuswahlArray[0]){
			case "1":

				kunde= bestellhandler.loginUser(benutzerAuswahlArray[1],benutzerAuswahlArray[2]);
				ObjectMessage response = session.createObjectMessage();
				response.setObject((Serializable) kunde);
				QueueSender loginSend = session.createSender(tempQueue);
				loginSend.send(response);
				break;
			case "2":
				ObjectMessage logoutKunden = (ObjectMessage) receiver.receive();
				IKunde logoutUser=(IKunde) logoutKunden.getObject();
				bestellhandler.logoutUser(logoutUser);
				String logoutText="Kunde erfolgreich ausgeloggt!";
				TextMessage logout =session.createTextMessage();
				logout.setText(logoutText);
				QueueSender logoutSend = session.createSender(tempQueue);
				logoutSend.send(logout);

			case "3":		

				String loggedInUsers="Momentan sind keine Kunden eingeloggt";
				List <IKunde> kundenListe = bestellhandler.getEingeloggteKunden();
				Iterator <IKunde> kundenListeAusgabe =kundenListe.iterator();
				if(kundenListeAusgabe.hasNext()){
					while ( kundenListeAusgabe.hasNext()) {
						IKunde eingeloggtekunde =kundenListeAusgabe.next();
						loggedInUsers = "Benutzername: "+eingeloggtekunde.getBenutzernamen()+ " Vorname: "+eingeloggtekunde.getVorname()+" Nachname: "+eingeloggtekunde.getNachname();
					}
				}

				TextMessage liste = session.createTextMessage();
				liste.setText(loggedInUsers);
				QueueSender loggedInUserSend = session.createSender(tempQueue);
				loggedInUserSend.send(liste);
				break;

			case "4":	

				String kundeninfo="+++++++++++++++++++++++++++ \n Ihre Kundeninformationen: \n"
						+" Benutzername: "+kunde.getBenutzernamen()
						+ "\n Vorname: "+kunde.getVorname()
						+ "\n Nachname: "+kunde.getNachname()
						+ "\n Straße: "+kunde.getStrasse()
						+ "\n PLZ: "+kunde.getPlz()
						+ "\n Ort: "+kunde.getOrt()
						+ "\n Kontonummer: "+kunde.getKontonummer()
						+"\n+++++++++++++++++++++++++++";

				TextMessage infoausgabe =session.createTextMessage();
				infoausgabe.setText(kundeninfo);
				QueueSender kundeninfoSend = session.createSender(tempQueue);
				kundeninfoSend.send(infoausgabe);

			case "5":	

				String artikel="";
				Iterator <IArticle> artikelliste = bestellhandler.getArticles().iterator(); 
				if(artikelliste.hasNext()){
					while ( artikelliste.hasNext()) {
						IArticle hilfsArtikelObject =artikelliste.next();
						artikel +="Artikelnummer:"+hilfsArtikelObject.getArtikelNummer()
								+" |Artikelname: "+hilfsArtikelObject.getArtikelBezeichnung()
								+" |Artikelbeschreibung: "+hilfsArtikelObject.getArtikelBeschreibung()
								+" |Artikelpreis: "+hilfsArtikelObject.getPreis().umrechnung()+"\n";

					}
				}
				else
				{
					artikel="Momentan können wir leider keine Artikel anbieten...";
				}
				TextMessage artikelausgabe =session.createTextMessage();
				artikelausgabe.setText(artikel);
				QueueSender artikelSend = session.createSender(tempQueue);
				artikelSend.send(artikelausgabe);

			case "6":	
				String benutzernameEingeloggterKunde = kunde.getBenutzernamen();
				String bestellungen="";
				Iterator <IBestellungen> bestellliste = bestellhandler.getBestellungen().iterator();
				if(bestellliste.hasNext()){
					while ( bestellliste.hasNext()) {
						IBestellungen bestellung =bestellliste.next();

						if(bestellung.getKundederBestellung().getBenutzernamen().equals(benutzernameEingeloggterKunde)){
							bestellungen +=
									"\n BestellId:"+bestellung.getBestellID()
									+"\n Bestelldatum: "+bestellung.getBestelldatum()
									+"\n Bestellpositionen: "+bestellung.ausgabe()
									+"\n Gesamtpreis: "+bestellung.getBestellungGesamt().umrechnung()
									+"\n";
						}

					}
				}

				TextMessage bestellausgabe =session.createTextMessage();
				bestellausgabe.setText(bestellungen);
				QueueSender bestelllisteSend = session.createSender(tempQueue);
				bestelllisteSend.send(bestellausgabe);

			case "7":	
				String benutzernameEingeloggterKundeStorno = kunde.getBenutzernamen();
				String bestellungenStorno="";
				Iterator <IBestellungen> bestelllisteStorno = bestellhandler.getBestellungen().iterator();
				if(bestelllisteStorno.hasNext()){
					while ( bestelllisteStorno.hasNext()) {
						IBestellungen bestellung =bestelllisteStorno.next();

						if(bestellung.getKundederBestellung().getBenutzernamen().equals(benutzernameEingeloggterKundeStorno)){
							bestellungenStorno +=
									"\n BestellId:"+bestellung.getBestellID()
									+"\n Bestelldatum: "+bestellung.getBestelldatum()
									+"\n Gesamtpreis: "+bestellung.getBestellungGesamt().umrechnung()
									+"\n";
						}
					}
				}

				TextMessage bestellausgabeStorno =session.createTextMessage();
				bestellausgabeStorno.setText(bestellungenStorno);
				QueueSender stornobestelllisteSend = session.createSender(tempQueue);
				stornobestelllisteSend.send(bestellausgabeStorno);
				/*
				TextMessage stornoId = (TextMessage) receiver.receive();
				String stornoIdString = stornoId.getText();
				int stornoIdInt= Integer.parseInt(stornoIdString);
				bestellhandler.loescheBestellung(stornoIdInt);

				String confirm="Ihre Bestellung wurde erfolgreich storniert!";
				TextMessage stornoConfirm =session.createTextMessage();
				stornoConfirm.setText(confirm);
				QueueSender confirmSend = session.createSender(tempQueue);
				confirmSend.send(stornoConfirm);
				 */
			case "8":

				String artikelBestellung="";
				Iterator <IArticle> artikellisteBestellung = bestellhandler.getArticles().iterator(); 
				if(artikellisteBestellung.hasNext()){
					while ( artikellisteBestellung.hasNext()) {
						IArticle hilfsArtikelObject =artikellisteBestellung.next();
						artikelBestellung +="Artikelnummer:"+hilfsArtikelObject.getArtikelNummer()
								+" |Artikelname: "+hilfsArtikelObject.getArtikelBezeichnung()
								+" |Artikelbeschreibung: "+hilfsArtikelObject.getArtikelBeschreibung()
								+" |Artikelpreis: "+hilfsArtikelObject.getPreis().umrechnung()+"\n";

					}
				}
				else
				{
					artikelBestellung="Momentan können wir leider keine Artikel anbieten...";
				}
				TextMessage artikelausgabeBestellung =session.createTextMessage();
				artikelausgabeBestellung.setText(artikelBestellung);
				QueueSender artikelBestellungSend = session.createSender(tempQueue);
				artikelBestellungSend.send(artikelausgabeBestellung);


				ObjectMessage bestellrecieve = (ObjectMessage) receiver.receive();
				IBestellungen bestellrecieveObject=(IBestellungen) bestellrecieve.getObject();
				bestellhandler.bestellunghinzufuegen(bestellrecieveObject);


				String confirmation ="Ihre Bestellung wurde erfolgreich angelegt!";
				TextMessage bestellungConfirm =session.createTextMessage();
				bestellungConfirm.setText(confirmation);
				QueueSender bestellConfirmSender = session.createSender(tempQueue);
				bestellConfirmSender.send(bestellungConfirm);




			}	




		}	

	}
}
```


----------



## mjustin (11. Mai 2014)

Fehlen da nicht einfach nur die *break* am Ende einiger *case* Zweige?


----------

