User: dsundstrom
  Date: 01/08/26 12:37:10

  Modified:    src/main/org/jboss/ejb/plugins/cmp/jdbc
                        JDBCEJBQLFinderCommand.java JDBCFinderCommand.java
                        JDBCStoreManager.java
  Log:
  Added ejbSelect query support.
  
  Revision  Changes    Path
  1.3       +19 -5     
jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCEJBQLFinderCommand.java
  
  Index: JDBCEJBQLFinderCommand.java
  ===================================================================
  RCS file: 
/cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCEJBQLFinderCommand.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- JDBCEJBQLFinderCommand.java       2001/08/19 03:32:23     1.2
  +++ JDBCEJBQLFinderCommand.java       2001/08/26 19:37:10     1.3
  @@ -8,16 +8,17 @@
   package org.jboss.ejb.plugins.cmp.jdbc;
   
   import java.sql.PreparedStatement;
  -import java.util.ArrayList;
   import java.util.List;
   import java.util.Set;
  -import org.jboss.deployment.DeploymentException;
  +import org.jboss.ejb.DeploymentException;
   import org.jboss.ejb.plugins.cmp.ejbql.Assembly;
   import org.jboss.ejb.plugins.cmp.ejbql.Parser;
  +import org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMPFieldBridge;
  +import org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCEntityBridge;
   import org.jboss.ejb.plugins.cmp.jdbc.ejbql.EJBQLParser;
   import org.jboss.ejb.plugins.cmp.jdbc.ejbql.SQLTarget;
  -import org.jboss.ejb.plugins.cmp.jdbc.metadata.JDBCQueryMetaData;
   import org.jboss.ejb.plugins.cmp.jdbc.metadata.JDBCQlQueryMetaData;
  +import org.jboss.ejb.plugins.cmp.jdbc.metadata.JDBCQueryMetaData;
   
   /**
    * JDBCDefinedFinderCommand finds entities based on an xml sql specification.
  @@ -26,7 +27,7 @@
    * clause. This code has been cleaned up to improve readability.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Dain Sundstrom</a>
  - * @version $Revision: 1.2 $
  + * @version $Revision: 1.3 $
    */
   public class JDBCEJBQLFinderCommand extends JDBCFinderCommand
   {
  @@ -64,6 +65,19 @@
                // set the sql
                setSQL(target.toSQL());
                
  +             // select bridge object
  +             Object selectBridgeObject = target.getSelectBridgeObject();
  +             if(selectBridgeObject instanceof JDBCEntityBridge) {
  +                     selectEntity = (JDBCEntityBridge)selectBridgeObject;
  +                     selectCMPField = null;
  +             } else if(selectBridgeObject instanceof JDBCCMPFieldBridge) {
  +                     selectCMPField = (JDBCCMPFieldBridge)selectBridgeObject;
  +                     selectEntity = null;
  +             } else {
  +                     throw new IllegalStateException("Select bridge object is 
instance of unknown type: " +
  +                                     "selectBridgeObject=" + selectBridgeObject);
  +             }
  +             
                // get the parameter order
                List l  = target.getInputParameters();
                parameterArray = new int[l.size()];
  @@ -83,5 +97,5 @@
                        int jdbcType = 
manager.getJDBCTypeFactory().getJDBCTypeForJavaType(arg.getClass());
                        JDBCUtil.setParameter(log, ps, i+1, jdbcType, arg);
                }
  -     }       
  +     }
   }
  
  
  
  1.4       +41 -10    
jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCFinderCommand.java
  
  Index: JDBCFinderCommand.java
  ===================================================================
  RCS file: 
/cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCFinderCommand.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- JDBCFinderCommand.java    2001/08/03 17:15:46     1.3
  +++ JDBCFinderCommand.java    2001/08/26 19:37:10     1.4
  @@ -20,8 +20,11 @@
   
   import javax.ejb.FinderException;
   
  +import org.jboss.ejb.EntityContainer;
   import org.jboss.ejb.EntityEnterpriseContext;
   import org.jboss.ejb.plugins.cmp.FindEntitiesCommand;
  +import org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMPFieldBridge; 
  +import org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCEntityBridge; 
   import org.jboss.ejb.plugins.cmp.jdbc.metadata.JDBCQueryMetaData;
   import org.jboss.util.FinderResults;
   
  @@ -34,20 +37,23 @@
    * @author <a href="mailto:[EMAIL PROTECTED]";>Marc Fleury</a>
    * @author <a href="mailto:[EMAIL PROTECTED]";>Joe Shevland</a>
    * @author <a href="mailto:[EMAIL PROTECTED]";>Justin Forder</a>
  - * @version $Revision: 1.3 $
  + * @version $Revision: 1.4 $
    */
   public abstract class JDBCFinderCommand
      extends JDBCQueryCommand
      implements FindEntitiesCommand
   {
        protected JDBCQueryMetaData queryMetaData;
  +     protected JDBCEntityBridge selectEntity;
  +     protected JDBCCMPFieldBridge selectCMPField;
        
        // Constructors --------------------------------------------------
        
        public JDBCFinderCommand(JDBCStoreManager manager, JDBCQueryMetaData q) {
                super(manager, q.getMethod().getName());
  -             
  +
                queryMetaData = q;
  +             selectEntity = entity;
        }
        
        public JDBCQueryMetaData getQueryMetaData() {
  @@ -68,7 +74,9 @@
                        // Execute the find... will return a collection of pks
                        Collection keys = (Collection)jdbcExecute(args);
   
  -                     // creat the finder results
  +//
  +//   The commented out code is for the old readahead code
  +//                   // creat the finder results
   //                   if(finderMetaData.hasReadAhead()) {
   //                           result = new FinderResults(keys, getWhereClause(args), 
this, args);
   //                   } else {
  @@ -82,17 +90,40 @@
        }
   
      // JDBCQueryCommand overrides ------------------------------------
  -
        protected Object handleResult(ResultSet rs, Object argOrArgs) throws Exception 
{
                
                Collection result = new ArrayList();    
         try {
  -                     Object[] pkRef = new Object[1];
  -                     while(rs.next()) {
  -                             pkRef[0] = null;
  -                             entity.loadPrimaryKeyResults(rs, 1, pkRef);
  -                             result.add(pkRef[0]);
  -                     }
  +                     // are we selecting an entity (or just a field)
  +                     if(selectEntity != null) {
  +                             
  +                             // load the pks into the result list
  +                             Object[] pkRef = new Object[1];
  +                             while(rs.next()) {
  +                                     pkRef[0] = null;
  +                                     selectEntity.loadPrimaryKeyResults(rs, 1, 
pkRef);
  +                                     result.add(pkRef[0]);
  +                             }
  +                             
  +                             // is this an ejb select command
  +                             
if(queryMetaData.getMethod().getName().startsWith("ejbSelect")) {
  +                                     // convert the list of pks into real ejbs
  +                                     EntityContainer container = 
manager.getContainer();
  +                                     if(queryMetaData.isResultTypeMappingLocal()) {
  +                                             result = 
container.getLocalContainerInvoker().getEntityLocalCollection(result);
  +                                     } else {
  +                                             result = 
container.getContainerInvoker().getEntityCollection(result);
  +                                     }
  +                             }
  +                     } else {
  +                             // this is a select for field
  +                             Object[] valueRef = new Object[1];
  +                             while(rs.next()) {
  +                                     valueRef[0] = null;
  +                                     selectCMPField.loadArgumentResults(rs, 1, 
valueRef);
  +                                     result.add(valueRef[0]);
  +                             }
  +                     }       
                } catch(Exception e) {
                        throw new ServerException("Finder failed: ", e);
                }
  
  
  
  1.8       +2 -2      
jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCStoreManager.java
  
  Index: JDBCStoreManager.java
  ===================================================================
  RCS file: 
/cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCStoreManager.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- JDBCStoreManager.java     2001/08/18 16:00:53     1.7
  +++ JDBCStoreManager.java     2001/08/26 19:37:10     1.8
  @@ -44,7 +44,7 @@
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Dain Sundstrom</a>
    * @see org.jboss.ejb.EntityPersistenceStore
  - * @version $Revision: 1.7 $
  + * @version $Revision: 1.8 $
    */                            
   public class JDBCStoreManager extends CMPStoreManager {
        protected DataSource dataSource;
  @@ -132,7 +132,7 @@
                Class beanClass = container.getBeanClass();
                
                Class[] classes = new Class[] { beanClass };
  -             EntityBridgeInvocationHandler handler = new 
EntityBridgeInvocationHandler(entityBridge, beanClass);           
  +             EntityBridgeInvocationHandler handler = new 
EntityBridgeInvocationHandler(container, entityBridge, beanClass);           
                ClassLoader classLoader = beanClass.getClassLoader();
   
                return Proxy.newProxyInstance(classLoader, classes, handler);
  
  
  

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

Reply via email to