gdamour     2005/02/02 07:53:06

  Modified:    modules/openejb-builder/src/java/org/openejb/deployment
                        CMPContainerBuilder.java
  Log:

  Select methods should be added to the instance map and not to the interface
  one.
  
  Add a deployment test to verify that finders and selects are properly
  hooked in and invokable.
  
  Revision  Changes    Path
  1.10      +38 -34    
openejb/modules/openejb-builder/src/java/org/openejb/deployment/CMPContainerBuilder.java
  
  Index: CMPContainerBuilder.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/openejb-builder/src/java/org/openejb/deployment/CMPContainerBuilder.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- CMPContainerBuilder.java  30 Jan 2005 06:02:35 -0000      1.9
  +++ CMPContainerBuilder.java  2 Feb 2005 12:53:06 -0000       1.10
  @@ -54,6 +54,7 @@
   import java.util.LinkedHashMap;
   import java.util.List;
   import java.util.Map;
  +
   import javax.ejb.TimedObject;
   import javax.ejb.Timer;
   import javax.management.ObjectName;
  @@ -237,7 +238,6 @@
   
           // EJB QL queries
           Map finders = createFinders(ejb);
  -        Map selects = createSelects(ejb);
           
           // findByPrimaryKey
           QueryCommandView localProxyLoadView = 
queryBuilder.buildFindByPrimaryKey(getEJBName(), true);
  @@ -255,25 +255,26 @@
           // build the instance factory
           LinkedHashMap cmpFieldAccessors = 
