Instead of having your "business layer" lookup the objects,
you should "inject" your objects into your business layer object.
This way, you can use this logic anywhere and not have to worry about what "context" you're in (which EJB is topmost on the call stack or which webapp you're in). Also, it makes your business logic easy to
test, because you can substitute in mock implementations of your EJB remote interface (this can be done with local interfaces too of course). I would also recommend not using your EJB remote interface in your business layer, but introduce a superinterface into your EJB hierarchy which has the business methods on it. Then, have your EJB remote interface extend your business interface. You could then inject your business interface rather than your EJB remote interface...
The ugly part here is RemoteException has to be thrown in your BusinessMethods interface, but if you use local interfaces this doesn't happen.