[QAARQ-26] Make monitoring commands compatible with publishing modules Created: 11/Dec/18  Updated: 11/Jul/22  Resolved: 12/Dec/18

Status: Closed
Project: Queued Asynchronous Activation over RabbitMQ
Component/s: monitoring
Affects Version/s: None
Fix Version/s: None

Type: Improvement Priority: Neutral
Reporter: Andrew Warinner Assignee: Richard Gange
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Template:
Acceptance criteria:
Empty
Task DoD:
[ ]* Doc/release notes changes? Comment present?
[ ]* Downstream builds green?
[ ]* Solution information and context easily available?
[ ]* Tests
[ ]* FixVersion filled and not yet released
[ ]  Architecture Decision Record (ADR)
Date of First Response:

 Description   

info.magnolia.rabbitmq.activation.commands.SplittedActivationProducerCommand extends BaseActivationCommand which no longer exists in Magnolia 5.6 publishing. 

This causes ClassNotFoundExceptions when ConfirmationConsumer processes ACK messages: 

2018-12-11 15:34:12,676 ERROR com.rabbitmq.client.impl.ForgivingExceptionHandler: Consumer info.magnolia.rabbitmq.consumers.ConfirmationConsumer@38954dc9 (confirmConsumer) method handleDelivery for channel AMQChannel(amqp://magnolia@127.0.0.1:5672/,1) threw an exception for channel AMQChannel(amqp://magnolia@127.0.0.1:5672/,1)2018-12-11 15:34:12,676 ERROR com.rabbitmq.client.impl.ForgivingExceptionHandler: Consumer info.magnolia.rabbitmq.consumers.ConfirmationConsumer@38954dc9 (confirmConsumer) method handleDelivery for channel AMQChannel(amqp://magnolia@127.0.0.1:5672/,1) threw an exception for channel AMQChannel(amqp://magnolia@127.0.0.1:5672/,1)java.lang.NoClassDefFoundError: info/magnolia/module/activation/commands/BaseActivationCommand at java.lang.ClassLoader.defineClass1(Native Method) ~[?:1.8.0_121] at java.lang.ClassLoader.defineClass(ClassLoader.java:763) ~[?:1.8.0_121] at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[?:1.8.0_121] at org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2277) ~[catalina.jar:8.5.12] at org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:811) ~[catalina.jar:8.5.12] at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1254) ~[catalina.jar:8.5.12] at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1119) ~[catalina.jar:8.5.12] at info.magnolia.rabbitmq.activation.io.StatusServiceImpl.updateActivationStatus(StatusServiceImpl.java:183) ~[magnolia-rabbitmq-activation-1.7.jar:?] at info.magnolia.rabbitmq.activation.io.StatusServiceImpl.notifyOnStatus(StatusServiceImpl.java:127) ~[magnolia-rabbitmq-activation-1.7.jar:?] at info.magnolia.rabbitmq.consumers.ConfirmationConsumer.processMessage(ConfirmationConsumer.java:91) ~[magnolia-rabbitmq-monitoring-1.7.jar:?] at info.magnolia.rabbitmq.activation.jobs.AckedMQConsumer.handleDelivery(AckedMQConsumer.java:74) ~[magnolia-rabbitmq-activation-1.7.jar:?] at com.rabbitmq.client.impl.ConsumerDispatcher$5.run(ConsumerDispatcher.java:149) [amqp-client-5.3.0.jar:5.3.0] at com.rabbitmq.client.impl.ConsumerWorkService$WorkPoolRunnable.run(ConsumerWorkService.java:104) [amqp-client-5.3.0.jar:5.3.0] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_121] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_121] at java.lang.Thread.run(Thread.java:745) [?:1.8.0_121]Caused by: java.lang.ClassNotFoundException: info.magnolia.module.activation.commands.BaseActivationCommand at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1285) ~[catalina.jar:8.5.12] at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1119) ~[catalina.jar:8.5.12] ... 16 more

Also ACK messages are left in the ACK queue after the above exceptions.



 Comments   
Comment by Karel de Witte [ 12/Dec/18 ]

This should have been  fixed in latest release, maybe there are other commmands still depending on that or monitoring module tracts wrong dependencies.

 

Comment by Richard Gange [ 12/Dec/18 ]

Yeah, I think you need to update your configuration. Both sets of commands exist in the module.

Comment by Richard Gange [ 12/Dec/18 ]

See: info.magnolia.rabbitmq.activation.commands.publishing.PublishingProducerCommand

This replaces: info.magnolia.rabbitmq.activation.commands.SplittedActivationProducerCommand

Comment by Andrew Warinner [ 12/Dec/18 ]

It's not a configuration problem: PublishingProducerCommand calls the StatusService implementation to update the activation status. The StatusService implementation calls a static method in SplittedActivationProducerCommand.

Kaboom, ClassNotFoundException.

Comment by Andrew Warinner [ 12/Dec/18 ]

cf: info.magnolia.rabbitmq.activation.io.StatusServiceImpl#updateActivationStatus:

if(result.getNodes().getSize()>=minNbrOfPublics){ //update the activation status SplittedActivationProducerCommand.updateActivationStatus(node,user,isRecurse,node.getPrimaryNodeType().getName()); node.getSession().save(); }
Comment by Richard Gange [ 12/Dec/18 ]

Yikes! Ok, I think we need to create some separate publishing modules. Wdyt?

magnolia-rabbitmq-publication

Comment by Andrew Warinner [ 12/Dec/18 ]

I don't think it's strictly necessary: it should be easy to refactor the RMQ commands to put the static method elsewhere. 

On the other hand, maybe it would be good to do a redivision of the modules to make supporting pre-5.6 publishing vs. post 5.6 publishing more convenient. 

AW

Comment by Richard Gange [ 12/Dec/18 ]

It's getting confusing I think. I mean we have a package called info.magnolia.rabbitmq.activation.commands.publishing :notsureifgusta:

Comment by Richard Gange [ 12/Dec/18 ]

I guess for now I will move the static method to the module class.

Comment by Richard Gange [ 13/Dec/18 ]

Backported to v1.7.1

Generated at Mon Feb 12 10:38:56 CET 2024 using Jira 9.4.2#940002-sha1:46d1a51de284217efdcb32434eab47a99af2938b.