aspose file tools*
The moose likes EJB and other Java EE Technologies and the fly likes EJB3 Stateful bean - not being stateful! Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Spring in Action this week in the Spring forum!
JavaRanch » Java Forums » Java » EJB and other Java EE Technologies
Bookmark "EJB3 Stateful bean - not being stateful!" Watch "EJB3 Stateful bean - not being stateful!" New topic
Author

EJB3 Stateful bean - not being stateful!

Vinnie Jenks
Ranch Hand

Joined: Apr 26, 2004
Posts: 207
I'm very new to EJB3 and I'm simply trying to get a Stateful session bean to work. I obviously do not understand what stateful means because I can't get a SFSB to keep values in-state. All of the examples I've looked at (just finished reading a good JEE 5 book) are very straightforward and the concept is simple.

Here's my example.

I have a SFSB called "SessionBeanTest" with an interface "SessionTest:



I have a test servlet, aptly named "Test", where I call the SFSB:



I would expect, each time I refresh the page/servlet, that three new string values get added to the Stateful List field ("names") in the SFSB. Instead, the List is cleared on each refresh and the same three values are added:



If I had refreshed the screen twice, I would have *expected* to see something like this:



You'll notice I sprinkled the SFSB w/ output messages...here's what I'd see if I refreshed the servlet twice:



I'm using JBoss 4.0.4RC1, which is their latest release of the AS and EJB3.

I'm confused...what have I done wrong? How do I make my stateful bean stateful!?

Anyhow, I really appreciate the help...thanks!

-v
Chris Mathews
Ranch Hand

Joined: Jul 18, 2001
Posts: 2712
Please see this recent post about basically the same subject. You are not using the SFSB properly... in order to reestablish the same session with your SFSB you need to store the ejb handle somewhere between requests so that you can pick it back up again. The simpliest solution for this is to put it in the user's HttpSession.
Vinnie Jenks
Ranch Hand

Joined: Apr 26, 2004
Posts: 207
Yeah, I realized that after going back and doing some reading on the JBoss TrailBlazer sample app. I guess I hadn't thought about how a multi-threaded client would be able to keep track of the bean.

I'm now trying to figure out the value of using a Stateful vs. a Stateless bean since both can behave, on a general level, exactly the same while being stored in HttpSession. I realize there's a different API behind Stateful beans but I would think, in most cases, all of that overhead just wouldn't be worth it?

Thanks!
Chris Mathews
Ranch Hand

Joined: Jul 18, 2001
Posts: 2712
A Stateless Session Bean will definitely not behave the same as a SFSB. Even if you store the handle to the Stateless Bean in your HttpSession you are not guaranteed to get the same instance from the server.
Vinnie Jenks
Ranch Hand

Joined: Apr 26, 2004
Posts: 207
Originally posted by Chris Mathews:
A Stateless Session Bean will definitely not behave the same as a SFSB. Even if you store the handle to the Stateless Bean in your HttpSession you are not guaranteed to get the same instance from the server.


Really!?? Ok, that's very good to know...thank you. I guess I assumed if I stored the stub to a SLSB in HttpSession...that's it...I got it...and I would get the same basic functionality as a SFSB.

Internally, how does the AS ensure that I'm getting the same SFSB instance?

Is EJB 3.0 essentially EJB 2.0 with annotations? Before this EJB 3 adventure of mine, I had only built servlet/jsp/hibernate apps w/ Java...so this is all pretty new to me.
Babji Reddy
Ranch Hand

Joined: Jan 24, 2006
Posts: 106
This is the task of EJB container. for SFSB, it the client's handle to the EJB is still valid, the container will not put the EJBean back to the pool. Thats why we need to store the handle to session.
Where is for SLSB, for two different EJB business methods, the container is free to use any bean instance from the pool, and hence is not guarranteed that It will use the same bean again.
 
It is sorta covered in the JavaRanch Style Guide.
 
subject: EJB3 Stateful bean - not being stateful!