Help! JBoss 3.2.3: Stateless Session Beans and isIdentical
csmmoss Feb 17, 2004 11:12 AMAfter switching from JBoss 3.2.1 to 3.2.3, a jUnit test for equivalence between two stateless session beans is now failing. (Code at bottom!)
Previously, under 3.2.1, this assertion test passed:
assertEqual("catalog same", catalog, newCatalog); // TRUEas do these:
assertTrue("catalog same", newCatalog.equals(catalog)); // TRUE
assertTrue("catalog same", newCatalog.isIdentical(catalog)); // TRUEBut under 3.2.3 (& 3.2.2) none of the following evaluate to true (...unless we change the session beans to stateful):
assertEqual("catalog same", catalog, newCatalog);
assertTrue("catalog same", newCatalog.equals(catalog));
assertTrue("catalog same", newCatalog.isIdentical(catalog));After brushing up on EJB equivalence rules, I can understand why 'equals()' fails (although, I'm now uncertain why it works under 3.2.1) , but as far as I can tell, these two stateless beans should be Identical.
Code snippits:
The Action Class
public class EventListAction extends ProtectedAction {
LocalEventCatalog eventCatalog;
/** Initializes the servlet.
*/
public LocalEventCatalog getCatalog() {
if ( eventCatalog == null ) {
try {
Context ctx = new InitialContext();
LocalEventCatalogHome home =
(LocalEventCatalogHome)ctx.lookup("java:comp/env/EventCatalog");
eventCatalog = home.create();
}
catch ( NamingException ne ) {
throw new ServletException(
"naming exception looking up LocalEventCatalogHome", ne );
}
catch ( CreateException ce ) {
throw new ServletException(
"create exception creating LocalEventCatalog", ce );
}
}
return eventCatalog;
}
...The Test Class
public class TestEventListAction extends ServletTestCase {
...
public void testGetCatalog() {
EventListAction action = new EventListAction();
LocalEventCatalog catalog = action.getCatalog();
assertNotNull( "catalog not null", catalog );
LocalEventCatalog newCat = action.getCatalog();
assertNotNull( "new cat not null", newCat );
assertEquals( "catalog same", catalog, newCat ); // FAILS!
assertTrue( "catalog same", newCat.equals(catalog)); // FAILS!
assertEquals( "catalog same", newCat.isIdentical(catalog)); // FAILS!
}
...We've alse tried (for testing purposes) pre-creating the Bean in the Action, along with a simplified getCatalog() method to return it:
public LocalEventCatalog getCatalog() {
return this.eventCatalog;
}and then changing the Test Class to make successive calls to the Action:
LocalEventCatalog catalog = action.getCatalog(); LocalEventCatalog newCat = action.getCatalog();
But even this evaluates to FALSE equality in all three cases.
Only when we change the Bean to "stateful" do they all evaluate to TRUE, under JBoss 3.2.2+ And this appears to be at direct odds with the EJB spec, for the case of stateless beans. Are we missing something here?
-Logan