createCMPFieldAccessors(faultHandler);
           LinkedHashMap cmrFieldAccessors = createCMRFieldAccessors();
  +        LinkedHashMap selects = createSelects(ejb);
           Map instanceMap = null;
           CMP1Bridge cmp1Bridge = null;
           if (cmp2) {
               // filter out the accessors associated to virtual CMR fields.
  -            LinkedHashMap existingCMRFieldAccessores = new 
LinkedHashMap(cmrFieldAccessors);
  -            for (Iterator iter = 
existingCMRFieldAccessores.entrySet().iterator(); iter.hasNext();) {
  +            LinkedHashMap existingCMRFieldAccessors = new 
LinkedHashMap(cmrFieldAccessors);
  +            for (Iterator iter = 
existingCMRFieldAccessors.entrySet().iterator(); iter.hasNext();) {
                   Map.Entry entry = (Map.Entry) iter.next();
                   String name = (String) entry.getKey();
                   if ( ejb.getAssociationEnd(name).isVirtual() ) {
                       iter.remove();
                   }
               }
  -            instanceMap = buildInstanceMap(beanClass, cmpFieldAccessors, 
existingCMRFieldAccessores);
  +            instanceMap = buildInstanceMap(beanClass, cmpFieldAccessors, 
existingCMRFieldAccessors, selects);
           } else {
               cmp1Bridge = new CMP1Bridge(beanClass, cmpFieldAccessors);
           }
   
           // build the vop table
  -        LinkedHashMap vopMap = buildVopMap(beanClass, cacheTable, 
cmrFieldAccessors, cmp1Bridge, identityDefiner, 
ejb.getPrimaryKeyGeneratorDelegate(), primaryKeyTransform, localProxyTransform, 
remoteProxyTransform, finders, selects);
  +        LinkedHashMap vopMap = buildVopMap(beanClass, cacheTable, 
cmrFieldAccessors, cmp1Bridge, identityDefiner, 
ejb.getPrimaryKeyGeneratorDelegate(), primaryKeyTransform, localProxyTransform, 
remoteProxyTransform, finders);
   
           InterfaceMethodSignature[] signatures = (InterfaceMethodSignature[]) 
vopMap.keySet().toArray(new InterfaceMethodSignature[vopMap.size()]);
           VirtualOperation[] vtable = (VirtualOperation[]) 
vopMap.values().toArray(new VirtualOperation[vopMap.size()]);
  @@ -302,15 +303,15 @@
           return createEJBQLQueryMap(findersMap);
       }
       
  -    private Map createSelects(EJB ejb) throws Exception {
  +    private LinkedHashMap createSelects(EJB ejb) throws Exception {
           EJBQLToPhysicalQuery toPhysicalQuery = new 
EJBQLToPhysicalQuery(ejbSchema, sqlSchema, globalSchema);
   
           IdentityHashMap selectsMap = toPhysicalQuery.buildSelects(ejb);
           return createEJBQLQueryMap(selectsMap);
       }
   
  -    private Map createEJBQLQueryMap(Map ejbQLMap) {
  -        Map queryCommands = new HashMap();
  +    private LinkedHashMap createEJBQLQueryMap(Map ejbQLMap) {
  +        LinkedHashMap queryCommands = new LinkedHashMap();
           
           for (Iterator iter = ejbQLMap.entrySet().iterator(); 
iter.hasNext();) {
               Map.Entry entry = (Map.Entry) iter.next();
  @@ -401,7 +402,7 @@
           CMRField relatedField = (CMRField) association.getOtherEnd(field);
           EJB relatedEJB = (EJB) field.getEntity();
           CacheTable relatedCacheTbl = (CacheTable) 
globalSchema.getEntity(relatedEJB.getName());
  -        IdentityDefiner identityDefiner = 
identityDefinerBuilder.getIdentityDefiner((EJB) relatedField.getEntity());
  +        IdentityDefiner identityDefiner = 
identityDefinerBuilder.getIdentityDefiner(relatedField.getEntity());
   
           List pkFields = relatedEJB.getPrimaryKeyFields();
           IdentityDefiner relatedIdentityDefiner;
  @@ -427,7 +428,7 @@
                   new ReferenceAccessor(relatedIdentityDefiner));
       }
   
  -    private Map buildInstanceMap(Class beanClass, LinkedHashMap cmpFields, 
LinkedHashMap cmrFields) {
  +    private Map buildInstanceMap(Class beanClass, LinkedHashMap cmpFields, 
LinkedHashMap cmrFields, LinkedHashMap selects) {
           Map instanceMap;
           instanceMap = new HashMap();
   
  @@ -437,7 +438,8 @@
           // add the cmr getters and setters to the instance table.
           addFieldOperations(instanceMap, beanClass, cmrFields);
   
  -        // todo add the select methods
  +        // add the select methods
  +        addSelects(instanceMap, beanClass, selects);
   
           return instanceMap;
       }
  @@ -461,6 +463,29 @@
           }
       }
   
  +    private void addSelects(Map instanceMap, Class beanClass, LinkedHashMap 
selects) throws IllegalArgumentException {
  +        for (Iterator iterator = selects.entrySet().iterator(); 
iterator.hasNext();) {
  +            Map.Entry entry = (Map.Entry) iterator.next();
  +            InterfaceMethodSignature signature = (InterfaceMethodSignature) 
entry.getKey();
  +            QueryCommandView view = (QueryCommandView) entry.getValue();
  +
  +            Method method = signature.getMethod(beanClass);
  +            if (method == null) {
  +                throw new IllegalArgumentException("Could not find select 
for signature: " + signature);
  +            }
  +            MethodSignature methodSignature = new MethodSignature(method);
  +            
  +            String returnType = method.getReturnType().getName();
  +            if (returnType.equals("java.util.Collection")) {
  +                instanceMap.put(methodSignature, new 
CollectionValuedSelect(view));
  +            } else if (returnType.equals("java.util.Set")) {
  +                instanceMap.put(methodSignature, new SetValuedSelect(view));
  +            } else {
  +                instanceMap.put(methodSignature, new 
SingleValuedSelect(view));
  +            }
  +        }
  +    }
  +
       protected LinkedHashMap buildVopMap(Class beanClass,
               CacheTable cacheTable,
               Map cmrFieldAccessors,
  @@ -470,8 +495,7 @@
               IdentityTransform primaryKeyTransform,
               IdentityTransform localProxyTransform,
               IdentityTransform remoteProxyTransform,
  -            Map finders,
  -            Map selects) throws Exception {
  +            Map finders) throws Exception {
   
           ProxyInfo proxyInfo = createProxyInfo();
   
  @@ -595,26 +619,6 @@
                   vopMap.put(signature, new EnumerationValuedFinder(views[0], 
views[1]));
               } else {
                   vopMap.put(signature, new SingleValuedFinder(views[0], 
views[1]));
  -            }
  -        }
  -        
  -        for (Iterator iterator = selects.entrySet().iterator(); 
iterator.hasNext();) {
  -            Map.Entry entry = (Map.Entry) iterator.next();
  -            InterfaceMethodSignature signature = (InterfaceMethodSignature) 
entry.getKey();
  -            QueryCommandView view = (QueryCommandView) entry.getValue();
  -
  -            Method method = signature.getMethod(beanClass);
  -            if (method == null) {
  -                throw new DeploymentException("Could not find method for 
signature: " + signature);
  -            }
  -
  -            String returnType = method.getReturnType().getName();
  -            if (returnType.equals("java.util.Collection")) {
  -                vopMap.put(signature, new CollectionValuedSelect(view));
  -            } else if (returnType.equals("java.util.Set")) {
  -                vopMap.put(signature, new SetValuedSelect(view));
  -            } else {
  -                vopMap.put(signature, new SingleValuedSelect(view));
               }
           }
           
  
  
  

Reply via email to