Bugs item #463590, was opened at 2001-09-21 08:50 You can respond by visiting: http://sourceforge.net/tracker/?func=detail&atid=376685&aid=463590&group_id=22866
Category: None Group: v2.4 (stable) >Status: Closed >Resolution: Invalid Priority: 5 Submitted By: Nobody/Anonymous (nobody) Assigned to: Andreas Schaefer (schaefera) Summary: Entity bean reference is lost Initial Comment: I'm using a stateful session bean to lookup home interfaces for different entity beans, instantiate them and return the remote references to the client. This code worked properly with JBoss 2.2X but fails with 2.4.1. Excerpt from sample session bean code: public CustomerRemote getCustomer( Integer customerPK ) throws RemoteException { try { CustomerHome home = (CustomerHome) jndi.lookup( "java:comp/env/ejb/Customer" ); return clHome.create( customerPK ); } catch(Exception e) { e.printStackTrace(); throw new RemoteException(e.getMessage()); } } When client calls getCustomer() on the stateful session bean, a new Customer i created and the remote customer is returned. Now, when the client makes a call to this newly created Customer bean (entity), yet another instance is created, without all the inital data such as the primary key. No exceptions thrown, but contents of Customer is of course invalid. This is part of my ejb-jar.xml: <session> <ejb-name>Session</ejb-name> <home>com.posten.ejb.SessionHome</home> <remote>com.posten.ejb.SessionRemote</remote> <ejb-class>com.posten.ejb.Session</ejb-class> <session-type>Stateful</session-type> <transaction-type>Bean</transaction-type> <ejb-ref> <ejb-ref-name>ejb/Customer</ejb-ref-name> <ejb-ref-type>Entity</ejb-ref-type> <home>com.posten.ejb.CustomerHome</home> <remote>com.posten.ejb.CustomerRemote</remote> <ejb-link>Customer</ejb-link> </ejb-ref> </session> I'm using Sun JDK 1.3 on a Win NT 4.0 workstation with Oracle Thin Driver 8.1.6. ---------------------------------------------------------------------- Comment By: Bo Carlsson (boca007) Date: 2001-10-04 07:41 Message: Logged In: YES user_id=167925 Actually, I was able so solve this problem after reading the J2EE Developer's Guide carefully. As you suspect you are not guaranteed to get the same bean instance in successive calls. If the container wishes it creates a new instance and calls ejbActivate() where the primary from EntityContext is valid. If needed ejbLoad() is called and this primary key should be used to refresh data. Thus, the calls made are: setEntityContext() Get the context ejbActivate() Get the primary key from context ejbLoad() Synchronize data using the primary key In ver 2.2.2 it seems that the container always kept the instance where ejbCreate and ejbFindBy* was first invoked. I recommend you read The Life Cycle of an Entity Bean in section 4 of J2EE DevGuide. ---------------------------------------------------------------------- Comment By: Charlie Dobbie (cfmdobbie) Date: 2001-10-04 06:07 Message: Logged In: YES user_id=34788 I seem to be having a similar problem. I have an EJB that was working correctly under 2.2.2, but now fails on 2.4.1. I call an ejbFindByX method on the Home interface of my BMP EJB. My SELECT in the EJB runs correctly and populates a primary key with the correct data (verified), and returns it. The client then invokes a method on the Remote interface which calls a method on the EJB class that calls EntityContext.getPrimaryKey()... which returns null. For some reason either the EJB I'm accessing isn't the one I searched for, or the primary key is being nulled either before returning the Remote reference, or on any subsequent access of the EJB. ---------------------------------------------------------------------- You can respond by visiting: http://sourceforge.net/tracker/?func=detail&atid=376685&aid=463590&group_id=22866 _______________________________________________ Jboss-development mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/jboss-development