Remote interfaces provides access to the
EJB, through a serialization protocol. If the client attempts to access a Remote method (on the remote application server, on another machine), the data which is send, should be serialized before sending through the network. Remote interfaces do this for you.
We can use Remote interfaces to access beans in the same JVM too. But it may cause a performance hit, when it is doing the unwanted serialization and deserialization. To prevent this unwanted performance hit on local access, Local interfaces are used.
Both @Remote and @Local annotations cannot be used together, because the container doesn't know how to manage the method invocation in this case.