1 package net.sf.crispy.impl;
2
3 import java.lang.reflect.Method;
4 import java.util.Properties;
5
6 import net.sf.crispy.InvocationStrategy;
7 import net.sf.crispy.proxy.StaticProxy;
8 import net.sf.crispy.strategy.NameInvocationStrategy;
9 import net.sf.crispy.util.Util;
10
11 import org.omg.CORBA.ORB;
12 import org.omg.CosNaming.NamingContextExt;
13 import org.omg.CosNaming.NamingContextExtHelper;
14
15 /**
16 * This implementation is <b>experimental</b>.
17 * <code>idlj -fall [idl_file_name].idl</code>
18 * @author Linke
19 *
20 */
21 public class StaticCorbaProxy extends StaticProxy {
22
23 private ORB orb = null;
24 private org.omg.CORBA.Object namingContext = null;
25 private NamingContextExt namingContextExt = null;
26
27 public String getDefaultUrlAndPort() {
28 return "localhost";
29 }
30
31 public InvocationStrategy getDefaultInvocationStrategy(Properties pvProperties) {
32 String lvInterfaceName = (String) pvProperties.get(PROPERTY_CURRENT_INTERFACE_CLASS);
33 lvInterfaceName = lvInterfaceName.replaceAll("\\.", "_");
34 return new NameInvocationStrategy(lvInterfaceName);
35 }
36
37 public Object newInstance(Class pvClass) {
38 try {
39 if (orb == null) {
40 String lvUrlAndPort = getUrlAndPort();
41 String lvUrlAndPortSeparated[] = null;
42
43 if (lvUrlAndPort != null && !lvUrlAndPort.equals("localhost")) {
44 lvUrlAndPortSeparated = Util.separateHostAndPort(lvUrlAndPort);
45 }
46
47 String lvPort = null;
48 String lvHost = null;
49 if (lvUrlAndPortSeparated != null) {
50 lvHost = lvUrlAndPortSeparated [0];
51 lvPort = lvUrlAndPortSeparated [1];
52 } else {
53 lvHost = getProperties().getProperty("org.omg.CORBA.ORBInitialHost", "127.0.0.1");
54 lvPort = getProperties().getProperty("org.omg.CORBA.ORBInitialPort", "1057");
55 }
56
57 Properties props = new Properties();
58 props.put("org.omg.CORBA.ORBInitialPort", lvPort);
59 props.put("org.omg.CORBA.ORBInitialHost", lvHost);
60
61 orb = ORB.init((String[]) null, props);
62 namingContext = orb.resolve_initial_references("NameService");
63 namingContextExt = NamingContextExtHelper.narrow(namingContext);
64 }
65
66 String lvBindName = getInvocationStrategy().toString();
67 if (log.isInfoEnabled()) {
68 log.info("LookUp-Name: " + lvBindName);
69 }
70 org.omg.CORBA.Object lvCorbaObject = namingContextExt.resolve_str(lvBindName);
71 String lvHelper = pvClass.getName();
72 Object lvProxyObject = createWithHelperCorbaObject(lvHelper, lvCorbaObject);
73 setProxyObject(lvProxyObject);
74 setProxyClass(pvClass);
75
76 } catch (Exception e) {
77 e.printStackTrace();
78 }
79
80 return getProxyObject();
81 }
82
83 public static Object createWithHelperCorbaObject (String pvServiceInterface, org.omg.CORBA.Object pvCorbaObject) {
84 try {
85 String lvHelper = pvServiceInterface + "Helper";
86 if (log.isInfoEnabled()) {
87 log.info("Create Helper: " + lvHelper);
88 }
89 Class lvHelperClass = Class.forName(lvHelper);
90 Method lvNarrowMethod = lvHelperClass.getMethod("narrow", new Class[] {org.omg.CORBA.Object.class});
91 Object lvReturnObject = (org.omg.CORBA.Object) lvNarrowMethod.invoke(null, new Object[] { pvCorbaObject });
92 return lvReturnObject;
93 } catch (Exception e) {
94 e.printStackTrace();
95 }
96 return null;
97 }
98
99 }