Aha! When I saw JAX-WS RI extension for stateful web services, I knew this would happen. The Stateful annotation for web services is com.sun.xml.ws.developer.Stateful and the Stateful annotation for ejb is javax.ejb.Stateful - two different things.
A few things must be noted about stateful web services:
1. This is a vendor extension and not a standard specification, which means your code gets tied to the implementation and will not survive any server migrations
2. Different vendors use different ways to provide stateful web services. For example, IBM uses WS-Addressing and WS-Resource but Sun uses RI extension. I still think it's best to avoid stateful services
3. I believe Sun should avoid asking questions about things that are proprietary
Now, if you still want to do stateful web services, you need to download and use appropriate version of JAX-WS RI that has this extension. In your code, you must use @com.sun.xml.ws.developer.Stateful AND @Addressing annotations in addition to the usual @Webservice annotation.
Since we have established that the Stateful annotation doesn't make your class a stateful ejb, we must worry about the state management of the class. The container provided state management mechanism for a stateful web service is StatefulWebServiceManager class. Read more about this at
here and
here.