User: danch
Date: 01/05/26 17:49:16
Modified: src/main/org/jboss/ejb/plugins/jaws/jdbc
JDBCCommandFactory.java JDBCFindAllCommand.java
JDBCFindEntitiesCommand.java
JDBCFindEntityCommand.java JDBCFinderCommand.java
JDBCLoadEntityCommand.java
Added: src/main/org/jboss/ejb/plugins/jaws/jdbc
JDBCLoadEntitiesCommand.java
Log:
added 'read-ahead' option for finders in JAWS
Revision Changes Path
1.7 +10 -4
jboss/src/main/org/jboss/ejb/plugins/jaws/jdbc/JDBCCommandFactory.java
Index: JDBCCommandFactory.java
===================================================================
RCS file:
/cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/jaws/jdbc/JDBCCommandFactory.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- JDBCCommandFactory.java 2001/03/26 15:19:36 1.6
+++ JDBCCommandFactory.java 2001/05/27 00:49:15 1.7
@@ -25,6 +25,7 @@
import org.jboss.ejb.plugins.jaws.JPMCreateEntityCommand;
import org.jboss.ejb.plugins.jaws.JPMRemoveEntityCommand;
import org.jboss.ejb.plugins.jaws.JPMLoadEntityCommand;
+import org.jboss.ejb.plugins.jaws.JPMLoadEntitiesCommand;
import org.jboss.ejb.plugins.jaws.JPMStoreEntityCommand;
import org.jboss.ejb.plugins.jaws.JPMActivateEntityCommand;
import org.jboss.ejb.plugins.jaws.JPMPassivateEntityCommand;
@@ -42,7 +43,7 @@
* JAWSPersistenceManager JDBCCommandFactory
*
* @author <a href="mailto:[EMAIL PROTECTED]">Justin Forder</a>
- * @version $Revision: 1.6 $
+ * @version $Revision: 1.7 $
*/
public class JDBCCommandFactory implements JPMCommandFactory
{
@@ -130,9 +131,9 @@
return beanExistsCommand;
}
- public JPMFindEntitiesCommand createFindAllCommand()
+ public JPMFindEntitiesCommand createFindAllCommand(FinderMetaData f)
{
- return new JDBCFindAllCommand(this);
+ return new JDBCFindAllCommand(this, f);
}
public JPMFindEntitiesCommand createDefinedFinderCommand(FinderMetaData f)
@@ -140,7 +141,7 @@
return new JDBCDefinedFinderCommand(this, f);
}
- public JPMFindEntitiesCommand createFindByCommand(Method finderMethod)
+ public JPMFindEntitiesCommand createFindByCommand(Method finderMethod,
FinderMetaData f)
throws IllegalArgumentException
{
return new JDBCFindByCommand(this, finderMethod);
@@ -204,6 +205,11 @@
public JPMLoadEntityCommand createLoadEntityCommand()
{
return new JDBCLoadEntityCommand(this);
+ }
+
+ public JPMLoadEntitiesCommand createLoadEntitiesCommand()
+ {
+ return new JDBCLoadEntitiesCommand(this);
}
public JPMStoreEntityCommand createStoreEntityCommand()
1.4 +5 -3
jboss/src/main/org/jboss/ejb/plugins/jaws/jdbc/JDBCFindAllCommand.java
Index: JDBCFindAllCommand.java
===================================================================
RCS file:
/cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/jaws/jdbc/JDBCFindAllCommand.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- JDBCFindAllCommand.java 2000/12/07 15:44:36 1.3
+++ JDBCFindAllCommand.java 2001/05/27 00:49:15 1.4
@@ -7,6 +7,8 @@
package org.jboss.ejb.plugins.jaws.jdbc;
+import org.jboss.ejb.plugins.jaws.metadata.FinderMetaData;
+
/**
* JAWSPersistenceManager JDBCFindAllCommand
*
@@ -15,15 +17,15 @@
* @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 class JDBCFindAllCommand extends JDBCFinderCommand
{
// Constructors --------------------------------------------------
- public JDBCFindAllCommand(JDBCCommandFactory factory)
+ public JDBCFindAllCommand(JDBCCommandFactory factory, FinderMetaData f)
{
- super(factory, "FindAll");
+ super(factory, f);
String sql = "SELECT " + getPkColumnList() + " FROM " +
jawsEntity.getTableName();
1.9 +15 -8
jboss/src/main/org/jboss/ejb/plugins/jaws/jdbc/JDBCFindEntitiesCommand.java
Index: JDBCFindEntitiesCommand.java
===================================================================
RCS file:
/cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/jaws/jdbc/JDBCFindEntitiesCommand.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- JDBCFindEntitiesCommand.java 2001/02/12 18:31:13 1.8
+++ JDBCFindEntitiesCommand.java 2001/05/27 00:49:15 1.9
@@ -22,6 +22,7 @@
import org.jboss.ejb.plugins.jaws.JPMFindEntitiesCommand;
import org.jboss.ejb.plugins.jaws.metadata.FinderMetaData;
import org.jboss.ejb.plugins.jaws.bmp.CustomFindByEntitiesCommand;
+import org.jboss.util.FinderResults;
/**
* Keeps a map from finder name to specific finder command, and
@@ -32,7 +33,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.8 $
+ * @version $Revision: 1.9 $
*/
public class JDBCFindEntitiesCommand implements JPMFindEntitiesCommand
{
@@ -68,7 +69,7 @@
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+".");
+ factory.getLog().error("Could not create the
custom finder " + remoteName+".");
}
}
}
@@ -85,8 +86,12 @@
if ( !knownFinderCommands.containsKey(f.getName()) )
{
- JPMFindEntitiesCommand finderCommand =
- factory.createDefinedFinderCommand(f);
+ JPMFindEntitiesCommand finderCommand = null;
+ if (f.getName().equals("findAll")) {
+ finderCommand = factory.createFindAllCommand(f);
+ } else {
+ finderCommand = factory.createDefinedFinderCommand(f);
+ }
knownFinderCommands.put(f.getName(), finderCommand);
}
@@ -105,12 +110,14 @@
{
if (name.equals("findAll"))
{
- knownFinderCommands.put(name, factory.createFindAllCommand());
+ FinderMetaData f = new FinderMetaData("findAll");
+ knownFinderCommands.put(name, factory.createFindAllCommand(f));
} else if (name.startsWith("findBy") &&
!name.equals("findByPrimaryKey"))
{
try
{
- knownFinderCommands.put(name, factory.createFindByCommand(m));
+ FinderMetaData f = new FinderMetaData(name);
+ knownFinderCommands.put(name, factory.createFindByCommand(m, f));
} catch (IllegalArgumentException e)
{
factory.getLog().debug("Could not create the finder " + name +
@@ -124,7 +131,7 @@
// JPMFindEntitiesCommand implementation -------------------------
- public Collection execute(Method finderMethod,
+ public FinderResults execute(Method finderMethod,
Object[] args,
EntityEnterpriseContext ctx)
throws RemoteException, FinderException
@@ -142,6 +149,6 @@
// JF: Shouldn't tolerate the "not found" case!
return (finderCommand != null) ?
- finderCommand.execute(finderMethod, args, ctx) : new ArrayList();
+ finderCommand.execute(finderMethod, args, ctx) : new FinderResults(new
ArrayList(),null,null,null);
}
}
1.6 +5 -4
jboss/src/main/org/jboss/ejb/plugins/jaws/jdbc/JDBCFindEntityCommand.java
Index: JDBCFindEntityCommand.java
===================================================================
RCS file:
/cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/jaws/jdbc/JDBCFindEntityCommand.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- JDBCFindEntityCommand.java 2000/12/07 15:44:37 1.5
+++ JDBCFindEntityCommand.java 2001/05/27 00:49:15 1.6
@@ -29,7 +29,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 JDBCFindEntityCommand implements JPMFindEntityCommand
{
@@ -60,15 +60,16 @@
}
else
{
- ArrayList result =
- (ArrayList)findEntitiesCommand.execute(finderMethod, args, ctx);
+ Collection result =
+ (Collection)findEntitiesCommand.execute(finderMethod, args, ctx);
if (result.size() == 0)
{
throw new ObjectNotFoundException("No such entity!");
} else if (result.size() == 1)
{
- return result.get(0);
+ Object [] objects = result.toArray();
+ return objects[0];
} else
{
throw new FinderException("More than one entity matches the finder
criteria.");
1.10 +29 -6
jboss/src/main/org/jboss/ejb/plugins/jaws/jdbc/JDBCFinderCommand.java
Index: JDBCFinderCommand.java
===================================================================
RCS file:
/cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/jaws/jdbc/JDBCFinderCommand.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- JDBCFinderCommand.java 2000/12/07 15:44:37 1.9
+++ JDBCFinderCommand.java 2001/05/27 00:49:15 1.10
@@ -23,7 +23,9 @@
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.metadata.PkFieldMetaData;
+import org.jboss.util.FinderResults;
/**
* Abstract superclass of finder commands that return collections.
@@ -33,31 +35,52 @@
* @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.9 $
+ * @version $Revision: 1.10 $
*/
public abstract class JDBCFinderCommand
extends JDBCQueryCommand
implements JPMFindEntitiesCommand
{
+ protected FinderMetaData finderMetaData = null;
// Constructors --------------------------------------------------
- public JDBCFinderCommand(JDBCCommandFactory factory, String name)
+ public JDBCFinderCommand(JDBCCommandFactory factory, FinderMetaData f)
{
- super(factory, name);
+ super(factory, f.getName());
+
+ finderMetaData = f;
}
+
+ public FinderMetaData getFinderMetaData() {
+ return finderMetaData;
+ }
// JPMFindEntitiesCommand implementation -------------------------
- public Collection execute(Method finderMethod,
+ public FinderResults execute(Method finderMethod,
Object[] args,
EntityEnterpriseContext ctx)
throws RemoteException, FinderException
{
- Collection result = null;
+ FinderResults result = null;
try
{
- result = (Collection)jdbcExecute(args);
+ Collection keys = (Collection)jdbcExecute(args);
+ /** @todo: remove this next bit and add 'getWhereClause' to FinderCommands
*/
+ //look for 'where' and ditch everything before it
+ String sql = getSQL(args);
+ sql.toUpperCase();
+ int pos = sql.indexOf("WHERE");
+ String where = "";
+ if (pos != -1) {
+ where = sql.substring(pos);
+ }
+ if (finderMetaData.hasReadAhead()) {
+ result = new FinderResults(keys, where, this, args);
+ } else {
+ result = new FinderResults(keys, null, null, null);
+ }
} catch (Exception e)
{
log.debug(e);
1.9 +42 -15
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/JDBCLoadEntityCommand.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- JDBCLoadEntityCommand.java 2001/03/26 15:55:43 1.8
+++ JDBCLoadEntityCommand.java 2001/05/27 00:49:15 1.9
@@ -11,6 +11,7 @@
import java.lang.reflect.Method;
import java.util.Iterator;
+import java.util.HashMap;
import java.rmi.NoSuchObjectException;
import java.rmi.RemoteException;
@@ -23,6 +24,7 @@
import org.jboss.ejb.plugins.jaws.JAWSPersistenceManager;
import org.jboss.ejb.plugins.jaws.JPMLoadEntityCommand;
import org.jboss.ejb.plugins.jaws.metadata.CMPFieldMetaData;
+import org.jboss.ejb.plugins.jaws.metadata.PkFieldMetaData;
import org.jboss.ejb.plugins.jaws.metadata.JawsEntityMetaData;
/**
@@ -34,7 +36,7 @@
* @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.8 $
+ * @version $Revision: 1.9 $
*/
public class JDBCLoadEntityCommand
extends JDBCQueryCommand
@@ -46,30 +48,48 @@
{
super(factory, "Load");
+ String sql = createSelectClause() + " WHERE " + getPkColumnWhereList();
+ if (jawsEntity.hasSelectForUpdate())
+ {
+ sql += " FOR UPDATE";
+ }
+
+ setSQL(sql);
+ }
+
+ protected String createSelectClause() {
// Select SQL
String sql = "SELECT ";
- Iterator it = jawsEntity.getCMPFields();
+ HashMap alreadyListed = new HashMap();
+ // put the key fields in first
+ Iterator keyIt = jawsEntity.getPkFields();
boolean first = true;
-
- while (it.hasNext())
+ while (keyIt.hasNext())
{
- CMPFieldMetaData cmpField = (CMPFieldMetaData)it.next();
+ PkFieldMetaData pkField = (PkFieldMetaData)keyIt.next();
sql += (first ? "" : ",") +
- cmpField.getColumnName();
+ pkField.getColumnName();
+ alreadyListed.put(pkField.getColumnName().toUpperCase(), pkField);
first = false;
}
- sql += " FROM " + jawsEntity.getTableName() +
- " WHERE " + getPkColumnWhereList();
- if (jawsEntity.hasSelectForUpdate())
+ Iterator it = jawsEntity.getCMPFields();
+
+ while (it.hasNext())
{
- sql += " FOR UPDATE";
+ CMPFieldMetaData cmpField = (CMPFieldMetaData)it.next();
+ if (alreadyListed.get(cmpField.getColumnName().toUpperCase()) == null) {
+ sql += "," + cmpField.getColumnName();
+ alreadyListed.put(cmpField.getColumnName().toUpperCase(), cmpField);
+ }
}
-
- setSQL(sql);
+
+ sql += " FROM " + jawsEntity.getTableName();
+
+ return sql;
}
-
+
// JPMLoadEntityCommand implementation ---------------------------
public void execute(EntityEnterpriseContext ctx)
@@ -107,6 +127,13 @@
}
// Set values
+System.out.print("!");
+ loadOneEntity(rs, ctx);
+
+ return null;
+ }
+
+ protected void loadOneEntity(ResultSet rs, EntityEnterpriseContext ctx) throws
Exception {
int idx = 1;
Iterator iter = jawsEntity.getCMPFields();
@@ -125,9 +152,9 @@
if (jawsEntity.isReadOnly()) pCtx.lastRead = System.currentTimeMillis();
pCtx.state = getState(ctx);
- return null;
- }
+ }
+
// Protected -----------------------------------------------------
protected boolean isTimedOut(EntityEnterpriseContext ctx)
1.1
jboss/src/main/org/jboss/ejb/plugins/jaws/jdbc/JDBCLoadEntitiesCommand.java
Index: JDBCLoadEntitiesCommand.java
===================================================================
/*
* JBoss, the OpenSource EJB server
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package org.jboss.ejb.plugins.jaws.jdbc;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Map;
import java.util.Iterator;
import java.rmi.NoSuchObjectException;
import java.rmi.RemoteException;
import java.rmi.ServerException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import org.jboss.ejb.EntityEnterpriseContext;
import org.jboss.ejb.plugins.jaws.JAWSPersistenceManager;
import org.jboss.ejb.plugins.jaws.JPMLoadEntitiesCommand;
import org.jboss.ejb.plugins.jaws.metadata.CMPFieldMetaData;
import org.jboss.ejb.plugins.jaws.metadata.FinderMetaData;
import org.jboss.ejb.plugins.jaws.metadata.JawsEntityMetaData;
import org.jboss.ejb.plugins.jaws.metadata.PkFieldMetaData;
import org.jboss.util.FinderResults;
/**
* JAWSPersistenceManager JDBCLoadEntityCommand
*
* @see <related>
* @author <a href="mailto:[EMAIL PROTECTED]">Rickard �berg</a>
* @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>
* @author <a href="mailto:[EMAIL PROTECTED]">Dirk Zimmermann</a>
* @author <a href="mailto:[EMAIL PROTECTED]">danch (Dan Christopherson)</a>
* @version $Revision: 1.1 $
*/
public class JDBCLoadEntitiesCommand
extends JDBCLoadEntityCommand
implements JPMLoadEntitiesCommand
{
String selectClause;
// Constructors --------------------------------------------------
public JDBCLoadEntitiesCommand(JDBCCommandFactory factory)
{
super(factory);
selectClause = super.createSelectClause();
}
// JPMLoadEntitiesCommand implementation.
public void execute(FinderResults keys)
throws RemoteException
{
JDBCFinderCommand finder = (JDBCFinderCommand)keys.getFinder();
FinderMetaData metaData = null;
if (finder != null)
metaData = finder.getFinderMetaData();
if (metaData != null && metaData.hasReadAhead() && keys.getQueryData() != null)
{
try
{
Object[] args = {keys};
jdbcExecute(args);
} catch (Exception e)
{
throw new ServerException("Load failed", e);
}
}
}
// JDBCQueryCommand overrides ------------------------------------
protected Object handleResult(ResultSet rs, Object argOrArgs) throws Exception
{
FinderResults keys = (FinderResults)((Object[])argOrArgs)[0];
Map instances = keys.getEntityMap();
while (rs.next())
{
Object key = createKey(rs);
//find the context
EntityEnterpriseContext ctx = (EntityEnterpriseContext)instances.get(key);
if (ctx != null) {
//if the context says it's already valid, don't load it.
if (!ctx.isValid()) {
loadOneEntity(rs, ctx);
ctx.setValid(true);
}
} else {
//if ctx was null, the CMPPersistenceManager doesn't want us to try
// to load it due to a transaction issue.
}
}
return null;
}
protected void setParameters(PreparedStatement stmt, Object argOrArgs)
throws Exception
{
FinderResults keys = (FinderResults)((Object[])argOrArgs)[0];
JDBCFinderCommand finder = (JDBCFinderCommand)keys.getFinder();
Object[] args = keys.getQueryArgs();
finder.setParameters(stmt, args);
}
// JDBCommand ovverrides -----------------------------------------
protected String getSQL(Object argOrArgs) throws Exception
{
FinderResults keys = (FinderResults)((Object[])argOrArgs)[0];
return selectClause + " " + keys.getQueryData().toString();
}
// protected -----------------------------------------------------
protected Object createKey(ResultSet rs) throws Exception {
if (jawsEntity.hasCompositeKey())
{
// Compound key
try
{
Object pk = jawsEntity.getPrimaryKeyClass().newInstance();
int i = 1; // parameter index
Iterator it = jawsEntity.getPkFields();
while (it.hasNext())
{
PkFieldMetaData pkFieldMetaData = (PkFieldMetaData)it.next();
Field pkField = pkFieldMetaData.getPkField();
String colName = pkFieldMetaData.getColumnName();
pkField.set(pk, getResultObject(rs,
i++,
pkField.getType()));
}
return pk;
} catch (Exception e)
{
return null;
}
} else
{
// Primitive key
Iterator it = jawsEntity.getPkFields();
PkFieldMetaData pkFieldMetaData = (PkFieldMetaData)it.next();
return getResultObject(rs, 1, pkFieldMetaData.getCMPField().getType());
}
}
}
_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development