wang feng wrote:
> Hi,all
> I has a scenario as below.
> When get a service,I want to use a common service class such as
> 'ServiceInvoker'.
> The use of the common class like a class reflect.
>
> ServiceInvoker.java
> public interface ServiceInvoker{
> Object invoke(String methodName,Class[] argType,Object[] args);
> }
>
> Calculator example:
> CalculatorService calculatorService =
> scaDomain.getService(CalculatorService.class, "CalculatorServiceComponent");
> double res = calculatorService.add(3.0, 2.0)
>
> To
> ServiceInvoker invoker = scaDomain.getService("CalculatorServiceComponent");
> Object res = invoker.invoke("add",new Class[]{Double.class,Double.class},new
> Double[]{2.0,3.0});
>
> How can I do for this,anyone has advice.
>
> Thanks
> Wang Feng
>
You can do the following:
(A) use reflection, not very different from your ServiceInvoker:
Object service = scaDomain.getService("CalculatorServiceComponent");
Object res = service.getClass().
getMethod("add", new Class[]{Double.class, Double.class}).
invoke(new Double[]{2.0, 3.0});
(B) Create a utility class wrapping the above code to provide the
invocation API you want:
Object res = ServiceInvoker.invoke(service, "add",
new Class[]{Double.class, Double.class}, new Double[]{2.0, 3.0}
(C) Customize the Tuscany JDKProxyFactory (to create proxies that
implement your ServiceInvoker interface) or come up with a different
implementation of ProxyFactory and configure the runtime to use it.
I would suggest to:
- Try to go with (A) as it's a standard API, not much more complicated
than ServiceInvoker, and will probably perform better as it allows the
caller to cache the Class and Method in variables instead of looking up
the "add" method for each call.
- If (A) really does not meet your requirements go with (B), which
provides almost the same API as your ServiceInvoker on top of standard
Java reflection.
- Do (C) only if you really can't do (A) or (B), as with (C) you are
starting to be dependent on Tuscany SPIs and a specific customization of
the Tuscany runtime. You're also stepping away from the SCA standard as
your applications will start to depend on that non-standard
ServiceInvoker and its implementation as a customization of Tuscany.
Hope this helps.
--
Jean-Sebastien
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]