Patches item #486027, was opened at 2001-11-27 07:37
You can respond by visiting: 
http://sourceforge.net/tracker/?func=detail&atid=376687&aid=486027&group_id=22866

Category: JBossCMP
Group: v2.4 (stable)
Status: Open
Resolution: None
Priority: 5
Submitted By: Bani Greyling (banigreyling)
Assigned to: Nobody/Anonymous (nobody)
Summary: Incorrect ObjectNotFoundException

Initial Comment:
I have a problem when doing a findByPrimaryKey (CMP) 
and the pool give out a dead 
connection. I think I got to the source of the 
problem. 

While doing a findByPrimaryKey JBoss first determine 
if the object exist by doing a 
count. If this count fail (because the pool gave a 
dead connection), then the exeption 
is ignored and false is returned as described by the 
following code fragment:

(from 
org.jboss.ejb.plugins.jaws.jdbc.JDBCBeanExistsCommand.j
ava)

public boolean execute(Object id)
   {
      boolean result = false;

      try
      {
         result = ((Boolean)jdbcExecute
(id)).booleanValue();
      } catch (Exception e)
      {
              log.debug(e);
      }

      return result;
   }

Subsequently the follwing code fragment from 
org.jboss.ejb.plugins.jaws.jdbc.JDBCFindEntityCommand.j
ava throw an 
ObjectNotFoundException which result in the client 
getting message that the record 
does not exist.

protected Object findByPrimaryKey(Object id) throws 
FinderException
   {
      if (beanExistsCommand.execute(id))
      {
         return id;
      } else
      {
         throw new ObjectNotFoundException("Object 
with primary key " + id +
                                           " not found 
in storage");
      }
   }


I feel that the first mentioned codefragment should be 
changed to:

public boolean execute(Object id)
   throws FinderException
   {
      boolean result = false;

      try
      {
         result = ((Boolean)jdbcExecute
(id)).booleanValue();
      } catch (Exception e)
      {
              log.debug(e);
              throw new FinderException(e.toString());
      }

      return result;
   }

This will ensure that the client is informed that his 
request could not be serviced.

My current configuration:

JBoss 2.4.1
JDK 1.3
Windows NT4
MS SQLServer2000
com.jnetdirect.jsql.JSQLDriver

Unified diff:

--- JDBCBeanExistsCommand.java~1~       Sat Jul 14 
21:43:24 2001
+++ JDBCBeanExistsCommand.java  Tue Nov 27 12:12:28 
2001
@@ -10,6 +10,7 @@
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
+import javax.ejb.FinderException;
 
 import org.jboss.ejb.EntityEnterpriseContext;
 
@@ -38,6 +39,7 @@
    // Checks whether the database already holds the 
entity
 
    public boolean execute(Object id)
+   throws FinderException
    {
       boolean result = false;
 
@@ -47,6 +49,7 @@
       } catch (Exception e)
       {
              log.debug(e);
+              throw new FinderException(e.toString());
       }
 
       return result;


----------------------------------------------------------------------

You can respond by visiting: 
http://sourceforge.net/tracker/?func=detail&atid=376687&aid=486027&group_id=22866

_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to