Hallo zusammen
Ich probiere mit Jave EE (Netbeans verbunden mit Glasfish) ein einfaches Beispiel mit JMS zu erstellen.
Mein Beispiel funktioniert mit einem TextMessage fehlerfrei. Wenn ich es allerdings mit einem ObjectMessage versuche, dann scheitere ich an die ClassNotFoundException.
Ich habe zwei Projekte:
Projekt1: MyJavaQueue beinhaltet zwei Klassen:
Projekt2: MyReceiverJavaQueue beinhaltet ebenfalls zwei Klassen:
und die Klasse Person habe ich auch nochmals in diesem Projekt kopiert.
Ich erhalte beim Ausführen von MessageReceiver die folgende Exception:
Die Beispiele, die ich im Netz angeschaut habe, sind genau wie mein Beispiel aufgebaut.
Kennt jemand bereits dieses Problem, bzw. die Lösung?
Ich probiere mit Jave EE (Netbeans verbunden mit Glasfish) ein einfaches Beispiel mit JMS zu erstellen.
Mein Beispiel funktioniert mit einem TextMessage fehlerfrei. Wenn ich es allerdings mit einem ObjectMessage versuche, dann scheitere ich an die ClassNotFoundException.
Ich habe zwei Projekte:
Projekt1: MyJavaQueue beinhaltet zwei Klassen:
Java:
public class MessageSender
{
@Resource(mappedName = "jms/GlassFishMyConnectionFactory")
private static ConnectionFactory connectionFactory;
@Resource(mappedName = "jms/GlassFishMyQueue")
private static Queue queue;
public void produceMessages()
{
MessageProducer messageProducer;
ObjectMessage personMessage;
try
{
Connection connection = connectionFactory.createConnection();
Session session = connection.createSession(false,
Session.AUTO_ACKNOWLEDGE);
messageProducer = session.createProducer(queue);
personMessage = session.createObjectMessage();
Person myPerson = new Person("Peter", "Hans");
personMessage.setObject(myPerson);
messageProducer.send(personMessage);
messageProducer.close();
session.close();
connection.close();
}
catch (JMSException e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
new MessageSender().produceMessages();
}
}
Java:
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
private String lastname;
private String firsname;
public Person(String lastname, String firsname) {
this.lastname = lastname;
this.firsname = firsname;
}
public String getFirsname() {
return firsname;
}
public String getLastname() {
return lastname;
}
}
Java:
public class MessageReceiver
{
@Resource(mappedName = "jms/GlassFishMyConnectionFactory")
private static ConnectionFactory connectionFactory;
@Resource(mappedName = "jms/GlassMyBookQueue")
private static Queue queue;
public void getObjects()
{
Connection connection;
MessageConsumer messageConsumer;
ObjectMessage personMessage;
try
{
connection = connectionFactory.createConnection();
Session session = connection.createSession(false,
Session.AUTO_ACKNOWLEDGE);
messageConsumer = session.createConsumer(queue);
connection.start();
personMessage = (ObjectMessage) messageConsumer.receive();
if (personMessage != null)
{
System.out.println(((Person)personMessage.getObject()).getFirsname());
System.out.println();
}
messageConsumer.close();
session.close();
connection.close();
}
catch (JMSException e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
new MessageReceiver().getObjects();
}
}
Ich erhalte beim Ausführen von MessageReceiver die folgende Exception:
Java:
WARNING: [I500]: Caught JVM Exception: java.lang.ClassNotFoundException: myjavaqueue.Person
com.sun.messaging.jms.MessageFormatException: [C4015]: Deserialize message failed. - cause: java.lang.ClassNotFoundException: myjavaqueue.Person
at com.sun.messaging.jmq.jmsclient.ObjectMessageImpl.getObject(ObjectMessageImpl.java:221) etc...
Die Beispiele, die ich im Netz angeschaut habe, sind genau wie mein Beispiel aufgebaut.
Kennt jemand bereits dieses Problem, bzw. die Lösung?