Dan Ch,
    Was this part of the 2.2.2 release. I  actually had issues with the load
[it was screwing up the columns] because their order in the resultset and in
the iterator for getCMPFields was different. Actually got all that to work
when I saw this update from you! Anyway, just wanted to confirm that this
issue is NOT there in the standard 2.2.2 release.

Vinay

----- Original Message -----
From: <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Wednesday, June 06, 2001 2:07 AM
Subject: [JBoss-dev] CVS update:
jboss/src/main/org/jboss/ejb/plugins/jaws/jdbc JDBCCommand.java
JDBCLoadEntityCommand.java


>   User: danch
>   Date: 01/06/05 18:07:40
>
>   Modified:    src/main/org/jboss/ejb/plugins/jaws/jdbc JDBCCommand.java
>                         JDBCLoadEntityCommand.java
>   Log:
>   Fixed bug caused by change in load operation associated with finder
optimization.
>
>   Revision  Changes    Path
>   1.32      +4 -3
jboss/src/main/org/jboss/ejb/plugins/jaws/jdbc/JDBCCommand.java
>
>   Index: JDBCCommand.java
>   ===================================================================
>   RCS file:
/cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/jaws/jdbc/JDBCCommand.ja
va,v
>   retrieving revision 1.31
>   retrieving revision 1.32
>   diff -u -r1.31 -r1.32
>   --- JDBCCommand.java 2001/05/30 23:00:42 1.31
>   +++ JDBCCommand.java 2001/06/06 01:07:40 1.32
>   @@ -57,7 +57,7 @@
>     *
>     * @author <a href="mailto:[EMAIL PROTECTED]";>Justin Forder</a>
>     * @author <a href="mailto:[EMAIL PROTECTED]";>Dirk Zimmermann</a>
>   - * @version $Revision: 1.31 $
>   + * @version $Revision: 1.32 $
>     */
>    public abstract class JDBCCommand
>    {
>   @@ -386,6 +386,7 @@
>        protected Object getResultObject(ResultSet rs, int idx, Class
destination)
>            throws SQLException{
>
>   +log.debug("getting a "+destination.getName()+" from resultset at index
"+idx);
>            Object result = null;
>
>            Method method = (Method)rsTypes.get(destination.getName());
>   @@ -484,9 +485,9 @@
>    } catch (RemoteException e) {
>    throw new SQLException("Unable to load EJBObject back from Handle: "
+e);
>                } catch (IOException e) {
>   -                throw new SQLException("Unable to load a ResultSet
column into a variable of type '"+destination.getName()+"': "+e);
>   +                throw new SQLException("Unable to load a ResultSet
column "+idx+" into a variable of type '"+destination.getName()+"': "+e);
>                } catch (ClassNotFoundException e) {
>   -                throw new SQLException("Unable to load a ResultSet
column into a variable of type '"+destination.getName()+"': "+e);
>   +                throw new SQLException("Unable to load a ResultSet
column "+idx+" into a variable of type '"+destination.getName()+"': "+e);
>                }
>            }
>
>
>
>
>   1.10      +55 -10
jboss/src/main/org/jboss/ejb/plugins/jaws/jdbc/JDBCLoadEntityCommand.java
>
>   Index: JDBCLoadEntityCommand.java
>   ===================================================================
>   RCS file:
/cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/jaws/jdbc/JDBCLoadEntity
Command.java,v
>   retrieving revision 1.9
>   retrieving revision 1.10
>   diff -u -r1.9 -r1.10
>   --- JDBCLoadEntityCommand.java 2001/05/27 00:49:15 1.9
>   +++ JDBCLoadEntityCommand.java 2001/06/06 01:07:40 1.10
>   @@ -11,6 +11,8 @@
>    import java.lang.reflect.Method;
>
>    import java.util.Iterator;
>   +import java.util.ArrayList;
>   +import java.util.List;
>    import java.util.HashMap;
>
>    import java.rmi.NoSuchObjectException;
>   @@ -36,12 +38,28 @@
>     * @author <a href="mailto:[EMAIL PROTECTED]";>Joe Shevland</a>
>     * @author <a href="mailto:[EMAIL PROTECTED]";>Justin Forder</a>
>     * @author <a href="mailto:[EMAIL PROTECTED]";>Dirk Zimmermann</a>
>   - * @version $Revision: 1.9 $
>   + * @author <a href="mailto:[EMAIL PROTECTED]";>danch (Dan
Christopherson)</a>
>   + * @version $Revision: 1.10 $
>     */
>    public class JDBCLoadEntityCommand
>       extends JDBCQueryCommand
>       implements JPMLoadEntityCommand
>    {
>   +   /**what is the position of each cmp field in the generated select
statement?
>   +    * this simply maps the position of the field in the CMP list to its
position
>   +    * in the generated select statement. This is neccessary because of
the variable
>   +    * number of key columns (which are skipped in a load) and because
there can
>   +    * be overlap between the two: pkfields and cmpfields are neither
disjoint sets
>   +    * nor is the cmpfields a subset of pkfields (not that that makes
sense to
>   +    * me right now, but I'll roll with it until I have more chance to
analyse - danch)
>   +    */
>   +   int [] cmpFieldPositionInSelect = null;
>   +
>   +   /** This const is used in places where I need to add an offset to a
count
>   +    *  to account for the fact that JDBC counts from one whilst every
other
>   +    *  damn thing in the languase starts at 0, the way God intended!
>   +    */
>   +   private static final int JDBC_WART_OFFSET = 1;
>       // Constructors --------------------------------------------------
>
>       public JDBCLoadEntityCommand(JDBCCommandFactory factory)
>   @@ -62,27 +80,47 @@
>          String sql = "SELECT ";
>          HashMap alreadyListed = new HashMap();
>          // put the key fields in first
>   +      // we'll stash the column names here so that we can later map an
overlapped
>   +      // column (overlap between PK and CMP) into its spot in the
select statement.
>   +      String[] pkColumnNames = new
String[jawsEntity.getNumberOfPkFields()];
>          Iterator keyIt = jawsEntity.getPkFields();
>   -      boolean first = true;
>   +      int fieldCount = 0;
>          while (keyIt.hasNext())
>          {
>             PkFieldMetaData pkField = (PkFieldMetaData)keyIt.next();
>
>   -         sql += (first ? "" : ",") +
>   -                pkField.getColumnName();
>   +         sql += ((fieldCount==0) ? "" : ",") + pkField.getColumnName();
>             alreadyListed.put(pkField.getColumnName().toUpperCase(),
pkField);
>   -         first = false;
>   +         pkColumnNames[fieldCount]=pkField.getColumnName();
>   +         fieldCount++;
>          }
>
>   +      cmpFieldPositionInSelect = new
int[jawsEntity.getNumberOfCMPFields()];
>          Iterator it = jawsEntity.getCMPFields();
>   -
>   +      int cmpFieldCount = 0;
>          while (it.hasNext())
>          {
>             CMPFieldMetaData cmpField = (CMPFieldMetaData)it.next();
>             if (alreadyListed.get(cmpField.getColumnName().toUpperCase())
== null) {
>                sql += "," + cmpField.getColumnName();
>   -            alreadyListed.put(cmpField.getColumnName().toUpperCase(),
cmpField);
>   +            cmpFieldPositionInSelect[cmpFieldCount] =
fieldCount+JDBC_WART_OFFSET;
>   +            fieldCount++;//because this was another field in the select
>   +         } else {
>   +            //DO NOT increment field count, this isn't another in the
select.
>   +            //linear search (yech!) of the pkColumnNames - we only do
this once per bean, however
>   +            for (int i=0;i<pkColumnNames.length;i++) {
>   +               if
(pkColumnNames[i].equalsIgnoreCase(cmpField.getColumnName())) {
>   +                  cmpFieldPositionInSelect[cmpFieldCount] =
i+JDBC_WART_OFFSET;
>   +                  break;
>   +               }
>   +            }
>   +            if (cmpFieldPositionInSelect[cmpFieldCount] < 1) {
>   +               log.error("Error: Can't find first occurence of repeated
column "+
>   +                         cmpField.getName()+" when building CMP load
SQL for "+
>   +                         jawsEntity.getName());
>   +            }
>             }
>   +         cmpFieldCount++;
>          }
>
>          sql += " FROM " + jawsEntity.getTableName();
>   @@ -127,7 +165,6 @@
>          }
>
>          // Set values
>   -System.out.print("!");
>          loadOneEntity(rs, ctx);
>
>          return null;
>   @@ -135,7 +172,14 @@
>
>       protected void loadOneEntity(ResultSet rs, EntityEnterpriseContext
ctx) throws Exception {
>          int idx = 1;
>   -
>   +      // skip the PK fields at the beginning of the select.
>   +      Iterator keyIt = jawsEntity.getPkFields();
>   +      while (keyIt.hasNext()) {
>   +         keyIt.next();
>   +         idx++;
>   +      }
>   +
>   +      int fieldCount = 0;
>          Iterator iter = jawsEntity.getCMPFields();
>          while (iter.hasNext())
>          {
>   @@ -143,7 +187,8 @@
>
>             setCMPFieldValue(ctx.getInstance(),
>                              cmpField,
>   -                          getResultObject(rs, idx++, cmpField));
>   +                          getResultObject(rs,
cmpFieldPositionInSelect[fieldCount], cmpField));
>   +         fieldCount++;
>          }
>
>          // Store state to be able to do tuned updates
>
>
>
>
> _______________________________________________
> Jboss-development mailing list
> [EMAIL PROTECTED]
> http://lists.sourceforge.net/lists/listinfo/jboss-development


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

Reply via email to