MDB - Obejctmessage exception
tweetysat Feb 4, 2011 8:46 AMHi.
I'm quite new with jms. I'm working with jboss 5.0.1.
First step was to create a producer and a consumer application. It's working fine. I tried sending/receiving a textmessage and an objectmessage. It's ok.
Second step. I'm trying to create a message driven bean. It's working fine receiving a textmessage but NOT working with an object message.
Perhaps you could help me.
My object
package objects;
import java.io.Serializable;
public class Student implements Serializable
{
private static final long serialVersionUID = 1L;
private String name;
private String school;
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public String getSchool()
{
return school;
}
public void setSchool(String school)
{
this.school = school;
}
@Override
public String toString()
{
return "Student [name="+this.name+",school="+this.school+"]";
}
}
My mdb
package jms;
import javax.annotation.Resource;
import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.ejb.MessageDrivenContext;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.ObjectMessage;
import javax.jms.TextMessage;
import messages.Student;
import org.apache.log4j.Logger;
import myobjects.Student;
@MessageDriven(name="ConsumerBean",
activationConfig =
{
@ActivationConfigProperty(propertyName="destinationType",propertyValue="javax.jms.Topic"),
@ActivationConfigProperty(propertyName="destination",propertyValue="topic/myTopic")
}
)
public class ConsumerBean implements MessageListener
{
@Override
public void onMessage(Message message)
{
Logger logger = Logger.getLogger(ConsumerBean.class);
logger.info("MDB v2 : "+message.toString());
if(message instanceof TextMessage)
{
String text = "";
try
{
text = ((TextMessage)message).getText();
}
catch (JMSException e)
{
e.printStackTrace();
}
logger.info("TextMessage : "+text);
}
else if(message instanceof ObjectMessage)
{
logger.info("ObjectMessage Detected");
Student st = null;
try
{
ObjectMessage om = (ObjectMessage) message;
logger.info("ObjectMessage Created");
Student s = (Student) om.getObject();
logger.info("Student created");
logger.info(s.toString());
}
catch (Exception e)
{
e.printStackTrace();
}
logger.info("Object Message : "+st.toString());
}
}}
Executing the line
Student s = (Student) om.getObject();
Produce this exception
10:14:14,850 ERROR [STDERR] java.lang.RuntimeException: Student
10:14:14,850 ERROR [STDERR] at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
10:14:14,850 ERROR [STDERR] at java.security.AccessController.doPrivileged(Native Method)
10:14:14,850 ERROR [STDERR] at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
10:14:14,850 ERROR [STDERR] at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
10:14:14,850 ERROR [STDERR] at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
10:14:14,850 ERROR [STDERR] at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
10:14:14,850 ERROR [STDERR] at java.lang.Class.forName0(Native Method)
10:14:14,850 ERROR [STDERR] at java.lang.Class.forName(Class.java:247)
...