+ /**
+ * A private method to get an object and create a stub
+ * <p>
+ * This is using the capability-based RMI skeleton and stub scheme
+ *
+ * @return Object
+ */
+ private Object getObjectFromStub() throws RemoteException,
+ ClassNotFoundException, NoSuchMethodException, InstantiationException,
+ IllegalAccessException, NotBoundException, InvocationTargetException, UnknownHostException {
+
+ // Translating into the actual Message class
+ MessageGetObject sMessage = (MessageGetObject) sIoTMasterMsg;
+ Object stubObjConv = null;
+ String strObjectName = sMessage.getObjectName();
+ String strObjClassInterfaceName = STR_OBJ_CLS_PFX + "." + STR_INTERFACE_PFX + "." +
+ sMessage.getObjectStubInterfaceName();
+ Class<?> clsInf = Class.forName(strObjClassInterfaceName);
+ if (mapObjNameStub.containsKey(strObjectName)) {
+ RuntimeOutput.print("IoTSlave: Getting back object on slave: " + strObjectName, BOOL_VERBOSE);
+ stubObjConv = clsInf.cast(mapObjNameStub.get(strObjectName));
+ } else {
+ // Instantiate the stub and put in the object
+ String strObjStubName = sMainObjectName + "." + sMessage.getObjectStubInterfaceName() + STUB_CLASS_SUFFIX;
+ Class<?> clsStub = Class.forName(strObjStubName); // Port number is integer
+ Class[] clsStubParams = { int.class, int.class, int.class, int.class, String.class, int.class };
+ Constructor<?> objStubCons = clsStub.getDeclaredConstructor(clsStubParams);
+
+ int rev = 0;
+ Object objStubParams[] = { 0, 0, sMessage.getRMIStubPort(), sMessage.getRMIRegPort(), sMessage.getHostAddress(), rev };
+ RuntimeOutput.print("IoTSlave: Creating RMI stub: " +
+ sMessage.getHostAddress() + ":" + sMessage.getRMIRegPort() +
+ " and RMI stub port: " + sMessage.getRMIStubPort(), BOOL_VERBOSE);
+ Object stubObj = objStubCons.newInstance(objStubParams);
+ // Class conversion to interface class of this class,
+ // e.g. ProximitySensorImpl has ProximitySensor interface
+ RuntimeOutput.print("IoTSlave: Registering new stub object: " + strObjectName, BOOL_VERBOSE);
+ mapObjNameStub.put(strObjectName, stubObj);
+ stubObjConv = clsInf.cast(stubObj);
+ }
+
+ return stubObjConv;
+ }
+