If client calls remove on a bean that's already removed, then the client gets RemoteException (remote client) or EJBException (local client).
But I think this is not true... when I tried (client calling remove() twice), I got java.rmi.NoSuchObjectException. This is said correctly in page 552 of HFE.
Originally posted by Giju George: On page 559 of HFE it is said that
But I think this is not true... when I tried (client calling remove() twice), I got java.rmi.NoSuchObjectException. This is said correctly in page 552 of HFE.
Then why this discrepancy ???
If... - Container had removed the session bean because the bean had either thrown a system exception or timed out.
And... - Client still has a reference to the bean (via the remote component and a live stub) and invokes a method.
If... - Client invokes remove(Object primaryKey) on a session bean - session beans do not have primary keys.
OR
- Session bean instance is participating in a transaction and the client invokes the remove method on the session object�s home or component interface object.
If... - Client invokes remove(Object primaryKey) on a session bean - session beans do not have primary keys.
OR
- Session bean instance is participating in a transaction and the client invokes the remove method on the session object�s home or component interface object.
These two scenarios are considered separately in pages 558 and 559.
"Client calls remove() on a stateful bean that is still in an open tx"
"Client call the home remove method on the home interface of a session bean"
In both scenarios the book says you get a RemoveException as Keerthi points out. That's fine.
The other scenario, the one Giju is talking about, says "Client calls remove() on a bean that's already been removed"
I agre with Giju in that in this case you should get a NoSuchObjectException, specially when the book says "remove() is just another method in the bean's interface ... you'll get the same exception you'd see if you called any other business method on a removed bean". So we're not talking about removes in the home interface and calling remove within an open transaction is also considered separately. The only choice here has to be NoSuchObjectException ...
But my ques is .. what does the client get, RemoteException/ NoSuchObjectException ?. Because if the bean throws a system exception, then the container will throw a RemoteException to the (remote)client. Does that mean the client can get any subclass exception of RemoteException ?