Details
-
Feature Request
-
Resolution: Won't Do
-
Minor
-
None
-
JBossAS-4.0.2 Final, JBossAS-4.0.3 SP1, JBossAS-4.0.4RC1
-
None
Description
Proxying of mq destinations is impossible because of lack of Interface for SpyDestination.class
Even proxying with CGLib won't work because SpyDestination.class has no public constructor.
Following configuration:
<bean id="deadLetterQueue" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="queue/DLQ" />
<property name="cache" value="false" />
<property name="proxyInterface" value="javax.jms.Queue" />
</bean>
produces output:
org.springframework.jms.InvalidDestinationException: Destination is not an instance of SpyDestination QUEUE.DLQ; nested exception is javax.jms.InvalidDestinationException: Destination is not an instance of SpyDestination QUEUE.DLQ; nested exception is javax.jms.InvalidDestinationException: Destination is not an instance of SpyDestination QUEUE.DLQ
javax.jms.InvalidDestinationException: Destination is not an instance of SpyDestination QUEUE.DLQ
at org.jboss.mq.SpyMessageProducer.send(SpyMessageProducer.java:225)
at org.jboss.mq.SpyMessageProducer.send(SpyMessageProducer.java:212)
at org.springframework.jms.core.JmsTemplate.doSend(JmsTemplate.java:519)
at org.springframework.jms.core.JmsTemplate.doSend(JmsTemplate.java:504)
at org.springframework.jms.core.JmsTemplate$2.doInJms(JmsTemplate.java:479)
at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:432)
at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:477)
at org.springframework.jms.core.JmsTemplate.convertAndSend(JmsTemplate.java:543)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
changing proxyInterface to: javax.jms.Destination
Code:
<bean id="responseQueue" class="org.springframework.jndi.JndiObjectFactoryBean" lazy-init="false">
<property name="jndiName" value="queue/konektor_out" />
<property name="cache" value="false" />
<property name="proxyInterface" value="javax.jms.Destination" />
</bean>
produces following output:
java.lang.ClassCastException: $Proxy1
at org.jboss.mq.SpySession.createProducer(SpySession.java:657)
at org.springframework.jms.core.JmsTemplate.doCreateProducer(JmsTemplate.java:807)
at org.springframework.jms.core.JmsTemplate.createProducer(JmsTemplate.java:788)
at org.springframework.jms.core.JmsTemplate.doSend(JmsTemplate.java:498)
at org.springframework.jms.core.JmsTemplate$2.doInJms(JmsTemplate.java:479)
at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:432)
at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:477)
at org.springframework.jms.core.JmsTemplate.convertAndSend(JmsTemplate.java:543)
can anyone tell is it possible to change behaviour of this code:
SpyMessageProducer.class
if (destination == null || (destination instanceof SpyDestination) == false)
throw new InvalidDestinationException("Destination is not an instance of SpyDestination " + destination);
if SpyDestination was an interface in the code above, everything would be fine.