Skip to main content

What is RMI? Explain With its architecture. Differentiate it with CORBA.

 RMI (Remote Method Invocation) is a Java API that allows distributed applications to communicate and invoke methods on remote objects. It provides a mechanism for a client to invoke methods on a remote object running on a server, as if the object were running on the client's machine. RMI is based on the Java Remote Procedure Call (RPC) mechanism.

The architecture of RMI consists of the following components:

  1. Remote interface: This interface specifies the methods that can be invoked remotely by a client.
  2. Remote object: This object implements the remote interface and provides the methods that can be invoked remotely by a client.
  3. Stub: This object is responsible for marshalling the parameters of a remote method invocation and sending them to the server.
  4. Skeleton: This object is responsible for unmarshalling the parameters of a remote method invocation and invoking the method on the server.
  5. Registry: This is a service that allows clients to look up remote objects by name.
  6. Client: This is the application that invokes methods on a remote object.
  7. Server: This is the application that provides the remote object and responds to method invocations from clients.


RMI can be compared to CORBA (Common Object Request Broker Architecture), which is a platform-independent, language-independent middleware system that allows objects to communicate with each other in a distributed environment. While both RMI and CORBA provide mechanisms for distributed communication and method invocation, there are some differences between them:

  1. RMI is a Java-specific technology, while CORBA supports multiple programming languages.
  2. RMI uses Java object serialization to transfer data between client and server, while CORBA uses a standard data representation called the Common Data Representation (CDR).
  3. RMI is simpler to use and has better integration with Java, while CORBA is more complex but offers more flexibility and interoperability.
  4. RMI provides tighter integration with Java's security model, while CORBA provides a more general security model.

In general, RMI is a good choice for Java-based distributed applications, while CORBA is a better choice for more complex, heterogeneous environments that involve multiple programming languages and platforms.

Comments

Popular posts from this blog

Write a program using the algorithm count() to count how many elements in a container have a specified value.

 Here's an example program using the count() algorithm to count the number of occurrences of a specific value in a vector container: #include <iostream> #include <vector> #include <algorithm> using namespace std; int main() {     vector<int> numbers = { 2, 5, 3, 7, 8, 5, 1, 5, 4 };          // count the number of occurrences of the value 5 in the vector     int count = count(numbers.begin(), numbers.end(), 5);          cout << "The number of occurrences of 5 in the vector is: " << count << endl;          return 0; } Output: The number of occurrences of 5 in the vector is: 3 Explanation: The program starts by creating a vector named numbers that contains several integer values. The count() algorithm is used to count the number of occurrences of the value 5 in the numbers vector. The function takes three arguments: the beginning and end iterators of...

Define polymorphism. Differentiate between overloading and overriding method with example.

 Polymorphism is a concept in object-oriented programming that allows objects of different classes to be treated as if they were objects of the same class. It allows a single method or operation to have different meanings or behaviors based on the context in which it is used. In Java, there are two types of polymorphism: Compile-time Polymorphism: This is achieved through method overloading, where two or more methods in a class have the same name but different parameters. Runtime Polymorphism: This is achieved through method overriding, where a subclass provides its own implementation of a method that is already defined in its parent class. Here is an example of method overloading: class MyClass {    public int sum(int a, int b) {       return a + b;    }    public double sum(double a, double b) {       return a + b;    } } public class Main {    public static void main(String[] args) {     ...

write a program in C++ to overload '-' operator to find difference of two complex object.

write a program to overload '-' operator to find difference of two complex object /* program in C++ to overload '-' operator to find difference of two complex object */ #include<iostream> using namespace std; class Complex{     public:     float a, b;     complex(): a(0), b(0) {}     complex(float x, float y): a(x), b(y){}     void display(){          cout<<this->a<<"+"<<this->b<<"i"<<endl;     }     friend Complex operator-(const Complex&, const Complex&); }; complex operator-(const Complex& com, const Complex& comp){     float x= com.a - comp.a;     foat y= com.b - comp.b;     return Complex(x,y); } int main(){     Complex a(1,7), b(6,9);     cout<<"A = ";a.display();      cout<<"B = ";b.display();      cout<<"A - B = ";(a-b).display(); ...