Package org.datanucleus

Examples of org.datanucleus.ClassLoaderResolver


     * @return Scalar expression representing the cast object.
     */
    public SQLExpression cast(SQLExpression expr)
    {
        RDBMSStoreManager storeMgr = stmt.getRDBMSManager();
        ClassLoaderResolver clr = stmt.getClassLoaderResolver();

        // Extract cast type
        String castClassName = (String)((StringLiteral)expr).getValue();
        Class type = null;
        try
        {
            type = stmt.getQueryGenerator().resolveClass(castClassName);
        }
        catch (ClassNotResolvedException cnre)
        {
            type = null;
        }
        if (type == null)
        {
            throw new NucleusUserException(LOCALISER_CORE.msg("037017", castClassName));
        }

        // Extract type of this object and check obvious conditions
        SQLExpressionFactory exprFactory = stmt.getSQLExpressionFactory();
        Class memberType = clr.classForName(mapping.getType());
        if (!memberType.isAssignableFrom(type) && !type.isAssignableFrom(memberType))
        {
            // object type and cast type are totally incompatible, so just return false
            JavaTypeMapping m = exprFactory.getMappingForType(boolean.class, true);
            return exprFactory.newLiteral(stmt, m, false).eq(exprFactory.newLiteral(stmt, m, true));
        }
        else if (memberType == type)
        {
            // Just return this expression since it is already castable
            return this;
        }

        if (mapping instanceof EmbeddedMapping)
        {
            // Don't support embedded casts
            JavaTypeMapping m = exprFactory.getMappingForType(boolean.class, true);
            return exprFactory.newLiteral(stmt, m, false).eq(exprFactory.newLiteral(stmt, m, true));
        }
        else if (mapping instanceof ReferenceMapping)
        {
            // This expression will be for the table containing the reference so need to join now
            ReferenceMapping refMapping = (ReferenceMapping)mapping;
            if (refMapping.getMappingStrategy() != ReferenceMapping.PER_IMPLEMENTATION_MAPPING)
            {
                throw new NucleusUserException("Impossible to do cast of interface to " + type.getName() +
                    " since interface is persisted as embedded String." +
                    " Use per-implementation mapping to allow this query");
            }
            JavaTypeMapping[] implMappings = refMapping.getJavaTypeMapping();
            for (int i=0;i<implMappings.length;i++)
            {
                Class implType = clr.classForName(implMappings[i].getType());
                if (type.isAssignableFrom(implType))
                {
                    DatastoreClass castTable = storeMgr.getDatastoreClass(type.getName(), clr);
                    SQLTable castSqlTbl = stmt.leftOuterJoin(table, implMappings[i], refMapping,
                        castTable, null, castTable.getIdMapping(), null, null, null);
View Full Code Here


     * @param mapping The mapping
     */
    private void addSubexpressionsForValue(Object value, JavaTypeMapping mapping)
    {
        RDBMSStoreManager storeMgr = stmt.getRDBMSManager();
        ClassLoaderResolver clr = stmt.getClassLoaderResolver();
        String objClassName = value.getClass().getName();
        if (mapping instanceof PersistableMapping)
        {
            objClassName = mapping.getType();
        }
View Full Code Here

        if (fmd == null)
        {
            return false;
        }

        ClassLoaderResolver clr = ec.getClassLoaderResolver();
        MetaDataManager mmgr = ec.getMetaDataManager();
        if (fmd.hasCollection())
        {
            if (fmd.getCollection().elementIsPersistent())
            {
                // Collection of PC elements
                return true;
            }
            else
            {
                String elementType = fmd.getCollection().getElementType();
                Class elementCls = clr.classForName(elementType);
                if (mmgr.getMetaDataForImplementationOfReference(elementCls, null, clr) != null)
                {
                    // Collection of reference type for FCOs
                    return true;
                }
                if (elementCls != null && ClassUtils.isReferenceType(elementCls))
                {
                    try
                    {
                        String[] impls = getImplementationNamesForReferenceField(fmd,
                            FieldRole.ROLE_COLLECTION_ELEMENT, clr, mmgr);
                        if (impls != null)
                        {
                            elementCls = clr.classForName(impls[0]);
                            if (ec.getApiAdapter().isPersistable(elementCls))
                            {
                                // Collection of reference type for FCOs
                                return true;
                            }
                        }
                    }
                    catch (NucleusUserException nue)
                    {
                        // No implementations found so not persistable
                    }
                }
            }
        }
        else if (fmd.hasMap())
        {
            if (fmd.getMap().keyIsPersistent())
            {
                // Map of PC keys
                return true;
            }
            else
            {
                String keyType = fmd.getMap().getKeyType();
                Class keyCls = clr.classForName(keyType);
                if (mmgr.getMetaDataForImplementationOfReference(keyCls, null, clr) != null)
                {
                    // Map with keys of reference type for FCOs
                    return true;
                }
                if (keyCls != null && ClassUtils.isReferenceType(keyCls))
                {
                    try
                    {
                        String[] impls = getImplementationNamesForReferenceField(fmd,
                            FieldRole.ROLE_MAP_KEY, clr, mmgr);
                        if (impls != null)
                        {
                            keyCls = clr.classForName(impls[0]);
                            if (ec.getApiAdapter().isPersistable(keyCls))
                            {
                                // Map with keys of reference type for FCOs
                                return true;
                            }
                        }
                    }
                    catch (NucleusUserException nue)
                    {
                        // No implementations found so not persistable
                    }
                }
            }

            if (fmd.getMap().valueIsPersistent())
            {
                // Map of PC values
                return true;
            }
            else
            {
                String valueType = fmd.getMap().getValueType();
                Class valueCls = clr.classForName(valueType);
                if (mmgr.getMetaDataForImplementationOfReference(valueCls, null, clr) != null)
                {
                    // Map with values of reference type for FCOs
                    return true;
                }
                if (valueCls != null && ClassUtils.isReferenceType(valueCls))
                {
                    try
                    {
                        String[] impls = getImplementationNamesForReferenceField(fmd,
                            FieldRole.ROLE_MAP_VALUE, clr, mmgr);
                        if (impls != null)
                        {
                            valueCls = clr.classForName(impls[0]);
                            if (ec.getApiAdapter().isPersistable(valueCls))
                            {
                                // Map with values of reference type for FCOs
                                return true;
                            }
                        }
                    }
                    catch (NucleusUserException nue)
                    {
                        // No implementations found so not persistable
                    }
                }
            }
        }
        else if (fmd.hasArray())
        {
            if (mmgr.getApiAdapter().isPersistable(fmd.getType().getComponentType()))
            {
                // PersistenceCapable[]
                return true;
            }
            else
            {
                String elementType = fmd.getArray().getElementType();
                Class elementCls = clr.classForName(elementType);
                if (mmgr.getApiAdapter().isPersistable(elementCls))
                {
                    // Array of reference type for FCOs
                    return true;
                }
                else if (mmgr.getMetaDataForImplementationOfReference(elementCls, null, clr) != null)
                {
                    // Array of reference type for FCOs
                    return true;
                }
                else if (elementCls != null && ClassUtils.isReferenceType(elementCls))
                {
                    try
                    {
                        String[] impls = getImplementationNamesForReferenceField(fmd,
                            FieldRole.ROLE_ARRAY_ELEMENT, clr, mmgr);
                        if (impls != null)
                        {
                            elementCls = clr.classForName(impls[0]);
                            if (ec.getApiAdapter().isPersistable(elementCls))
                            {
                                // Array of reference type for FCOs
                                return true;
                            }
View Full Code Here

        if (fmd == null)
        {
            return false;
        }

        ClassLoaderResolver clr = ec.getClassLoaderResolver();
        MetaDataManager mgr = ec.getMetaDataManager();
        if (fmd.isSerialized() || fmd.isEmbedded())
        {
            // Serialised or embedded fields have no FCO
            return false;
        }
        else if (fmd.hasCollection() && !fmd.getCollection().isSerializedElement() && !fmd.getCollection().isEmbeddedElement())
        {
            if (fmd.getCollection().elementIsPersistent())
            {
                // Collection of PC elements
                return true;
            }
            else
            {
                String elementType = fmd.getCollection().getElementType();
                Class elementCls = clr.classForName(elementType);
                if (elementCls != null && ClassUtils.isReferenceType(elementCls) &&
                    mgr.getMetaDataForImplementationOfReference(elementCls, null, clr) != null)
                {
                    // Collection of reference type for FCOs
                    return true;
                }
            }
        }
        else if (fmd.hasMap())
        {
            if (fmd.getMap().keyIsPersistent() && !fmd.getMap().isEmbeddedKey() && !fmd.getMap().isSerializedKey())
            {
                // Map of PC keys
                return true;
            }
            else
            {
                String keyType = fmd.getMap().getKeyType();
                Class keyCls = clr.classForName(keyType);
                if (keyCls != null && ClassUtils.isReferenceType(keyCls) &&
                    mgr.getMetaDataForImplementationOfReference(keyCls, null, clr) != null)
                {
                    // Map with keys of reference type for FCOs
                    return true;
                }
            }
               
            if (fmd.getMap().valueIsPersistent() && !fmd.getMap().isEmbeddedValue() && !fmd.getMap().isSerializedValue())
            {
                // Map of PC values
                return true;
            }
            else
            {
                String valueType = fmd.getMap().getValueType();
                Class valueCls = clr.classForName(valueType);
                if (valueCls != null && ClassUtils.isReferenceType(valueCls) &&
                    mgr.getMetaDataForImplementationOfReference(valueCls, null, clr) != null)
                {
                    // Map with values of reference type for FCOs
                    return true;
View Full Code Here

        {
            return null;
        }
        String rowClassName = null;

        ClassLoaderResolver clr = ec.getClassLoaderResolver();
        AbstractClassMetaData baseCmd =
            (AbstractClassMetaData)((InheritanceMetaData)dismd.getParent()).getParent();
        if (dismd.getStrategy() == DiscriminatorStrategy.CLASS_NAME)
        {
            rowClassName = discrimValue;
View Full Code Here

     * @throws NucleusUserException if candidate is an interface with no metadata (i.e not persistent)
     */
    public static List<AbstractClassMetaData> getMetaDataForCandidates(Class cls, boolean subclasses,
        ExecutionContext ec)
    {
        ClassLoaderResolver clr = ec.getClassLoaderResolver();
        List<AbstractClassMetaData> cmds = new ArrayList();
        if (cls.isInterface())
        {
            // Query of interface(+subclasses)
            AbstractClassMetaData icmd = ec.getMetaDataManager().getMetaDataForInterface(cls, clr);
View Full Code Here

        while (iter.hasNext())
        {
            Map.Entry entry = (Map.Entry)iter.next();
            int fieldNumber = ((Integer)entry.getKey()).intValue();
            AbstractMemberMetaData mmd = cmd.getMetaDataForManagedMemberAtAbsolutePosition(fieldNumber);
            ClassLoaderResolver clr = om.getClassLoaderResolver();
            Object oldValue = entry.getValue();
            int relationType = mmd.getRelationType(clr);
            if (relationType == Relation.ONE_TO_ONE_BI)
            {
                // 1-1 bidirectional
View Full Code Here

        while (iter.hasNext())
        {
            Map.Entry entry = (Map.Entry)iter.next();
            int fieldNumber = ((Integer)entry.getKey()).intValue();
            AbstractMemberMetaData mmd = cmd.getMetaDataForManagedMemberAtAbsolutePosition(fieldNumber);
            ClassLoaderResolver clr = om.getClassLoaderResolver();
            Object oldValue = entry.getValue();
            int relationType = mmd.getRelationType(clr);
            if (relationType == Relation.ONE_TO_ONE_BI)
            {
                // 1-1 bidirectional
View Full Code Here

        useCache = SCOUtils.useContainerCache(ownerSM, fieldName);

        if (!SCOUtils.collectionHasSerialisedElements(fmd) &&
                fmd.getPersistenceModifier() == FieldPersistenceModifier.PERSISTENT)
        {
            ClassLoaderResolver clr = ec.getClassLoaderResolver();
            this.backingStore = (ListStore)
            ((BackedSCOStoreManager)ec.getStoreManager()).getBackingStoreForField(clr, fmd, java.util.LinkedList.class);
        }

        if (NucleusLogger.PERSISTENCE.isDebugEnabled())
View Full Code Here

            }

            boolean loadedOldValue = false;
            Object oldValue = currentValue;
            AbstractMemberMetaData fmd = cmd.getMetaDataForManagedMemberAtAbsolutePosition(field);
            ClassLoaderResolver clr = myOM.getClassLoaderResolver();
            int relationType = fmd.getRelationType(clr);

            // Remove this object from L2 cache since now dirty to avoid potential problems
            myOM.removeObjectFromLevel2Cache(myID);
View Full Code Here

TOP

Related Classes of org.datanucleus.ClassLoaderResolver

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.