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

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


    public JDBCFindByQuery(JDBCStoreManager manager, JDBCQueryMetaData q) {

        super(manager, q);

        JDBCEntityBridge entity = (JDBCEntityBridge) manager.getEntityBridge();

        String finderName = q.getMethod().getName();

        // finder name will be like findByFieldName
        // we need to convert it to fieldName.
        String cmpFieldName = Character.toLowerCase(finderName.charAt(6)) + finderName.substring(7);

        // get the field
        cmpField = entity.getCMPFieldByName(cmpFieldName);
        if (cmpField == null) {
            throw CmpMessages.MESSAGES.noFinderForMethod(finderName);
        }

        // set the preload fields
        JDBCReadAheadMetaData readAhead = q.getReadAhead();
        if (readAhead.isOnFind()) {
            setEagerLoadGroup(readAhead.getEagerLoadGroup());
        }

        // generate the sql
        StringBuffer sql = new StringBuffer(300);
        sql.append(SQLUtil.SELECT);

        SQLUtil.getColumnNamesClause(entity.getPrimaryKeyFields(), sql);
        if (getEagerLoadGroup() != null) {
            SQLUtil.appendColumnNamesClause(entity, getEagerLoadGroup(), sql);
        }
        sql.append(SQLUtil.FROM)
                .append(entity.getQualifiedTableName())
                .append(SQLUtil.WHERE);
        SQLUtil.getWhereClause(cmpField, sql);

        setSQL(sql.toString());
        setParameterList(QueryParameter.createParameters(0, cmpField));
View Full Code Here


    private String getSQL(JDBCCMRFieldBridge cmrField, boolean[] preloadMask, int keyCount) {
        JDBCCMPFieldBridge[] myKeyFields = getMyKeyFields(cmrField);
        JDBCCMPFieldBridge[] relatedKeyFields = getRelatedKeyFields(cmrField);
        String relationTable = getQualifiedRelationTable(cmrField);
        JDBCEntityBridge relatedEntity = cmrField.getRelatedJDBCEntity();
        String relatedTable = relatedEntity.getQualifiedTableName();

        // do we need to join the relation table and the related table
        boolean join = ((preloadMask != null) || cmrField.allFkFieldsMappedToPkFields())
                && (relatedKeyFields != relatedEntity.getPrimaryKeyFields());

        // aliases for the tables, only required if we are joining the tables
        String relationTableAlias;
        String relatedTableAlias;
        if (join) {
            relationTableAlias = getRelationTable(cmrField);
            relatedTableAlias = (
                    relatedTable.equals(relationTable) ? getRelationTable(cmrField) + '_' + cmrField.getFieldName() : relatedEntity.getTableName()
            );
        } else {
            relationTableAlias = "";
            relatedTableAlias = "";
        }
View Full Code Here

    }

    private static boolean[] getPreloadMask(JDBCCMRFieldBridge cmrField) {
        boolean[] preloadMask = null;
        if (cmrField.getReadAhead().isOnFind()) {
            JDBCEntityBridge relatedEntity = cmrField.getRelatedJDBCEntity();
            String eagerLoadGroup = cmrField.getReadAhead().getEagerLoadGroup();
            preloadMask = relatedEntity.getLoadGroupMask(eagerLoadGroup);
        }
        return preloadMask;
    }
View Full Code Here

            throws FinderException {
        int count = offset;
        Connection con = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        final JDBCEntityBridge entityBridge = (JDBCEntityBridge) selectManager.getEntityBridge();
        boolean throwRuntimeExceptions = entityBridge.getMetaData().getThrowRuntimeExceptions();

        // if metadata is true, the getConnection is done inside
        // its own try catch block to throw a runtime exception (EJBException)
        if (throwRuntimeExceptions) {
            try {
                con = entityBridge.getDataSource().getConnection();
            } catch (SQLException sqle) {
                javax.ejb.EJBException ejbe = new javax.ejb.EJBException("Could not get a connection; " + sqle);
                ejbe.initCause(sqle);
                throw ejbe;
            }
        }


        try {
            // create the statement
            if (log.isDebugEnabled()) {
                log.debug("Executing SQL: " + sql);
                if (limit != 0 || offset != 0) {
                    log.debug("Query offset=" + offset + ", limit=" + limit);
                }
            }

            // if metadata is false, the getConnection is done inside this try catch block
            if (!throwRuntimeExceptions) {
                con = entityBridge.getDataSource().getConnection();
            }
            ps = con.prepareStatement(sql);

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

            // set the parameters
            for (int i = 0; i < parameters.size(); i++) {
                QueryParameter parameter = (QueryParameter) parameters.get(i);
View Full Code Here

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

            boolean[] mask = relatedEntity.getLoadGroupMask(leftJoin.getEagerLoadGroup());
            LeftJoinCMRNode node = new LeftJoinCMRNode(childPath, cmrField, mask, subNodes);
            leftJoinCMRNodes.add(node);
        }

        return leftJoinCMRNodes;
View Full Code Here

    }

    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(' ')
                        .append(relatedAlias)
                        .append(" ON ");
                SQLUtil.getJoinClause(cmrField,
                        alias,
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,
                    sb);

            // eager load group
            if (node.eagerLoadMask != null) {
                SQLUtil.appendColumnNamesClause(relatedEntity.getTableFields(),
                        node.eagerLoadMask,
                        childAlias,
                        sb);
            }
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 {
                    Collection<Object> cachedValue = myCache.getCachedCMRValue(pk, cmrField);
                    if (cachedValue == null) {
                        cachedValue = new ArrayList<Object>();
                        myCache.addPreloadData(pk, cmrField, cachedValue);
                    }

                    if (relatedId != null) {
                        if (cachedValue.contains(relatedId)) {
                            cacheRelatedData = false;
                        } else {
                            cachedValue.add(relatedId);
                        }
                    }
                }
            }

            // load eager load group
            if (node.eagerLoadMask != null) {
                JDBCFieldBridge[] tableFields = relatedEntity.getTableFields();
                for (int fieldInd = 0; fieldInd < tableFields.length; ++fieldInd) {
                    if (node.eagerLoadMask[fieldInd]) {
                        JDBCFieldBridge field = tableFields[fieldInd];
                        ref[0] = null;
                        index = field.loadArgumentResults(rs, index, ref);

                        if (cacheRelatedData) {
                            if (log.isTraceEnabled()) {
                                log.trace("Caching " +
                                        relatedEntity.getEntityName() +
                                        '[' +
                                        relatedId +
                                        "]." +
                                        field.getFieldName() + "=" + ref[0]);
                            }
View Full Code Here

            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

        Class localHomeClass = manager.getComponent().getLocalHomeClass();

        //
        // findByPrimaryKey
        //
        JDBCEntityBridge entity = (JDBCEntityBridge) manager.getEntityBridge();
        if (homeClass != null) {
            try {
                // try to get the finder method on the home interface
                Method method = homeClass.getMethod(FIND_BY_PK, new Class[]{entity.getPrimaryKeyClass()});

                JDBCQueryMetaData findByPKMD = manager.getMetaData().getQueryMetaDataForMethod(method);
                JDBCReadAheadMetaData readAhead = (findByPKMD == null ?
                        entity.getMetaData().getReadAhead() : findByPKMD.getReadAhead());

                // got it add it to known finders
                JDBCQueryMetaData q = new JDBCAutomaticQueryMetaData(
                        method,
                        readAhead,
                        entity.getMetaData().getQlCompiler(),
                        false
                );
                knownQueries.put(method, factory.createFindByPrimaryKeyQuery(q));

                if (log.isDebugEnabled())
                    log.debug("Added findByPrimaryKey query command for home interface");
            } catch (NoSuchMethodException e) {
                throw MESSAGES.homeInterfaceNoPKMethod(homeClass);
            }
        }

        if (localHomeClass != null) {

            Method method;
            try {
                // try to get the finder method on the local home interface
                method = localHomeClass.getMethod(FIND_BY_PK, new Class[]{entity.getPrimaryKeyClass()});
            } catch (NoSuchMethodException e) {
                throw CmpMessages.MESSAGES.localHomeMissingFindByPrimaryKey(entity.getPrimaryKeyClass().getName());
            }

            // got it add it to known finders
            JDBCQueryMetaData findByPKMD = manager.getMetaData().getQueryMetaDataForMethod(method);
            JDBCReadAheadMetaData readAhead = (findByPKMD == null ?
                    entity.getMetaData().getReadAhead() : findByPKMD.getReadAhead());
            JDBCQueryMetaData q = new JDBCAutomaticQueryMetaData(method, readAhead, entity.getMetaData().getQlCompiler(), false);
            knownQueries.put(method, factory.createFindByPrimaryKeyQuery(q));

            if (log.isDebugEnabled())
                log.debug("Added findByPrimaryKey query command for local home interface");
        }
View Full Code Here

TOP

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

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.