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