Can I pass bean references across beans?

You may, but the more heinous issue involves process threads. If two threads of control have a reference to the same session bean, a head-on collision with transaction contexts can occur. The specification sums it up in this statement : "If a session bean instance is participating in a transaction, it is an error for a client to invoke a method on the session object such that the transaction attribute in the deployment descriptor would cause the container to execute the method in a different transaction context or in an unspecified transaction context. The container throws the java.rmi.RemoteException to the client in such a case."

You could prevent two transactions occuring at the same time by carefully specifying the transaction contexts, but this seems like it's destined to be a nightmare to maintain or debug.

Also one should never pass the EJB implementation's "this" pointer as a parameter. To obtain a valid reference to an EJB, you need to call:

        context.getEJBObject();
where context is either a SessionContext, or an EntityContext.