Package org.jboss.as.cmp.jdbc.bridge

Examples of org.jboss.as.cmp.jdbc.bridge.JDBCCMRFieldBridge


    public Object execute(Method m, Object[] args, CmpEntityBeanContext ctx) {
        if (cmrWithFKMappedToCMP == null)
            return null;

        for (int i = 0; i < cmrWithFKMappedToCMP.length; ++i) {
            JDBCCMRFieldBridge cmrField = cmrWithFKMappedToCMP[i];
            JDBCCMRFieldBridge relatedCMRField = (JDBCCMRFieldBridge) cmrField.getRelatedCMRField();
            if (cmrField.hasFKFieldsMappedToCMPFields()) {
                Object relatedId = cmrField.getRelatedIdFromContext(ctx);
                if (relatedId != null) {
                    try {
                        if (cmrField.isForeignKeyValid(relatedId)) {
                            cmrField.createRelationLinks(ctx, relatedId);
                        } else {
                            relatedCMRField.addRelatedPKWaitingForMyPK(relatedId, ctx.getPrimaryKeyUnchecked());
                        }
                    } catch (Exception e) {
                        // no such object
                    }
                }
            } else if (relatedCMRField.hasFKFieldsMappedToCMPFields()) {
                cmrField.addRelatedPKsWaitedForMe(ctx);
            }
        }
        return null;
    }
View Full Code Here


        }

        Connection con = null;
        PreparedStatement ps = null;

        JDBCCMRFieldBridge cmrField = relationData.getLeftCMRField();
        try {
            // get the sql
            String sql = getSQL(relationData);
            boolean debug = log.isDebugEnabled();
            if (debug)
                log.debug("Executing SQL: " + sql);

            // get the connection
            DataSource dataSource = cmrField.getDataSource();
            con = dataSource.getConnection();

            // get a prepared statement
            ps = con.prepareStatement(sql);

            Iterator pairs = relationData.addedRelations.iterator();
            while (pairs.hasNext()) {
                RelationPair pair = (RelationPair) pairs.next();

                // set the parameters
                setParameters(ps, relationData, pair);

                int rowsAffected = ps.executeUpdate();
            }
        } catch (Exception e) {
            throw CmpMessages.MESSAGES.couldNotInsertRelations(cmrField.getQualifiedTableName(), e);
        } finally {
            JDBCUtil.safeClose(ps);
            JDBCUtil.safeClose(con);
        }
    }
View Full Code Here

            JDBCUtil.safeClose(con);
        }
    }

    protected static String getSQL(RelationData relationData) {
        JDBCCMRFieldBridge left = relationData.getLeftCMRField();
        JDBCCMRFieldBridge right = relationData.getRightCMRField();

        StringBuffer sql = new StringBuffer(200);
        sql.append(SQLUtil.INSERT_INTO).append(left.getQualifiedTableName());

        sql.append('(');
        SQLUtil.getColumnNamesClause(left.getTableKeyFields(), sql);
        sql.append(SQLUtil.COMMA);
        SQLUtil.getColumnNamesClause(right.getTableKeyFields(), sql);
        sql.append(')');

        sql.append(SQLUtil.VALUES).append('(');
        SQLUtil.getValuesClause(left.getTableKeyFields(), sql);
        sql.append(SQLUtil.COMMA);
        SQLUtil.getValuesClause(right.getTableKeyFields(), sql);
        sql.append(')');
        return sql.toString();
    }
