The signature of the PortableRemoteObject.narrow() method is:
public static Object narrow(Object narrowFrom, Class narrowTo)
The narrow method returns an Object which contains a HelloHome interface type. To assign it to your HelloHome "home" variable, you have to explicitly cast the returned Object to the HelloHome interface.
The narrow method is there only to allow interoperability with RMI-IIOP, which requires the explicit checking of types in the narrow method. (I think this might not actually be a cast conversion to HelloHome though.) If you look at the method, you can see it takes an Object parameter, and then returns the same Object again. But then you know it is safe to perform the Java cast afterwards.
Some application servers such as Weblogic don't require the narrow method, but they still recommend it for interoperability.
see
http://edocs.bea.com/wle/rmi/rmiapi.htm [ June 20, 2003: Message edited by: Dave Cronin ]