When designing an distributed application in Java there seem to be a few technologies that address the same kind of problem. I have briefly read about Java Remote Method Invocation and Java Message Service, but it is hard to really see the difference. Java RMI seems to be more tightly coupled than JMS because JMS uses asynchronous communication, but otherwise I don't see any big differences.
- What is the difference between them?
- Is one of them newer than the other one?
- Which one is more common/popular in enterprises?
- What advantages do they have over each other?
- When is one preferred over the other?
- Do they differ much in how difficult they are to implement?
I also think that Web Services and CORBA address the same problem.