1
2
3
4
5
6
7
8
9
10
11 package org.mule.transport.jms.vendors;
12
13 import org.mule.tck.FunctionalTestCase;
14 import org.mule.transport.jms.JmsConnector;
15 import org.mule.transport.jms.xa.ConnectionFactoryWrapper;
16 import org.mule.transport.jms.xa.ConnectionInvocationHandler;
17
18 import java.lang.reflect.Method;
19 import java.lang.reflect.Proxy;
20
21 import javax.jms.Connection;
22 import javax.jms.ConnectionFactory;
23
24 import org.apache.activemq.ActiveMQXAConnectionFactory;
25
26 public class ActiveMQXaJmsConnectorTestCase extends FunctionalTestCase
27 {
28 protected String getConfigResources()
29 {
30 return "activemq-xa.xml";
31 }
32
33 public void testReflectiveXaCleanup() throws Exception
34 {
35 JmsConnector c = (JmsConnector)muleContext.getRegistry().lookupConnector("jmsConnector");
36 assertNotNull(c);
37
38 ConnectionFactory cf = c.getConnectionFactory();
39 assertTrue(cf instanceof ActiveMQXAConnectionFactory);
40
41 ConnectionFactoryWrapper wrapper = new ConnectionFactoryWrapper(cf);
42
43 Connection connection = wrapper.createConnection();
44 assertNotNull(connection);
45 assertTrue(Proxy.isProxyClass(connection.getClass()));
46
47 try
48 {
49 final Class clazz = connection.getClass();
50 Method cleanupMethod;
51 if (Proxy.isProxyClass(clazz))
52 {
53 ConnectionInvocationHandler handler =
54 (ConnectionInvocationHandler) Proxy.getInvocationHandler(connection);
55
56 connection = (Connection) handler.getTargetObject();
57 Class realConnectionClass = connection.getClass();
58 cleanupMethod = realConnectionClass.getMethod("cleanup", (Class[])null);
59 }
60 else
61 {
62 cleanupMethod = clazz.getMethod("cleanup", (Class[])null);
63 }
64
65
66 if (cleanupMethod != null)
67 {
68 cleanupMethod.invoke(connection, (Object[])null);
69 }
70 }
71 finally
72 {
73 connection.close();
74 }
75
76
77 }
78 }