Package org.apache.ojb.broker.metadata

Examples of org.apache.ojb.broker.metadata.ObjectReferenceDescriptor


    private boolean linkOrUnlink(boolean doLink, Object obj, String attributeName, boolean insert)
    {
        boolean match = false;
        ClassDescriptor cld = m_broker.getDescriptorRepository().getDescriptorFor(ProxyHelper.getRealClass(obj));
        ObjectReferenceDescriptor ord;

        // first look for reference then for collection
        ord = cld.getObjectReferenceDescriptorByName(attributeName);
        if (ord != null)
        {
View Full Code Here


    public void testSerializedObjectsRefreshWithProxy()
    {
        String prefix = "testSerializedObjectsRefreshWithProxy_" + System.currentTimeMillis() + "_";

        ClassDescriptor cld = broker.getClassDescriptor(ObjectRepository.Component.class);
        ObjectReferenceDescriptor ord = cld.getObjectReferenceDescriptorByName("parentComponent");
        boolean oldState = ord.isLazy();
        try
        {
            ord.setLazy(true);
            ObjectRepository.ComponentIF parent = new ObjectRepository.Component();
            parent.setName(prefix + "main_component");

            ObjectRepository.ComponentIF compSub1 = new ObjectRepository.Component();
            compSub1.setName(prefix + "sub_1");

            ObjectRepository.ComponentIF compSub2 = new ObjectRepository.Component();
            compSub2.setName(prefix + "sub_2");

            ObjectRepository.ComponentIF compSub3 = new ObjectRepository.Component();
            compSub2.setName(prefix + "sub_3");

            ObjectRepository.Group group = new ObjectRepository.Group();
            group.setName(prefix + "test_group");

            compSub1.setParentComponent(parent);
            compSub2.setParentComponent(parent);
            compSub3.setParentComponent(parent);
            ArrayList list = new ArrayList();
            list.add(compSub1);
            list.add(compSub2);
            list.add(compSub3);
            parent.setChildComponents(list);
            parent.setGroup(group);

            broker.beginTransaction();
            broker.store(parent);
            broker.commitTransaction();

            broker.clearCache();
            Query query = QueryFactory.newQueryByIdentity(parent);
            parent = (ObjectRepository.ComponentIF) broker.getObjectByQuery(query);

            Query groupQuery = QueryFactory.newQueryByIdentity(group);
            ObjectRepository.Group lookedUpGroup = (ObjectRepository.Group) broker.getObjectByQuery(groupQuery);

            assertNotNull(parent);
            assertNotNull(parent.getGroup());
            assertNotNull(parent.getChildComponents());
            assertNotNull(parent.getName());
            assertEquals(3, parent.getChildComponents().size());
            assertEquals(group.getName(), (parent.getGroup().getName()));
            ObjectRepository.ComponentIF aChild = (ObjectRepository.ComponentIF) parent.getChildComponents().iterator().next();
            assertNotNull(aChild);
            assertNotNull(aChild.getParentComponent());
            assertEquals(parent, aChild.getParentComponent());
            assertNotNull(lookedUpGroup);

            //*************************************
            assertNotNull(parent);
            assertNotNull(parent.getGroup());
            parent = (ObjectRepository.ComponentIF) serializeDeserializeObject(parent);
            broker.retrieveAllReferences(parent);
            assertNotNull(parent);
            /*
            Now we have a problem! After serialization we can't find the anonymous keys
            for parent object, because object identity has changed!!
            This is now fixed in class QueryReferenceBroker#getReferencedObjectIdentity
            */
            assertNotNull(parent.getGroup());
            //*************************************
            assertNotNull(parent.getChildComponents());
            assertNotNull(parent.getName());
            assertEquals(3, parent.getChildComponents().size());
            aChild = (ObjectRepository.ComponentIF) parent.getChildComponents().iterator().next();
            assertNotNull(aChild);
            assertNotNull(aChild.getParentComponent());
            assertEquals(parent, aChild.getParentComponent());

            broker.beginTransaction();
            broker.store(parent);
            broker.commitTransaction();

            // now nothing should happen, because we don't make any changes
            broker.clearCache();
            query = QueryFactory.newQueryByIdentity(parent);
            parent = (ObjectRepository.ComponentIF) broker.getObjectByQuery(query);
            groupQuery = QueryFactory.newQueryByIdentity(group);
            lookedUpGroup = (ObjectRepository.Group) broker.getObjectByQuery(groupQuery);
            assertNotNull(parent);
            assertNotNull(parent.getGroup());
            assertNotNull(parent.getChildComponents());
            assertNotNull(parent.getName());
            assertEquals(3, parent.getChildComponents().size());
            assertEquals(group.getName(), (parent.getGroup().getName()));
            aChild = (ObjectRepository.ComponentIF) parent.getChildComponents().iterator().next();
            assertNotNull(aChild);
            assertNotNull(aChild.getParentComponent());
            assertEquals(parent, aChild.getParentComponent());
            assertNotNull(lookedUpGroup);
        }
        finally
        {
            ord.setLazy(oldState);
        }
    }
View Full Code Here

    }

    private void changeRepositoryAutoSetting(String attributeName, boolean retrieve, int update, int delete)
    {
        ClassDescriptor cld = broker.getClassDescriptor(Repository.class);
        ObjectReferenceDescriptor ord = cld.getObjectReferenceDescriptorByName(attributeName);
        ord.setCascadeRetrieve(retrieve);
        ord.setCascadingStore(update);
        ord.setCascadingDelete(delete);
    }
View Full Code Here

    }

    private void changeRepositoryAutoSetting(String attributeName, boolean retrieve, boolean update, boolean delete)
    {
        ClassDescriptor cld = broker.getClassDescriptor(Repository.class);
        ObjectReferenceDescriptor ord = cld.getObjectReferenceDescriptorByName(attributeName);
        ord.setCascadeRetrieve(retrieve);
        ord.setCascadeStore(update);
        ord.setCascadeDelete(delete);
    }
