Object from log4j is a String, should be pojo!
Can anyone work out what I�m doing wrong?
I�ve written an appender that extends JMS appender, and also a MDB to process the messages.
The logging message is a simple data container class called MonitorMessage.
However, the data object does not seem to be (de)serializing properly and is arriving in the MDB as a String. The Data class does implement serializable!
The junit test looks like this:
---
public void testSimpleMonAppender() {
MonitorMessage msg = new MonitorMessage( new Integer( 1 ) );
LOG.info( msg );
}
---
The relevant code in the MDB is:
---
public void onMessage( Message msg ) {
LOGGER.debug( "Got a monitoring message!" );
ObjectMessage om;
LoggingEvent event;
MonitorMessage message;
if( msg instanceof ObjectMessage ) {
om = (ObjectMessage)msg;
try {
// Get the logging event from the message
event = (LoggingEvent)om.getObject();
// Check the message type
LOGGER.debug("The message is an instance of " + event.getMessage().getClass());
LOGGER.debug("At level " + event.getLevel().toString());
if(event.getMessage() instanceof MonitorMessage) {
message = (MonitorMessage)event.getMessage();
LOGGER.debug("The id is " + message.getMessageIdentifier());
}
else if(event.getMessage() instanceof java.lang.String) {
LOGGER.debug("The string is " + event.getMessage());
}
else {
LOGGER.debug(event.getMessage().toString());
}
}
catch( javax.jms.JMSException ex ) {
LOGGER.error( "JMS exception when getting the logging event : ", ex );
}
}
else {
try {
LOGGER.warn( "Warning - the message type is " + msg.getJMSType() + ", the expected type was ObjectMessage" );
}
catch( javax.jms.JMSException ex ) {
LOGGER.error( "JMS exception when getting the JMS message type: ", ex );
}
}
LOGGER.debug( "Processed monitoring message!" );
}
}
---
The log4J debug from the MDB looks like this:
---
) - Processed monitoring message!
2005-07-06 11:34:57,268 [ExecuteThread: '13' for queue: 'weblogic.kernel.Default'] DEBUG (MonitorSubscriberBean.java:65)
- Got a monitoring message!
2005-07-06 11:34:57,270 [ExecuteThread: '13' for queue: 'weblogic.kernel.Default'] DEBUG (MonitorSubscriberBean.java:77)
- The message is an instance of class java.lang.String
2005-07-06 11:34:57,271 [ExecuteThread: '13' for queue: 'weblogic.kernel.Default'] DEBUG (MonitorSubscriberBean.java:78)
- At level INFO
2005-07-06 11:34:57,271 [ExecuteThread: '13' for queue: 'weblogic.kernel.Default'] DEBUG (MonitorSubscriberBean.java:84)
- The string is [ messageIdentifier = 1
2005-07-06 11:34:57,272 [ExecuteThread: '13' for queue: 'weblogic.kernel.Default'] DEBUG (MonitorSubscriberBean.java:104
) - Processed monitoring message!
---
What am I doing wrong?!
Tia,
Caroline.