1 21 22 package com.rift.coad.daemon.messageservice.rpc; 24 25 import java.lang.reflect.Method ; 27 import java.lang.reflect.Proxy ; 28 import java.util.List ; 29 import javax.naming.InitialContext ; 30 31 38 public class RPCMessageClient { 39 40 43 private RPCMessageClient() { 44 } 45 46 47 58 public static Object create(String from, Class targetInterface, 59 Class asyncInterface, String targetURL) throws 60 RPCMessageClientException { 61 verify(targetInterface,asyncInterface); 62 RPCMessageHandler handler = new RPCMessageHandler(from,targetInterface, 63 targetURL,true); 64 return Proxy.newProxyInstance( 65 asyncInterface.getClassLoader(), 66 new Class [] {asyncInterface},handler); 67 } 68 69 70 83 public static Object create(String from, Class targetInterface, 84 Class asyncInterface, List services, boolean broadcast) throws 85 RPCMessageClientException { 86 verify(targetInterface,asyncInterface); 87 RPCMessageHandler handler = new RPCMessageHandler(from, targetInterface, 88 services, broadcast,true); 89 return Proxy.newProxyInstance( 90 asyncInterface.getClassLoader(), 91 new Class [] {asyncInterface},handler); 92 } 93 94 95 107 public static Object createOneWay(String from, Class targetInterface, 108 Class asyncInterface, String targetURL) throws 109 RPCMessageClientException { 110 verify(targetInterface,asyncInterface); 111 RPCMessageHandler handler = new RPCMessageHandler(from,targetInterface, 112 targetURL,false); 113 return Proxy.newProxyInstance( 114 asyncInterface.getClassLoader(), 115 new Class [] {asyncInterface},handler); 116 } 117 118 119 133 public static Object createOneWay(String from, Class targetInterface, 134 Class asyncInterface, List services, boolean broadcast) throws 135 RPCMessageClientException { 136 verify(targetInterface,asyncInterface); 137 RPCMessageHandler handler = new RPCMessageHandler(from, targetInterface, 138 services, broadcast,false); 139 return Proxy.newProxyInstance( 140 asyncInterface.getClassLoader(), 141 new Class [] {asyncInterface},handler); 142 } 143 144 145 157 public static Object create(String from, Class targetInterface, 158 Class asyncInterface, String targetURL, String correlationId) throws 159 RPCMessageClientException { 160 verify(targetInterface,asyncInterface); 161 RPCMessageHandler handler = new RPCMessageHandler(from, targetInterface, 162 targetURL, correlationId); 163 return Proxy.newProxyInstance( 164 asyncInterface.getClassLoader(), 165 new Class [] {asyncInterface},handler); 166 } 167 168 169 183 public static Object create(String from, Class targetInterface, 184 Class asyncInterface, List services, boolean broadcast, 185 String correlationId) throws RPCMessageClientException { 186 verify(targetInterface,asyncInterface); 187 RPCMessageHandler handler = new RPCMessageHandler(from, targetInterface, 188 services, broadcast, correlationId); 189 return Proxy.newProxyInstance( 190 asyncInterface.getClassLoader(), 191 new Class [] {asyncInterface},handler); 192 } 193 194 195 208 public static Object create(InitialContext context, String jndiURL, 209 String from, Class targetInterface, Class asyncInterface, 210 String targetURL) throws RPCMessageClientException { 211 verify(targetInterface,asyncInterface); 212 RPCMessageHandler handler = new RPCMessageHandler(context, jndiURL, 213 from, targetInterface, targetURL); 214 return Proxy.newProxyInstance( 215 asyncInterface.getClassLoader(), 216 new Class [] {asyncInterface},handler); 217 } 218 219 220 235 public static Object create(InitialContext context, String jndiURL, 236 String from, Class targetInterface, Class asyncInterface, List services, 237 boolean broadcast) throws RPCMessageClientException { 238 verify(targetInterface,asyncInterface); 239 RPCMessageHandler handler = new RPCMessageHandler(context, jndiURL, 240 from, targetInterface, services, broadcast); 241 return Proxy.newProxyInstance( 242 asyncInterface.getClassLoader(), 243 new Class [] {asyncInterface},handler); 244 } 245 246 247 255 private static void verify(Class targetInterface, Class asyncInterface) 256 throws RPCMessageClientException { 257 Method [] methods = asyncInterface.getMethods(); 258 for (int index = 0; index < methods.length; index++) { 259 Method method = methods[index]; 260 try { 261 targetInterface.getMethod(method.getName(), 262 method.getParameterTypes()); 263 } catch (Exception ex) { 264 throw new RPCMessageClientException( 265 "Could not validate the methods : " + ex.getMessage(), 266 ex); 267 } 268 if (method.getReturnType() != java.lang.String .class) { 269 throw new RPCMessageClientException( 270 "The return type of the async interface must be a " + 271 "String. As it will contain the new Message Id"); 272 } 273 } 274 } 275 } 276 | Popular Tags |