I have a client application that uses EJB3 beans by remote lookup. For performance reasons I cache the results of EJB3 lookups in a map.
Now does this force the client application to always use the same EJB3 instance as same reference is used again and again or does EJB pooling still works and returns other instances from the pool for requests handling?
I assume you are talking about stateless session beans. Caching the EJB is worthwhile because it eliminates the need to repeatedly call JNDI to find the EJB. But there is no link between the EJB proxy and the stateless session bean - each call you make is routed to an available bean in the pool.
The story is very different for stateful session beans - all calls made thought a specific proxy invoke the same stateful session bean. If you look up a new proxy via JNDI you will get a new stateful session bean.