Concerning the stateless beans, these beans are pooled, so the container may return you the same bean. That's why the counter keeps growing. Stateful beans are not pooled, so create will return you a new instance, which explains why you'll always get "1".
I agree with Christophe and think that you are using stateful/stateless beans in an incorrect manner.
Stateless Beans (and their members) are not meant to be shared across clients. They should not save a state (in this case the counter variable).
For Stateful Beans it's ok to save the state (counter) which is bound to the client.
I suggest using JSF 2.0 and EJB 3.1. Live is so much easier with it
If you inject (or look up) an SFSB into your backing bean (JSP page), you 'link' these 2 together.
But since your JSP page is requestscoped, you will recieve a 'clean' JSP page everytime you reload your page, ergo it has lost its link, and creates a new SFSB instance.
I have no experience on JSP & EJB2 technology, so i have no right answer to fix this, but i guess you have to store your SFSB reference in your HttpSession ?
As for the SLSB, in EJB3.x SLSB's are pooled, and you'd have to be extremely lucky to hit the same SLSB every single time.
Not sure why it keeps injecting the same SLSB in your example.
PS: As alex stated, please, for the love of god, use JSF & EJB3.x
subject: Newbie stateful vs stateless session bean question