DefaultJmsListenerContainerFactory vs DefaultMessageListenerContainer
Asked Answered
B

1

8

What are the advantages of using DefaultJmsListenerContainerFactory over DefaultMessageListenerContainer ?

  • If i configure DMLC directly , i do get a handle to check the status by calling isRunning(). Also i do get a facility to start and stop the DMLC

  • However, per new spring specs, if i configure DefaultJmsListenerContainerFactory , i do not get handle of DMLC, so i am unable to do any of above operations.

So looking at above limitation, can somebody explain why one should use DefaultJmsListenerContainerFactory over DMLC

Also, if i use DefaultJmsListenerContainerFactory , what are the ways to achive above functionality?

Bondmaid answered 29/10, 2015 at 5:57 Comment(0)
R
8

The factory was introduced to support the creation of listener containers for @JmsListener annotated POJO methods.

If you are not using that mechanism, you can continue to define your DLMC directly.

EDIT

When using @JmsListener, the containers are not registered as beans themselves, but are available using the registry bean; you can get a reference to the container so you can start/stop etc.

See the javadocs for the JmsListenerEndpointRegistry for how to get references to the containers either individually by id, or all.

EDIT2

I am not sure what you mean in comment 3; the registry has all containers, regardless of which container factory was used to create the container...

@JmsListener(id="foo", destination="foo", containerFactory="one")
public void listen1(String payload) {
    System.out.println(payload + "foo");
}

@JmsListener(id="bar", destination="bar", containerFactory="two")
public void listen2(String payload) {
    System.out.println(payload + "bar");
}

If you are using configureListenerContainers() to programmatically create endpoints, you have to provide them with containers not container factories.

Regardful answered 29/10, 2015 at 12:57 Comment(3)
I am using @JmsListener ...However in that case also there should be some handle to start and stop the listener manuallyBondmaid
I tried above approach and it worked. However, in my application i am going to create two instances of DefaultJmsListenerContainerFactory as i have two diff QM. In that case, how can i add two factories from configureJmsListeners method?Bondmaid
See my next edit. It's generally better to ask a new question rather than commenting on a closed one.Regardful

© 2022 - 2024 — McMap. All rights reserved.