1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 package com.mjh.switchrmi.jndi;
28
29 import com.mjh.switchrmi.*;
30
31 import java.lang.reflect.*;
32
33 import java.net.*;
34
35 import java.util.*;
36
37 import javax.naming.*;
38 import javax.naming.spi.*;
39
40 import org.apache.log4j.Logger;
41
42 public class RmiProxyObjectFactory
43 extends RmiObjectFactoryBase
44 implements ObjectFactory
45 {
46 private static final Logger log =
47 Logger.getLogger(RmiProxyObjectFactory.class.getName());
48 private String url;
49 private String protocol;
50
51 public RmiProxyObjectFactory()
52 {
53 }
54
55 public Object getObjectInstance(Object obj, Name name, Context ctx,
56 Hashtable env)
57 throws Exception
58 {
59 Reference ref = (Reference) obj;
60
61 ctx = ((JndiContextImpl) ctx).getRootContext();
62
63 URL[] codebase = getCodebase(name, env);
64
65 if (log.isDebugEnabled())
66 {
67 log.debug("codebase = " + codebase);
68 }
69
70 ClassLoader loader = getClass().getClassLoader();
71
72 if (codebase != null)
73 {
74 loader = new URLClassLoader(codebase, loader);
75 }
76
77
78 Class[] interfaces = getInterfaces(name, env, loader);
79 Class clazz = loader.loadClass(getClassName(name, env));
80 Object target = clazz.newInstance();
81 RmiClientInvocationHandler handler =
82 new RmiClientInvocationHandler(
83 (String) getTypeInfoValue("url", name, env), interfaces,
84 (String) getTypeInfoValue("protocol", name, env), ctx);
85
86 return Proxy.newProxyInstance(getClass().getClassLoader(), interfaces,
87 handler);
88 }
89 }