[
https://issues.apache.org/activemq/browse/SM-1786?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=49117#action_49117
]
Torsten Mielke commented on SM-1786:
------------------------------------
Thanks Freeman,
I know reflection is currently used here in order to invoke the protected
doSend() method on the Spring JmsTemplate class. This avoids recreating a new
jms session. However I believe this code rather looks like a hack than a proper
solution. It also supresses Java language access checking. Therefore I
suggested another solution based on subclassing the Spring JmsTemplate class
and invoke the doSend() method directly, not requiring reflection. This
solution will still avoid creating a new jms session but use the existing
session. No benefits are lost. A patch is attached.
Btw, the idea of subclassing jms session was brought up by Guillaume Nodet when
I discussed this issue with him. He did already agree to this solution.
> Refactor JmsProviderEndpoint to not use reflection to call protected method
> on Spring JmsTemplate class
> -------------------------------------------------------------------------------------------------------
>
> Key: SM-1786
> URL: https://issues.apache.org/activemq/browse/SM-1786
> Project: ServiceMix
> Issue Type: Improvement
> Components: servicemix-jms
> Affects Versions: servicemix-jms-2008.01
> Reporter: Torsten Mielke
> Priority: Minor
> Attachments: SM-1786.patch
>
>
> A recent fix changed JmsProviderEndpoint.java and calls the Spring
> JmsTemplate protected method doSend() directly via reflection.
> {code:java}
> Method method = JmsTemplate.class.getDeclaredMethod("doSend", Session.class,
> Destination.class, MessageCreator.class);
> method.setAccessible(true);
> method.invoke(template, session, dest, new MessageCreator() {
> public Message createMessage(Session session) throws JMSException {
> return message;
> }
> });
> {code}
> This new approach is based on java.lang.reflect and uses private methods of
> the JmsTemplate. Do the latest problem related to JmsProviderEndpoint really
> justify using private methods?
> Please consider refactoring the code above.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.