I'm sorry for the extremely URGENT nature of this question, but I believe
I've either come across a bug in AMQ 5.3.0 or I need additional
configuration settings.  I have multiple POJO(s) that are using an embedded
ActiveMQ broker via "vm" access.  They are sending custom objects around as
the payload of the event messages and we [cannot] have them being
serialized.

I have listed the problem, my debugging steps so far, and my code for
creating connections - in case I'm missing something.  I'm hoping that this
is a matter of me needing to do some extra configuration, so please advise! 

Thanks in advance,
Bob

===================================================

PROBLEM:
ObjectMessage(s) are [still] being serialized even after setting
setObjectMessageSerializationDefered = true and setCopyMessageOnSend = false
on my ActiveMQConnectionFactory object.

To verify that the instructions on the ActiveMQ site regarding disabling
ObjectMessage serialization are correct, I decided to implement
Externalizable on one of my custom classes that are in the object being put
in the ObjectMessage.  

I was very surprised to see that when the ObjectMessage is sent via
MessageProducer.send(om) - it is being serialized!  And, when the
ObjectMessage is dispatched into the MessageConsumer's onMessage, it is
being de-serialized.

So, I set a breakpoint in my readExternal and writeExternal methods.  The
code that is serializing the ObjectMessage is in: activemq-5.3.0 source:
ActiveMQConnection.java [lines 1662 - 1667].  I've listed them below.  It
even talks about copying the message in case an embedded broker is
dispatching via vm:// - which is confusing to me.

                        if (dispatcher != null) {
                            // Copy in case a embedded broker is dispatching
via
                            // vm://
                            // md.getMessage() == null to signal end of
queue
                            // browse.
                            Message msg = md.getMessage();
                            if (msg != null) {
                                msg = msg.copy();
                                msg.setReadOnlyBody(true);
                                msg.setReadOnlyProperties(true);
                               
msg.setRedeliveryCounter(md.getRedeliveryCounter());
                                msg.setConnection(ActiveMQConnection.this);
                                md.setMessage(msg);
                            }
                            dispatcher.dispatch(md);
                        }

SCENARIO:
I'm creating an embedded broker and creating connections from an
ActiveMQConnectionFactory instance that is using the URL =
"vm://MyEmbeddedBroker".  The code looks like the following.  I am then
creating a connection from this, which is then used for creating my
MessageProducer(s) and MessageConsumer(s).

        private String user = ActiveMQConnection.DEFAULT_USER;
        private String password = ActiveMQConnection.DEFAULT_PASSWORD;
        private String url = "vm://MyEmbeddedBroker";   
        private ActiveMQConnectionFactory connectionFactory;

        this.connectionFactory = new ActiveMQConnectionFactory(user,
password, url);
        this.connectionFactory.setOptimizedMessageDispatch(true);

        // set these so the object is NOT serialized when sending messages
        this.connectionFactory.setObjectMessageSerializationDefered(true);
        this.connectionFactory.setCopyMessageOnSend(false);


-- 
View this message in context: 
http://old.nabble.com/URGENT-QUESTION%3A-AMQ-5.3.0-bug-or-configuration-error------ObjectMessage-is--still--being-serialized-when-using-setObjectMessageSerializationDefered-and-setCopyMessageOnSend-tp27654579p27654579.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.

Reply via email to