the significance of java RMI please?

Fermat's Little Student picture Fermat's Little Student · Jan 14, 2013 · Viewed 8.9k times · Source

Why do people use RMI, or when should I use RMI? I read those tutorials about RMI on oracle's website.But it doesn't provides enough practical examples.

To my understanding, a software should have its modules as "unrelated and separated" as possible. RMI somehow seems to be an example of high coupling to me. Why is this not a bad coding practice? I thought the client should only fire instructions,whereas all the actually manipulations of the object were done by the server.

(I am currently working towards a computer science bachelor degree and very inexperienced, so please correct me if I understand those concepts wrong.)

Thanks in advance!

Answer

Alex Recarey picture Alex Recarey · Jan 14, 2013

You really should not be using RMI for any application you build today, basically for the reasons you just laid out.

In some cases (diving into legacy or "enterprise" applications) you just have no choice.

However, if you are starting a new project, other options are:

REST + JSON over HTTP

The de-facto standard for communicating to remote services. The biggest advantage it has it that it is lightweight and easy to grasp the concept.

In theory it should require more work than RMI because you have to manually craft the available URL's, accepted verbs in each URL etc. In practice, I would say that RMI's boilerplate does not really help anybody.

Sticking with java, Jersey is a brilliant library to write your own RESTful web services.

If you want a batteries included solution for RESTful web services with java, Dropwizard by the nice guys at Yammer gives you a full server and framework ready to just plug in your business logic, and provides logging, database connectivity, serialization, request routing, and even metrics gathering out of the box.

SOAP

The previous standard for communicating to remote services. Unless you have a reason to use it, I would stick to REST.

Thrift

Thrift will create a client and a server stub, basically doing much of the work. The communication is in an efficient binary protocol. It's gaining popularity in the Java world as it is used by many open source projects in the "Big Data" field. Examples, Cassandra, HBase (switching to Avro). Scrooge is a twitter project to create idiomatic thrift stubs for scala.

Akka actors

Akka is framework that implements the Actor model for Scala and Java. Includes provisions for inter-service communication, and takes care of many of the details under the hood. I


Depending on your needs, some will be more suitable than others.