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 -------------------------