User: dsundstrom Date: 02/01/15 14:14:04 Modified: src/main/org/jboss/ejb/plugins/cmp/jdbc JDBCCreateEntityCommand.java Log: Changed to use merged CMR field and CMP field interface. Changed to use field lists instead of field arrays. Revision Changes Path 1.12 +47 -62 jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCCreateEntityCommand.java Index: JDBCCreateEntityCommand.java =================================================================== RCS file: /cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCCreateEntityCommand.java,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- JDBCCreateEntityCommand.java 2002/01/05 12:08:50 1.11 +++ JDBCCreateEntityCommand.java 2002/01/15 22:14:04 1.12 @@ -12,12 +12,14 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; import javax.ejb.CreateException; import javax.ejb.DuplicateKeyException; import javax.sql.DataSource; import org.jboss.ejb.EntityEnterpriseContext; -import org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMPFieldBridge; +import org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCFieldBridge; import org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCEntityBridge; import org.jboss.logging.Logger; @@ -31,66 +33,60 @@ * @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.11 $ + * @version $Revision: 1.12 $ */ public class JDBCCreateEntityCommand { private JDBCStoreManager manager; private JDBCEntityBridge entity; private Logger log; - private JDBCCMPFieldBridge[] insertFields; + private List insertFields; private String entityExistsSQL; private String insertEntitySQL; private boolean createAllowed; - + public JDBCCreateEntityCommand(JDBCStoreManager manager) { this.manager = manager; entity = manager.getEntityBridge(); // Create the Log log = Logger.getLogger( - this.getClass().getName() + - "." + + this.getClass().getName() + + "." + manager.getMetaData().getName()); - boolean debug = log.isDebugEnabled(); - // set create allowed createAllowed = true; - JDBCCMPFieldBridge[] cmpFields = entity.getJDBCCMPFields(); - for(int i=0; i<cmpFields.length; i++) { - if(cmpFields[i].isPrimaryKeyMember() && cmpFields[i].isReadOnly()) { + List fields = entity.getFields(); + for(Iterator iter = fields.iterator(); iter.hasNext(); ) { + JDBCFieldBridge field = (JDBCFieldBridge)iter.next(); + if(field.isPrimaryKeyMember() && field.isReadOnly()) { createAllowed = false; break; } } - + if(createAllowed) { insertFields = getInsertFields(); entityExistsSQL = createEntityExistsSQL(); insertEntitySQL = createInsertEntitySQL(); - if (debug) - { - log.debug("Entity Exists SQL: " + entityExistsSQL); - log.debug("Insert Entity SQL: " + entityExistsSQL); - } - } - else if (debug) - { + log.debug("Entity Exists SQL: " + entityExistsSQL); + log.debug("Insert Entity SQL: " + insertEntitySQL); + } else { log.debug("Create will not be allowed."); } } - - private JDBCCMPFieldBridge[] getInsertFields() { - JDBCCMPFieldBridge[] cmpFields = entity.getJDBCCMPFields(); - ArrayList fields = new ArrayList(cmpFields.length); - - for(int i=0; i<cmpFields.length; i++) { - if(!cmpFields[i].isReadOnly()) { - fields.add(cmpFields[i]); + + private List getInsertFields() { + List fields = entity.getFields(); + List insertFields = new ArrayList(fields.size()); + + for(Iterator iter = fields.iterator(); iter.hasNext(); ) { + JDBCFieldBridge field = (JDBCFieldBridge)iter.next(); + if(!field.isReadOnly()) { + insertFields.add(field); } } - return (JDBCCMPFieldBridge[])fields.toArray( - new JDBCCMPFieldBridge[fields.size()]); + return insertFields; } private String createEntityExistsSQL() { @@ -98,7 +94,7 @@ sql.append("SELECT COUNT(*)"); sql.append(" FROM ").append(entity.getTableName()); sql.append(" WHERE "); - sql.append(SQLUtil.getWhereClause(entity.getJDBCPrimaryKeyFields())); + sql.append(SQLUtil.getWhereClause(entity.getPrimaryKeyFields())); return sql.toString(); } @@ -125,7 +121,9 @@ "primary key field is read only."); } - Object pk = getPrimaryKey(ctx); + Object pk = entity.extractPrimaryKeyFromInstance(ctx); + log.debug("Create: pk="+pk); + if(entityExists(pk)) { throw new DuplicateKeyException("Entity with primary key " + pk + " already exists"); @@ -137,20 +135,6 @@ return pk; } - private Object getPrimaryKey(EntityEnterpriseContext ctx) - throws CreateException { - - try { - Object pk = entity.extractPrimaryKeyFromInstance(ctx); - if (log.isDebugEnabled()) - log.debug("Create: pk="+pk); - return pk; - } catch(Exception e) { - log.error(e); - throw new CreateException("Extract primary key from instance:" + e); - } - } - private boolean entityExists(Object pk) throws CreateException { @@ -162,10 +146,9 @@ con = dataSource.getConnection(); // create the statement - if (log.isDebugEnabled()) - log.debug("Executing SQL: " + entityExistsSQL); + log.debug("Executing SQL: " + entityExistsSQL); ps = con.prepareStatement(entityExistsSQL); - + // set the parameters entity.setPrimaryKeyParameters(ps, 1, pk); @@ -175,44 +158,46 @@ throw new CreateException("Error checking if entity exists: " + "result set contains no rows"); } - + // did any rows mathch return rs.getInt(1) > 0; } catch(CreateException e) { throw e; } catch(Exception e) { - log.error(e); + log.error("Error checking if entity exists", e); throw new CreateException("Error checking if entity exists:" + e); } finally { JDBCUtil.safeClose(ps); JDBCUtil.safeClose(con); } } - + private void insertEntity(EntityEnterpriseContext ctx) throws CreateException{ Connection con = null; PreparedStatement ps = null; int rowsAffected = 0; - boolean debug = log.isDebugEnabled(); try { // get the connection DataSource dataSource = entity.getDataSource(); con = dataSource.getConnection(); - + // create the statement - if (debug) - log.debug("Executing SQL: " + insertEntitySQL); + log.debug("Executing SQL: " + insertEntitySQL); ps = con.prepareStatement(insertEntitySQL); - + // set the parameters - entity.setInstanceParameters(ps, 1, ctx, insertFields); + int index = 1; + for(Iterator iter = insertFields.iterator(); iter.hasNext(); ) { + JDBCFieldBridge field = (JDBCFieldBridge)iter.next(); + index = field.setInstanceParameters(ps, index, ctx); + } // execute statement rowsAffected = ps.executeUpdate(); } catch(Exception e) { - log.error(e); + log.error("Could not create entity", e); throw new CreateException("Could not create entity:" + e); } finally { JDBCUtil.safeClose(ps); @@ -225,12 +210,12 @@ "affected row: rowsAffected=" + rowsAffected + "id=" + ctx.getId()); } - if (debug) - log.debug("Create: Rows affected = " + rowsAffected); + log.debug("Create: Rows affected = " + rowsAffected); // Mark the inserted fields as clean. - for(int i=0; i<insertFields.length; i++) { - insertFields[i].setClean(ctx); + for(Iterator iter = insertFields.iterator(); iter.hasNext(); ) { + JDBCFieldBridge field = (JDBCFieldBridge)iter.next(); + field.setClean(ctx); } } }
_______________________________________________ Jboss-development mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/jboss-development