1    //
2    // SwitchRMI  Framework
3    // Copyright (c) 2000-2002 by Michael J. Henderson & Associates.
4    //
5    // Michael Henderson
6    // http://switchrmi.sf.net
7    // mailto:mikehenderson@dunelm.org.uk
8    //
9    // This library is free software.
10   //
11   // You may redistribute it and/or modify it under the terms of the GNU
12   // Lesser General Public License as published by the Free Software Foundation.
13   //
14   // Version 2.1 of the license should be included with this distribution in
15   // the file LICENSE, as well as License.html. If the license is not
16   // included with this distribution, you may find a copy at the FSF web
17   // site at 'www.gnu.org' or 'www.fsf.org', or you may write to the
18   // Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139 USA.
19   //
20   // This library is distributed in the hope that it will be useful,
21   // but WITHOUT ANY WARRANTY; without even the implied waranty of
22   // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
23   // Lesser General Public License for more details.
24   //
25   // $Id: RmiClientInvocationHandler.java,v 1.1 2002/11/11 22:19:48 mikehenderson Exp $
26   //
27   package com.mjh.switchrmi;
28   
29   import java.lang.reflect.Method;
30   
31   import java.util.HashMap;
32   
33   import javax.naming.*;
34   
35   import org.apache.log4j.Logger;
36   
37   public class RmiClientInvocationHandler
38       extends RmiInvocationHandlerBase
39   {
40       private static final Logger log = 
41               Logger.getLogger(RmiClientInvocationHandler.class.getName());
42       private String targetUrl;
43       private String protocolName;
44       private RmiContext context;
45       private RmiHandler handler;
46       private Context jndiContext;
47   
48       public RmiClientInvocationHandler(String url, Class[] intrfaces)
49       {
50           super(intrfaces);
51           targetUrl = url;
52       }
53   
54       public RmiClientInvocationHandler(String url, Class[] intrfaces, 
55                                         String protocolName, Context ctx)
56       {
57           this(url, intrfaces);
58           this.protocolName = protocolName;
59           jndiContext = ctx;
60       }
61   
62       private void init() throws Exception
63       {
64           context = new RmiContextImpl(false, targetUrl, jndiContext, 
65                                        protocolName);
66           handler = new RmiHandler();
67       }
68   
69       public Object rmiInvoke(Object target, Method method, Object[] args)
70                        throws Throwable
71       {
72           if (context == null)
73           {
74               init();
75           }
76   
77           return handler.clientInvoke(method, args, context);
78       }
79   
80       public String toString()
81       {
82           return "RmiClientInvocationHandler(url=" + targetUrl + ")";
83       }
84   }