The only components which support transformers are diverts and core
bridges. You can use the transformer-class-name attribute in the
corresponding WildFly configuration to set it.

However, this will not help your issue because the transformer has nothing
to do with ObjectMessage serialization. The serialization & deserialization
is performed when you invoke the ObjectMessage's setObject & getObject
methods respectively. There's really no way to avoid the performance
penalty when using ObjectMessage.


Justin

On Sat, Mar 18, 2023 at 1:16 AM Walter Krix (Nokia) <walter.k...@nokia.com>
wrote:

> Hey Justin,
>
>
> Just wanted to drop a quick note to say thanks for the detailed answer you
> gave us. It really helped shed some light on the issue we're dealing with.
>
>
> We're considering your suggestions and are thinking about trying out some
> other message types besides ObjectMessage. But if we're stuck using
> ObjectMessage, we might have a workaround to skip the
> serialization/deserialization process using a simple transformer.
>
>
> We whipped up a custom transformer class called
> "NoSerializationTransformer" that implements the Transformer interface.
> Here's what the code looks like:
>
>
> public class NoSerializationTransformer implements Transformer {
>
>
> @Override
>
> public Message transform(Message message) {
>
>     return message;
>
> }
>
> }
>
>
> Do you know if it's possible to set this custom transformer for the
> Artemis subsystem of Wildfly? We checked the docs but couldn't find the
> info we needed. Not sure if this transformer approach is even doable, or if
> this code snippet would be enough. Any advice on what we should do next?
>
>
> Thanks again for your time and expertise, Justin. Looking forward to
> hearing back from you.
>
>
> Cheers,
>
> Walter
>
> ________________________________
> From: Justin Bertram <jbert...@apache.org>
> Sent: Saturday, March 18, 2023 2:49:33 AM
> To: users@activemq.apache.org <users@activemq.apache.org>
> Subject: Re: wildfly 26.1.2 support
>
> [You don't often get email from jbert...@apache.org. Learn why this is
> important at https://aka.ms/LearnAboutSenderIdentification ]
>
> CAUTION: This is an external email. Please be very careful when clicking
> links or opening attachments. See http://nok.it/ext for additional
> information.
>
>
>
> As far as I'm aware there is no optimization to avoid serialization for
> ObjectMessage instances even within the same JVM. I think such an
> optimization is theoretically feasible, but it would not be
> straightforward, and it would be optimizing a use-case that's well-known
> for bad performance. In short, if you want good performance don't use
> ObjectMessage.
>
> The "Performance Tuning" chapter in the ActiveMQ Artemis documentation [1]
> states:
>
>     Avoid ObjectMessage. ObjectMessage is convenient but it comes at a
> cost. The body of a
>     ObjectMessage uses Java serialization to serialize it to bytes. The
> Java serialized form of
>     even small objects is very verbose so takes up a lot of space on the
> wire, also Java
>     serialization is slow compared to custom marshalling techniques. Only
> use ObjectMessage
>     if you really can't use one of the other message types, i.e. if you
> really don't know the type
>     of the payload until run-time.
>
> There is even a comment on the ActiveMQ Artemis implementation of
> ObjectMessage (i.e.
> org.apache.activemq.artemis.jms.client.ActiveMQObjectMessage) [2]:
>
>     /**
>      * ActiveMQ Artemis implementation of a JMS ObjectMessage.
>      * <br>
>      * Don't used ObjectMessage if you want good performance!
>      * <p>
>      * Serialization is slooooow!
>      */
>
> I have personally warned folks away from ObjectMessage many times on Stack
> Overflow not just because of the performance issues, but because of
> security issues as well.
>
> In short, don't use ObjectMessage if at all possible.
>
>
> Justin
>
> [1]
>
> https://activemq.apache.org/components/artemis/documentation/latest/perf-tuning.html#tuning-jms
> [2]
>
> https://github.com/apache/activemq-artemis/blob/main/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQObjectMessage.java#L33
>
> On Fri, Mar 17, 2023 at 5:52 PM Walter Krix (Nokia) <walter.k...@nokia.com
> >
> wrote:
>
> > Dear ActiveMQ Artemis Developers,
> >
> >
> > I am writing to inquire about the configuration of the ActiveMQ Artemis
> > subsystem in Wildfly 26.1.2, with regards to serialization and
> > deserialization of complex Java objects.
> >
> >
> > Currently, when using Artemis on Wildfly and sending complex Java
> objects,
> > the message is automatically serialized. However, I would like to disable
> > this feature if possible, as I believe it should not be necessary since
> > both Artemis and Wildfly are running within the same JVM.
> >
> >
> > I would greatly appreciate it if you could provide me with information on
> > how to achieve this configuration. Any guidance, documentation or
> resources
> > you can offer to assist me in this matter would be most helpful.
> >
> >
> > Thank you for your time and attention to this matter. I look forward to
> > hearing back from you soon.
> >
> >
> > Sincerely,
> >
> > Walter Krix
> >
> >
> >
>

Reply via email to