refer rickard's post <snip> The result of ejbFind* methods are collections of primary keys. The result of find* methods are collections of EJBObjects. </snip> On Mon, 26 Mar 2001, John Dubchak wrote: > Hi, > > I am using JBoss 2.1 beta with Embedded Tomcat support and have > encountered what appears to be a bug in jBoss. > > I have created a BMP EJB with the following custom finder: > > public Collection ejbFindByLastname(String n) throws FinderException > { > LinkedList l = null; > Connection conn = null; > > try > { > Context ctx = new InitialContext(properties); > DataSource ds = (DataSource)ctx.lookup("java:/ContactsDB"); > > String query = "SELECT name_key FROM name WHERE lastname = '" + n > + "'"; > conn = ds.getConnection(); > Statement stmt = conn.createStatement(); > ResultSet rs = stmt.executeQuery(query); > > l = new LinkedList(); > while(rs.next()) > { > l.add(new Integer(rs.getInt(1))); > } > > rs.close(); > stmt.close(); > } > catch(Exception e) > { > } > finally > { > if(conn != null) > try {conn.close();} catch(SQLException e) {} > } > > return l; > } > > This code, using a simple test schema, creates a linked list with two > Integer values (1 and 5), which represent the primary keys of two > different rows in the database that match a particular search of > lastname. This works fine. The problem comes when I use the following > client code to access these Integer based keys and try to do a further > lookup on them: > > try > { > // Get a reference to the Interest Bean > Object ref = ctx.lookup("ContactName"); > > // Get a reference from this to the Bean's Home interface > ContactNameHome home = (ContactNameHome) > PortableRemoteObject.narrow (ref, ContactNameHome.class); > > Collection c = home.findByLastname(lname); > > Iterator iter = c.iterator(); > while(iter.hasNext()) > { > Integer i = (Integer)iter.next(); > this.display(i); // Custom method to lookup PK and display row > > } > } > > The above code, in the while loop throws a class cast exception. Rather > than the collection being a linked list of Integer objects from above, > it a collection of Proxy objects (Remote stubs). So if I change that > code to: > > // Name of my Remote Interface > ContactName cnt = (ContactName)iter.next(); > this.display(cnt.getBusinessObject()); > > it will only work as long as the objects (ContactName) are in cache. If > I haven't previously looked up these objects, I will get a NULL > reference. On the other hand, if I have looked them up, my linked list, > which is supposed to be Integer objects is actually a list of Remote > Interface references that have been obtained from the cached objects on > the server side. > > Has anyone else experienced this problem? > > Thanks, > John > > > _______________________________________________ > JBoss-user mailing list > [EMAIL PROTECTED] > http://lists.sourceforge.net/lists/listinfo/jboss-user > _______________________________________________ JBoss-user mailing list [EMAIL PROTECTED] http://lists.sourceforge.net/lists/listinfo/jboss-user