[jboss-user] [EJB 3.0] - SFSB and the Entity Manager Extended Persistence Context
ngtdave
do-not-reply at jboss.com
Thu Aug 3 12:37:49 EDT 2006
I'm having a problem with trying to create a SFSB with an injected EntityManager that has an EXTENDED context:
@Stateful(name="OrderService", mappedName="OrderService")
| @Local(Order.class)
| public class OrderBean implements Order {
|
| @PersistenceContext(type = PersistenceContextType.EXTENDED, unitName = "persistence")
| protected EntityManager em;
| Company company = null;
|
| @PersistenceContext(type = PersistenceContextType.EXTENDED, unitName = "persistence")
| public void setEM(EntityManager em) {
| this.em = em;
| }
|
| public Company getCompany(Integer Id) {
| company = em.find(Company.class, new Integer(1));
| return company;
| }
|
| @Remove
| public void remove(){}
|
| @javax.ejb.PostActivate
| public void postActivate(){
| System.out.println("postactivating order");
| }
|
| @javax.ejb.PrePassivate
| public void prePassivate(){
| System.out.println("passivating order");
| }
|
| public void doSomethingElse() {
| System.out.println("Doing something else");
| }
|
| public Company getCompanyBack() {
| return company;
| }
| }
At first everything works great. I lookup the SFSB from a jsp and call getCompany() which returns me the company. I then stick the reference to the SFSB interface into the http session. I hit another jsp which get's the SFSB interface from the session and calls getCompanyBack() and all is well. I can even walk lazy collections on the company with no problem.
However, if I wait a while, the SFSB will passivate without error:
2006-08-03 09:56:12,987 DEBUG [org.jboss.ejb3.cache.simple.StatefulSessionFilePersistenceManager] Attempting to passivate; id=4sg3q-kqtq3k-eqfaw0yg-1-eqfaxk9s-7
| 2006-08-03 09:56:12,987 INFO [STDOUT] passivating order
| 2006-08-03 09:56:12,987 DEBUG [org.jboss.ejb3.cache.simple.StatefulSessionFilePersistenceManager] Saving session state to: D:\jboss\jboss-4.0.4.GA.P1\server\default\tmp\sessions\OrderService-eqfax4z0-6\4sg3q-kqtq3k-eqfaw0yg-1-eqfaxk9s-7.ser
| 2006-08-03 09:56:13,222 DEBUG [org.hibernate.impl.SessionFactoryImpl] serializing: 2c90839a0cd4b626010cd4b62e660000
| 2006-08-03 09:56:13,222 DEBUG [org.jboss.ejb3.cache.simple.StatefulSessionFilePersistenceManager] Passivation complete; id=4sg3q-kqtq3k-eqfaw0yg-1-eqfaxk9s-7
Then I try to hit the jsp page again, and it throws up trying to call getCompanyBack() complaining that it cannot find the SFSB:
2006-08-03 10:02:38,065 DEBUG [org.jboss.ejb3.cache.simple.StatefulSessionFilePersistenceManager] Attempting to activate; id=4sg3q-kqtq3k-eqfaw0yg-1-eqfaxk9s-7
| 2006-08-03 10:02:38,065 DEBUG [org.jboss.ejb3.cache.simple.StatefulSessionFilePersistenceManager] Reading session state from: D:\jboss\jboss-4.0.4.GA.P1\server\default\tmp\sessions\OrderService-eqfax4z0-6\4sg3q-kqtq3k-eqfaw0yg-1-eqfaxk9s-7.ser
| 2006-08-03 10:02:38,112 DEBUG [org.jboss.ejb3.cache.simple.StatefulSessionFilePersistenceManager] Removing passivated state file: D:\jboss\jboss-4.0.4.GA.P1\server\default\tmp\sessions\OrderService-eqfax4z0-6\4sg3q-kqtq3k-eqfaw0yg-1-eqfaxk9s-7.ser 2006-08-03 10:02:38,190 DEBUG [org.hibernate.impl.SessionFactoryObjectFactory] lookup: uid=2c90839a0cd4b626010cd4b62e660000
| 2006-08-03 10:02:38,190 WARN [org.hibernate.impl.SessionFactoryObjectFactory] Not found: 2c90839a0cd4b626010cd4b62e660000
| 2006-08-03 10:02:38,190 DEBUG [org.hibernate.impl.SessionFactoryObjectFactory] {2c90839a0cd4b656010cd4b65da40000=org.hibernate.impl.SessionFactoryImpl at 1cbcc56}
|
Then there is a long exception ending in:
Caused by: java.io.InvalidObjectException: could not locate session factory by uuid [2c90839a0cd4b626010cd4b62e660000] during session deserialization
| at org.hibernate.impl.SessionFactoryImpl.deserialize(SessionFactoryImpl.java:1038)
| at org.hibernate.impl.SessionImpl.readObject(SessionImpl.java:1866)
| ... 76 more
I was using JBoss 4.0.4.GA-Patch1, then I tried the same install with EJB-3.0_RC8-FD installed on top, which also didn't work.
If I remove the EntityManager from the SFSB, (and use other parts of the SFSB) then it works as expected, passivating and activating.
I even tried making the em transient and marking it @Transient, but it yeilds the same error.
I've looked around and done some reading, and it seems unclear if I should be able to do this with an EXTENDED context in an SFSB, but I'm following the example here:
http://docs.jboss.org/ejb3/app-server/tutorial/extended_pc/extended.html
Any help would be appreciated. Can this be done, is it not fully implemented yet? Is there a work around?
Thanks
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3962920#3962920
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3962920
More information about the jboss-user
mailing list