# org.omg.stub.java.rmi

***

**1. Invoking a Remote Method with RMI**

```java
import org.omg.CORBA.ORB;
import org.omg.stub.java.rmi.Remote;
import org.omg.stub.java.rmi.RemoteStub;

public class Client {
    public static void main(String[] args) throws Exception {
        ORB orb = ORB.init(args, null);
        Remote obj = (Remote) orb.string_to_object("rmi://localhost:1099/Hello");
        String response = obj.invoke("sayHello", new Object[] {}, new String[] {});
        System.out.println(response);
    }
}
```

**2. Implementing a Remote Object with RMI**

```java
import org.omg.CORBA.ORB;
import org.omg.stub.java.rmi.Remote;
import org.omg.stub.java.rmi.RemoteStub;

public class HelloImpl extends RemoteStub implements Hello {
    @Override
    public String sayHello() {
        return "Hello, world!";
    }
}
```

**3. Passing Parameters to a Remote Method**

```java
import org.omg.CORBA.ORB;
import org.omg.stub.java.rmi.Remote;
import org.omg.stub.java.rmi.RemoteStub;

public class Client {
    public static void main(String[] args) throws Exception {
        ORB orb = ORB.init(args, null);
        Remote obj = (Remote) orb.string_to_object("rmi://localhost:1099/Calculator");
        int result = (int) obj.invoke("add", new Object[] { 1, 2 }, new String[] { "int", "int" });
        System.out.println(result);
    }
}
```

**4. Returning a Value from a Remote Method**

```java
import org.omg.CORBA.ORB;
import org.omg.stub.java.rmi.Remote;
import org.omg.stub.java.rmi.RemoteStub;

public class HelloImpl extends RemoteStub implements Hello {
    @Override
    public String sayHello(String name) {
        return "Hello, " + name + "!";
    }
}
```

**5. Handling Exceptions in Remote Methods**

```java
import org.omg.CORBA.ORB;
import org.omg.stub.java.rmi.Remote;
import org.omg.stub.java.rmi.RemoteStub;

public class CalculatorImpl extends RemoteStub implements Calculator {
    @Override
    public int divide(int numerator, int denominator) {
        if (denominator == 0) {
            throw new ArithmeticException("Cannot divide by zero");
        }
        return numerator / denominator;
    }
}
```

**6. Using an Interface to Define a Remote Object**

```java
import org.omg.CORBA.ORB;
import org.omg.stub.java.rmi.Remote;
import org.omg.stub.java.rmi.RemoteStub;

public class HelloImpl extends RemoteStub implements Hello {
    @Override
    public String sayHello() {
        return "Hello, world!";
    }
}

public interface Hello extends Remote {
    String sayHello();
}
```

**7. Using a Remote Reference to Call a Remote Method**

```java
import org.omg.CORBA.ORB;
import org.omg.CORBA.Object;
import org.omg.stub.java.rmi.Remote;
import org.omg.stub.java.rmi.RemoteStub;

public class Client {
    public static void main(String[] args) throws Exception {
        ORB orb = ORB.init(args, null);
        Object obj = orb.string_to_object("rmi://localhost:1099/Hello");
        Hello hello = (Hello) obj;
        String response = hello.sayHello();
        System.out.println(response);
    }
}
```

**8. Creating a Remote Object Factory**

```java
import org.omg.CORBA.ORB;
import org.omg.CORBA.ServerRequest;
import org.omg.stub.java.rmi.Remote;
import org.omg.stub.java.rmi.RemoteStub;

public class HelloFactory extends RemoteStub implements HelloFactory {
    @Override
    public ServerRequest _invoke(ServerRequest req) {
        Hello hello = new HelloImpl();
        return req.create_reply(hello);
    }
}
```

**9. Using a Remote Object Factory with Server-Side Activation**

```java
import org.omg.CORBA.ORB;
import org.omg.stub.java.rmi.Remote;
import org.omg.stub.java.rmi.RemoteStub;

public class Client {
    public static void main(String[] args) throws Exception {
        ORB orb = ORB.init(args, null);
        Remote obj = orb.string_to_object("rmi://localhost:1099/Hello");
        Hello hello = (Hello) obj;
        String response = hello.sayHello();
        System.out.println(response);
    }
}

public class HelloImpl extends RemoteStub implements Hello {
    @Override
    public String sayHello() {
        return "Hello, world!";
    }
}
```

**10. Creating a Remote Object Adapter**

```java
import org.omg.CORBA.ORB;
import org.omg.CORBA.portable.ServantObject;
import org.omg.stub.java.rmi.Remote;
import org.omg.stub.java.rmi.RemoteStub;

public class HelloAdapter extends ServantObject implements Remote {
    private Hello impl;

    public HelloAdapter(Hello impl) {
        this.impl = impl;
    }

    @Override
    public String _toString() {
        return impl._toString();
    }

    @Override
    public String _all_interfaces(ORB orb, boolean include_parents) {
        return impl._all_interfaces(orb, include_parents);
    }
}
```

**11. Using a Remote Object Adapter with Server-Side Activation**

```java
import org.omg.CORBA.ORB;
import org.omg.stub.java.rmi.Remote;
import org.omg.stub.java.rmi.RemoteStub;

public class Client {
    public static void main(String[] args) throws Exception {
        ORB orb = ORB.init(args, null);
        Remote obj = orb.string_to_object("rmi://localhost:1099/Hello");
        Hello hello = (Hello) obj;
        String response = hello.sayHello();
        System.out.println(response);
    }
}

public class HelloImpl extends RemoteStub implements Hello {
    @Override
    public String sayHello() {
        return "Hello, world!";
    }
}
```

\*\*12. Creating a Portable Remote Object (