View Full Code Here

    }

    public void testAutoUpdateDeleteSettings()
    {
        changeRepositoryAutoSetting("ref", true, false, false);
        ObjectReferenceDescriptor ord = broker.getClassDescriptor(Repository.class)
                .getObjectReferenceDescriptorByName("ref");
        assertEquals(ObjectReferenceDescriptor.CASCADE_LINK, ord.getCascadingStore());
        assertEquals(ObjectReferenceDescriptor.CASCADE_NONE, ord.getCascadingDelete());
        assertEquals(false, ord.getCascadeStore());
        assertEquals(false, ord.getCascadeDelete());

        changeRepositoryAutoSetting("ref", true, true, true);
        ord = broker.getClassDescriptor(Repository.class).getObjectReferenceDescriptorByName("ref");
        assertEquals(ObjectReferenceDescriptor.CASCADE_OBJECT, ord.getCascadingStore());
        assertEquals(ObjectReferenceDescriptor.CASCADE_OBJECT, ord.getCascadingDelete());
        assertEquals(true, ord.getCascadeStore());
        assertEquals(true, ord.getCascadeDelete());
    }
View Full Code Here

     * Associate the batched Children with their owner object.
     * Loop over owners
     */
    protected void associateBatched(Collection owners, Collection children)
    {
        ObjectReferenceDescriptor ord = getObjectReferenceDescriptor();
        ClassDescriptor cld = getOwnerClassDescriptor();
        Object owner;
        Object relatedObject;
        Object fkValues[];
        Identity id;
        PersistenceBroker pb = getBroker();
        PersistentField field = ord.getPersistentField();
        Class topLevelClass = pb.getTopLevelClass(ord.getItemClass());
        HashMap childrenMap = new HashMap(children.size());


        for (Iterator it = children.iterator(); it.hasNext(); )
        {
            relatedObject = it.next();
            childrenMap.put(pb.serviceIdentity().buildIdentity(relatedObject), relatedObject);
        }

        for (Iterator it = owners.iterator(); it.hasNext(); )
        {
            owner = it.next();
            fkValues = ord.getForeignKeyValues(owner,cld);
            if (isNull(fkValues))
            {
                field.set(owner, null);
                continue;
            }
View Full Code Here

     * @param children Collection where related objects found in the cache should be added.
     */
    protected Query[] buildPrefetchQueries(Collection owners, Collection children)
    {
        ClassDescriptor cld = getOwnerClassDescriptor();
        ObjectReferenceDescriptor ord = getObjectReferenceDescriptor();
        Collection queries = new ArrayList(owners.size());
        Collection idsSubset = new HashSet(owners.size());
        Iterator iter = owners.iterator();
        Class topLevelClass = getBroker().getTopLevelClass(ord.getItemClass());
        Object[] fkValues;
        Object owner;
        Identity id;
        PersistenceBroker pb = getBroker();
        ObjectCache cache = pb.serviceObjectCache();

        while (iter.hasNext())
        {
            owner = iter.next();
            fkValues = ord.getForeignKeyValues(owner,cld);
            if (isNull(fkValues))
            {
                continue;
            }
            id = pb.serviceIdentity().buildIdentity(null, topLevelClass, fkValues);
View Full Code Here

        ArrayList descs = baseCld.getAttributeDescriptorsForPath(objectProjectionAttribute);
        int pathLen = descs.size();

        if ((pathLen > 0) && (descs.get(pathLen - 1) instanceof ObjectReferenceDescriptor))
        {
            ObjectReferenceDescriptor ord =
                    ((ObjectReferenceDescriptor) descs.get(pathLen - 1));
            setObjectProjectionAttribute(objectProjectionAttribute,
                                         ord.getItemClass());
        }
    }
View Full Code Here

    {
        // get all members of obj that are references and delete them
        Iterator i = listRds.iterator();
        while (i.hasNext())
        {
            ObjectReferenceDescriptor rds = (ObjectReferenceDescriptor) i.next();
            if ((!ignoreReferences && rds.getCascadingDelete() == ObjectReferenceDescriptor.CASCADE_OBJECT)
                    || rds.isSuperReferenceDescriptor())
            {
                Object referencedObject = rds.getPersistentField().get(obj);
                if (referencedObject != null)
                {
                    doDelete(referencedObject, ignoreReferences);
                }
            }
View Full Code Here

            return;
        }
        Iterator i = listRds.iterator();
        while (i.hasNext())
        {
            ObjectReferenceDescriptor rds = (ObjectReferenceDescriptor) i.next();
            /*
            arminw: the super-references (used for table per subclass inheritance) must
            be performed in any case. The "normal" 1:1 references can be ignored when
            flag "ignoreReferences" is set
            */
            if((!ignoreReferences && rds.getCascadingStore() != ObjectReferenceDescriptor.CASCADE_NONE)
                    || rds.isSuperReferenceDescriptor())
            {
                storeAndLinkOneToOne(false, obj, cld, rds, insert);
            }
        }
    }
View Full Code Here

TOP

Related Classes of org.apache.ojb.broker.metadata.ObjectReferenceDescriptor

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.