View Full Code Here

                        "." +
                        manager.getMetaData().getName());
    }

    public Collection execute(JDBCCMRFieldBridge cmrField, Object pk) {
        JDBCCMRFieldBridge relatedCMRField = (JDBCCMRFieldBridge) cmrField.getRelatedCMRField();

        // get the read ahead caches
        ReadAheadCache readAheadCache = manager.getReadAheadCache();
        ReadAheadCache relatedReadAheadCache = cmrField.getRelatedManager().getReadAheadCache();

        // get the finder results associated with this context, if it exists
        ReadAheadCache.EntityReadAheadInfo info = readAheadCache.getEntityReadAheadInfo(pk);
        List loadKeys = info.getLoadKeys();

        Connection con = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            // generate the sql
            boolean[] preloadMask = getPreloadMask(cmrField);
            String sql = getSQL(cmrField, preloadMask, loadKeys.size());

            // create the statement
            if (log.isDebugEnabled())
                log.debug("load relation SQL: " + sql);

            // get the connection
            con = cmrField.getDataSource().getConnection();
            ps = con.prepareStatement(sql.toString());

            // Set the fetch size of the statement
            if (entity.getFetchSize() > 0) {
                ps.setFetchSize(entity.getFetchSize());
            }

            // get the load fields
            JDBCCMPFieldBridge[] myKeyFields = getMyKeyFields(cmrField);
            JDBCCMPFieldBridge[] relatedKeyFields = getRelatedKeyFields(cmrField);

            // set the parameters
            int paramIndex = 1;
            for (int i = 0; i < loadKeys.size(); i++) {
                Object key = loadKeys.get(i);
                for (int j = 0; j < myKeyFields.length; ++j)
                    paramIndex = myKeyFields[j].setPrimaryKeyParameters(ps, paramIndex, key);
            }

            // execute statement
            rs = ps.executeQuery();

            // initialize the results map
            Map resultsMap = new HashMap(loadKeys.size());
            for (int i = 0; i < loadKeys.size(); ++i) {
                resultsMap.put(loadKeys.get(i), new ArrayList());
            }

            // load the results
            Object[] ref = new Object[1];
            while (rs.next()) {
                // reset the column index for this row
                int index = 1;

                // ref must be reset to null before each load
                ref[0] = null;

                // if we are loading more then one entity, load the pk from the row
                Object loadedPk = pk;
                if (loadKeys.size() > 1) {
                    // load the pk
                    for (int i = 0; i < myKeyFields.length; ++i) {
                        index = myKeyFields[i].loadPrimaryKeyResults(rs, index, ref);
                        if (ref[0] == null) {
                            break;
                        }
                    }
                    loadedPk = ref[0];
                }

                // load the fk
                ref[0] = null;
                for (int i = 0; i < relatedKeyFields.length; ++i) {
                    index = relatedKeyFields[i].loadPrimaryKeyResults(rs, index, ref);
                    if (ref[0] == null) {
                        break;
                    }
                }
                Object loadedFk = ref[0];

                if (loadedFk != null) {
                    // add this value to the list for loadedPk
                    List results = (List) resultsMap.get(loadedPk);
                    results.add(loadedFk);

                    // if the related cmr field is single valued we can pre-load
                    // the reverse relationship
                    if (relatedCMRField.isSingleValued()) {
                        relatedReadAheadCache.addPreloadData(
                                loadedFk,
                                relatedCMRField,
                                Collections.singletonList(loadedPk));
                    }

                    // read the preload fields
                    if (preloadMask != null) {
                        JDBCFieldBridge[] relatedFields = cmrField.getRelatedJDBCEntity().getTableFields();
                        for (int i = 0; i < relatedFields.length; ++i) {
                            if (preloadMask[i]) {
                                JDBCFieldBridge field = relatedFields[i];
                                ref[0] = null;

                                // read the value and store it in the readahead cache
                                index = field.loadArgumentResults(rs, index, ref);
                                relatedReadAheadCache.addPreloadData(loadedFk, field, ref[0]);
                            }
                        }
                    }
                }
            }

            // set all of the preloaded values
            JDBCReadAheadMetaData readAhead = relatedCMRField.getReadAhead();
            for (Iterator iter = resultsMap.keySet().iterator(); iter.hasNext(); ) {
                Object key = iter.next();

                // get the results for this key
                List results = (List) resultsMap.get(key);
View Full Code Here

            return Collections.emptyList();
        }

        final List<LeftJoinCMRNode> leftJoinCMRNodes = new ArrayList<LeftJoinCMRNode>();
        for (JDBCLeftJoinMetaData leftJoin : leftJoins) {
            JDBCCMRFieldBridge cmrField = entity.getCMRFieldByName(leftJoin.getCmrField());
            if (cmrField == null) {
                throw CmpMessages.MESSAGES.cmrFieldInJoinNotFound(leftJoin.getCmrField(), entity.getEntityName());
            }

            List<LeftJoinCMRNode> subNodes;
            JDBCEntityBridge relatedEntity = cmrField.getRelatedJDBCEntity();
            String childPath = path + '.' + cmrField.getFieldName();
            if (declaredPaths != null) {
                declaredPaths.add(childPath);
            }

            subNodes = getLeftJoinCMRNodes(relatedEntity, childPath, leftJoin.getLeftJoins(), declaredPaths);
View Full Code Here

        return leftJoinCMRNodes;
    }

    public static final void leftJoinCMRNodes(String alias, List<LeftJoinCMRNode> onFindCMRNodes, AliasManager aliasManager, StringBuffer sb) {
        for (LeftJoinCMRNode node : onFindCMRNodes) {
            JDBCCMRFieldBridge cmrField = node.cmrField;
            JDBCEntityBridge relatedEntity = cmrField.getRelatedJDBCEntity();
            String relatedAlias = aliasManager.getAlias(node.path);

            JDBCRelationMetaData relation = cmrField.getMetaData().getRelationMetaData();
            if (relation.isTableMappingStyle()) {
                String relTableAlias = aliasManager.getRelationTableAlias(node.path);
                sb.append(" LEFT OUTER JOIN ")
                        .append(cmrField.getQualifiedTableName())
                        .append(' ')
                        .append(relTableAlias)
                        .append(" ON ");
                SQLUtil.getRelationTableJoinClause(cmrField, alias, relTableAlias, sb);

                sb.append(" LEFT OUTER JOIN ")
                        .append(relatedEntity.getQualifiedTableName())
                        .append(' ')
                        .append(relatedAlias)
                        .append(" ON ");
                SQLUtil.getRelationTableJoinClause(cmrField.getRelatedCMRField(), relatedAlias, relTableAlias, sb);
            } else {
                // foreign key mapping style
                sb.append(" LEFT OUTER JOIN ")
                        .append(relatedEntity.getQualifiedTableName())
                        .append(' ')
View Full Code Here

    public static final void appendLeftJoinCMRColumnNames(List<LeftJoinCMRNode> onFindCMRNodes,
                                                          AliasManager aliasManager,
                                                          StringBuffer sb) {
        for (LeftJoinCMRNode node : onFindCMRNodes) {
            JDBCCMRFieldBridge cmrField = node.cmrField;
            JDBCEntityBridge relatedEntity = cmrField.getRelatedJDBCEntity();
            String childAlias = aliasManager.getAlias(node.path);

            // primary key fields
            SQLUtil.appendColumnNamesClause(relatedEntity.getPrimaryKeyFields(),
                    childAlias,
View Full Code Here

    }

    private static int loadOnFindCMRFields(Object pk, List<LeftJoinCMRNode> onFindCMRNodes, ResultSet rs, int index, Logger log) {
        Object[] ref = new Object[1];
        for (LeftJoinCMRNode node : onFindCMRNodes) {
            JDBCCMRFieldBridge cmrField = node.cmrField;
            ReadAheadCache myCache = cmrField.getJDBCStoreManager().getReadAheadCache();
            JDBCEntityBridge relatedEntity = cmrField.getRelatedJDBCEntity();
            ReadAheadCache relatedCache = cmrField.getRelatedManager().getReadAheadCache();

            // load related id
            ref[0] = null;
            index = relatedEntity.loadPrimaryKeyResults(rs, index, ref);
            Object relatedId = ref[0];
            boolean cacheRelatedData = relatedId != null;

            if (pk != null) {
                if (cmrField.getMetaData().getRelatedRole().isMultiplicityOne()) {
                    // cacheRelatedData the value
                    myCache.addPreloadData(pk,
                            cmrField,
                            relatedId == null ? Collections.EMPTY_LIST : Collections.singletonList(relatedId));
                } else {
View Full Code Here

        }
        final CmpEntityBeanComponentInstance instance = (CmpEntityBeanComponentInstance) context.getPrivateData(ComponentInstance.class);
        final CmpEntityBeanContext ctx = instance.getEjbContext();

        // We are going to work with the context a lot
        JDBCCMRFieldBridge cmrField = (JDBCCMRFieldBridge) context.getParameters()[0];

        if (CMRMessage.GET_RELATED_ID == relationshipMessage) {
            // call getRelateId
            if (log.isTraceEnabled()) {
                log.trace("Getting related id: field=" + cmrField.getFieldName() + " id=" + ctx.getPrimaryKeyUnchecked());
            }
            return cmrField.getRelatedId(ctx);

        } else if (CMRMessage.ADD_RELATION == relationshipMessage) {
            // call addRelation
            Object relatedId = context.getParameters()[1];
            if (log.isTraceEnabled()) {
                log.trace("Add relation: field=" + cmrField.getFieldName() +
                        " id=" + ctx.getPrimaryKeyUnchecked() +
                        " relatedId=" + relatedId);
            }

            cmrField.addRelation(ctx, relatedId);

            return null;

        } else if (CMRMessage.REMOVE_RELATION == relationshipMessage) {
            // call removeRelation
            Object relatedId = context.getParameters()[1];
            if (log.isTraceEnabled()) {
                log.trace("Remove relation: field=" + cmrField.getFieldName() +
                        " id=" + ctx.getPrimaryKeyUnchecked() +
                        " relatedId=" + relatedId);
            }

            cmrField.removeRelation(ctx, relatedId);

            return null;
        } else if (CMRMessage.SCHEDULE_FOR_CASCADE_DELETE == relationshipMessage) {
            JDBCEntityBridge entity = (JDBCEntityBridge) cmrField.getEntity();
            entity.scheduleForCascadeDelete(ctx);
            return null;
        } else if (CMRMessage.SCHEDULE_FOR_BATCH_CASCADE_DELETE == relationshipMessage) {
            JDBCEntityBridge entity = (JDBCEntityBridge) cmrField.getEntity();
            entity.scheduleForBatchCascadeDelete(ctx);
            return null;
        } else {
            // this should not be possible we are using a type safe enum
            throw CmpMessages.MESSAGES.unknownCmpRelationshipMessage(relationshipMessage);
View Full Code Here

        }

        boolean cleanReadAhead = manager.getMetaData().isCleanReadAheadOnLoad();

        boolean loaded = false;
        JDBCCMRFieldBridge onlyOneSingleValuedCMR = null;

        // iterate over the keys in the preloaded map
        Iterator iter = preloadDataMap.entrySet().iterator();
        while (iter.hasNext()) {
            Map.Entry entry = (Map.Entry) iter.next();
            Object field = entry.getKey();

            // get the value that was preloaded for this field
            Object value = entry.getValue();

            // if we didn't get a value something is seriously hosed
            if (value == null) {
                throw MESSAGES.preloadedValueNotFound();
            }

            if (cleanReadAhead) {
                // remove this value from the preload cache as it is about to be loaded
                iter.remove();
            }

            // check for null value standin
            if (value == NULL_VALUE) {
                value = null;
            }

            if (field instanceof JDBCCMPFieldBridge) {
                JDBCCMPFieldBridge cmpField = (JDBCCMPFieldBridge) field;

                if (!cmpField.isLoaded(ctx)) {
                    if (log.isTraceEnabled()) {
                        log.trace("Preloading data:" +
                                " entity=" + manager.getEntityBridge().getEntityName() +
                                " pk=" + ctx.getPrimaryKeyUnchecked() +
                                " cmpField=" + cmpField.getFieldName());
                    }

                    // set the value
                    cmpField.setInstanceValue(ctx, value);

                    // mark this field clean as it's value was just loaded
                    cmpField.setClean(ctx);

                    loaded = true;
                } else {
                    if (log.isTraceEnabled()) {
                        log.trace("CMPField already loaded:" +
                                " entity=" + manager.getEntityBridge().getEntityName() +
                                " pk=" + ctx.getPrimaryKeyUnchecked() +
                                " cmpField=" + cmpField.getFieldName());
                    }
                }
            } else if (field instanceof JDBCCMRFieldBridge) {
                JDBCCMRFieldBridge cmrField = (JDBCCMRFieldBridge) field;

                if (!cmrField.isLoaded(ctx)) {
                    if (log.isTraceEnabled()) {
                        log.trace("Preloading data:" +
                                " entity=" + manager.getEntityBridge().getEntityName() +
                                " pk=" + ctx.getPrimaryKeyUnchecked() +
                                " cmrField=" + cmrField.getFieldName());
                    }

                    // set the value
                    cmrField.load(ctx, (List) value);

                    // add the loaded list to the related entity's readahead cache
                    JDBCStoreManager relatedManager = (JDBCStoreManager) cmrField.getRelatedCMRField().getManager();
                    ReadAheadCache relatedReadAheadCache =
                            relatedManager.getReadAheadCache();
                    relatedReadAheadCache.addFinderResults(
                            (List) value, cmrField.getReadAhead());

                    if (!loaded) {
                        // this is a hack to fix on-load read-ahead for 1:m relationships
                        if (cmrField.isSingleValued() && onlyOneSingleValuedCMR == null) {
                            onlyOneSingleValuedCMR = cmrField;
                        } else {
                            loaded = true;
                        }
                    }
                } else {
                    if (log.isTraceEnabled()) {
                        log.trace("CMRField already loaded:" +
                                " entity=" + manager.getEntityBridge().getEntityName() +
                                " pk=" + ctx.getPrimaryKeyUnchecked() +
                                " cmrField=" + cmrField.getFieldName());
                    }
                }
            }
        }
View Full Code Here

TOP

Related Classes of org.jboss.as.cmp.jdbc.bridge.JDBCCMRFieldBridge

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.