User: tobias  
  Date: 01/01/02 01:08:54

  Modified:    src/main/org/jboss/ejb/plugins/jaws/jdbc
                        JDBCDefinedFinderCommand.java
                        JDBCFindEntitiesCommand.java
  Log:
  Changes by Michel de Groot, thanks!
  1. Added support for custom finder implementations like ejbFind in EJB 
implementation class.
  2. Custom finder implementations override defined or automatic finders as stated in 
the documentation of JBoss.
  
  Revision  Changes    Path
  1.6       +16 -4     
jboss/src/main/org/jboss/ejb/plugins/jaws/jdbc/JDBCDefinedFinderCommand.java
  
  Index: JDBCDefinedFinderCommand.java
  ===================================================================
  RCS file: 
/products/cvs/ejboss/jboss/src/main/org/jboss/ejb/plugins/jaws/jdbc/JDBCDefinedFinderCommand.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- JDBCDefinedFinderCommand.java     2000/12/07 15:44:36     1.5
  +++ JDBCDefinedFinderCommand.java     2001/01/02 09:08:54     1.6
  @@ -22,7 +22,8 @@
    * @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.5 $
  + * @author <a href="mailto:[EMAIL PROTECTED]">Michel de Groot</a>
  + * @version $Revision: 1.6 $
    */
   public class JDBCDefinedFinderCommand extends JDBCFinderCommand
   {
  @@ -60,9 +61,20 @@
            parameterArray[i] = ((Integer)parameters.get(i)).intValue();
         
         // Construct SQL
  -      String sql = "SELECT " + getPkColumnList() +
  -         (f.getOrder() == null || f.getOrder().equals("") ? "" : ","+f.getOrder()) 
+ 
  -         " FROM " + jawsEntity.getTableName() + " WHERE " + query;
  +      // In case of join query:
  +      // order must explicitly identify tablename.field to order on
  +      // query must start with "INNER JOIN <table to join with> WHERE 
  +      // <regular query with fully identified fields>"
  +      String sql = null;
  +      if (query.toLowerCase().startsWith("inner join")) {
  +               sql = "SELECT " + jawsEntity.getTableName()+"."+getPkColumnList() +
  +                     (f.getOrder() == null || f.getOrder().equals("") ? "" : 
","+f.getOrder()) +
  +                     " FROM " + jawsEntity.getTableName() + " " + query;
  +      } else {
  +             sql = "SELECT " + getPkColumnList() +
  +             (f.getOrder() == null || f.getOrder().equals("") ? "" : 
","+f.getOrder()) + 
  +             " FROM " + jawsEntity.getTableName() + " WHERE " + query;
  +      }
         if (f.getOrder() != null && !f.getOrder().equals(""))
         {
            sql += " ORDER BY "+f.getOrder();
  
  
  
  1.6       +29 -1     
jboss/src/main/org/jboss/ejb/plugins/jaws/jdbc/JDBCFindEntitiesCommand.java
  
  Index: JDBCFindEntitiesCommand.java
  ===================================================================
  RCS file: 
/products/cvs/ejboss/jboss/src/main/org/jboss/ejb/plugins/jaws/jdbc/JDBCFindEntitiesCommand.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- JDBCFindEntitiesCommand.java      2000/12/07 15:44:36     1.5
  +++ JDBCFindEntitiesCommand.java      2001/01/02 09:08:54     1.6
  @@ -21,6 +21,7 @@
   import org.jboss.ejb.EntityEnterpriseContext;
   import org.jboss.ejb.plugins.jaws.JPMFindEntitiesCommand;
   import org.jboss.ejb.plugins.jaws.metadata.FinderMetaData;
  +import org.jboss.ejb.plugins.jaws.bmp.CustomFindByEntitiesCommand;
   
   /**
    * Keeps a map from finder name to specific finder command, and
  @@ -31,7 +32,7 @@
    * @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.5 $
  + * @version $Revision: 1.6 $
    */
   public class JDBCFindEntitiesCommand implements JPMFindEntitiesCommand
   {
  @@ -46,6 +47,32 @@
      {
         this.factory = factory;
         
  +      // If finder method uses custom implementation, then it is used. This 
overrides
  +      // defined and automatic finders.
  +      Class ejbClass = null;
  +      try {
  +             ejbClass = 
Class.forName(factory.getMetaData().getEntity().getEjbClass());
  +      } catch (ClassNotFoundException e) {
  +             e.printStackTrace();
  +      }
  +
  +      Method[] customMethods = ejbClass.getMethods();
  +      
  +      for (int i = 0; i < customMethods.length; i++)
  +      {
  +         Method m = customMethods[i];
  +         String name = m.getName();
  +              if (name.startsWith("ejbFindBy")) {
  +                      String remoteName = "f"+name.substring(4);
  +                      try {
  +                              knownFinderCommands.put(remoteName, new 
CustomFindByEntitiesCommand(m));
  +                              factory.getLog().debug("Added custom finder " + 
remoteName +".");
  +                      } catch (IllegalArgumentException e) {
  +                         factory.getLog().debug("Could not create the custom finder 
" + remoteName+".");
  +                      }
  +              }
  +       }
  +
         // Make commands for the defined finders
         
         Iterator definedFinders = factory.getMetaData().getFinders();
  @@ -89,6 +116,7 @@
               }
            }
         }
  +
      }
      
      // JPMFindEntitiesCommand implementation -------------------------
  
  
  

Reply via email to