This week's book giveaway is in the OO, Patterns, UML and Refactoring forum. We're giving away four copies of Refactoring for Software Design Smells: Managing Technical Debt and have Girish Suryanarayana, Ganesh Samarthyam & Tushar Sharma on-line! See this thread for details.
I know a remote client can't use a local interface but Can a local client use a remote interface?
Well, just the term remote can be confusing.
It'd perhaps be easier if you keep in mind the term component interface. Every session or entity bean must have two interfaces: home interface and component interface.
Local clients "use" local home interface and local component interface. Remote clients "use" remote home interface and remote component interface.
You know that component interface is for remote client when you see that it implements EJBObject as against the component interface for local client, which will implement EJBLocalObject. LIkewise, the home interface for remote client must implement EJBLocalHome and the home interface for local client must implement EJBLocalHome. Then there's the RemoteException which makes it obvious too.
You can surely use remote interface through local client. That is what everyone was doing in previous versions of EJB.
The problem was, even if my client (Mostly servlets) are sitting on same machine and same appserver/webserver combination, One was required to make remote calls through RMI.
What EJB 2.0 provided was Local interfaces for EJBHome and EJBObject and provided normal java object references so as to bypass "not so required" RMI calls.
On the other hand, if you are a remote client, then you surely cant call Beans marked local. The simple reason is, you will never get the stub from that bean. To be more presise you will not get the Home itself to create the bean.
so the concept goes like
Client Location----------------Remote aware Bean-------------Local Bean Local (Same JRE)---------------Can be accessed-------------Can be accessed. Remote (Diff. JRE/Machine)-----Can be accessed---------------Not possible