Uploaded image for project: 'ModeShape'
  1. ModeShape
  2. MODE-1092

WEAKREFERENCE is converted to a REFERENCE property when retrieved

    XMLWordPrintable

Details

    • Bug
    • Resolution: Done
    • Critical
    • 2.5.0.Beta1
    • 2.4.0.Final
    • JCR
    • None
    • Hide

      Here is s snapshot of the relevent node type definition:

      ['org:identity'] > nt:unstructured, mix:referenceable , mix:shareable
      ['org:person'] > 'org:identity', mix:referenceable, mix:shareable
      ...
      ['org:identity-group'] > 'org:identity'
        - 'org:name' (String) mandatory
        - 'org:members' (weakreference) = 'org:person' MULTIPLE INITIALIZE
      

      and the codesnippet of the property assignment:

              Node groupNode; //"org:identity-group"
              Node person; // "org:person"
              ...
              Set<Value> membersSet = new HashSet<Value>();
              if (groupNode.hasProperty("org:members")) {
                  Value[] members = groupNode.getProperty("org:members").getValues();
                  List<Value> membersList = Arrays.asList(members);
                  membersSet.addAll(membersList);
              }
              Value newMember = getSession().getValueFactory().createValue(person.getIdentifier(), PropertyType.WEAKREFERENCE);
              membersSet.add(newMember);
              Value[] membersValues = new Value[membersSet.size()];
              membersValues = membersSet.toArray(membersValues);
              groupNode.setProperty("org:members", membersValues, PropertyType.WEAKREFERENCE);
              getSession().save();
              getSession().logout();
      

      If I retrieve the groupe node:

              QueryManager queryManager = session.getWorkspace().getQueryManager();
              Query q = queryManager.createQuery("SELECT * FROM 'org:identity-group' WHERE ('org:name' = '" + name + "')", "JCR-SQL2");
              javax.jcr.query.QueryResult result = q.execute();
              Node groupNode = null;
              for (NodeIterator ni = result.getNodes(); ni.hasNext();) {
                   groupNode = ni.nextNode();
              }
              return groupNode;
      

      Anyway between assignment, storing or retrievig the type of the value switches from WEAK- to REFERENCE.

      Show
      Here is s snapshot of the relevent node type definition: ['org:identity'] > nt:unstructured, mix:referenceable , mix:shareable ['org:person'] > 'org:identity', mix:referenceable, mix:shareable ... ['org:identity-group'] > 'org:identity' - 'org:name' (String) mandatory - 'org:members' (weakreference) = 'org:person' MULTIPLE INITIALIZE and the codesnippet of the property assignment: Node groupNode; //"org:identity-group" Node person; // "org:person" ... Set<Value> membersSet = new HashSet<Value>(); if (groupNode.hasProperty("org:members")) { Value[] members = groupNode.getProperty("org:members").getValues(); List<Value> membersList = Arrays.asList(members); membersSet.addAll(membersList); } Value newMember = getSession().getValueFactory().createValue(person.getIdentifier(), PropertyType.WEAKREFERENCE); membersSet.add(newMember); Value[] membersValues = new Value[membersSet.size()]; membersValues = membersSet.toArray(membersValues); groupNode.setProperty("org:members", membersValues, PropertyType.WEAKREFERENCE); getSession().save(); getSession().logout(); If I retrieve the groupe node: QueryManager queryManager = session.getWorkspace().getQueryManager(); Query q = queryManager.createQuery("SELECT * FROM 'org:identity-group' WHERE ('org:name' = '" + name + "')", "JCR-SQL2"); javax.jcr.query.QueryResult result = q.execute(); Node groupNode = null; for (NodeIterator ni = result.getNodes(); ni.hasNext();) { groupNode = ni.nextNode(); } return groupNode; Anyway between assignment, storing or retrievig the type of the value switches from WEAK- to REFERENCE.
    • Medium

    Description

      A node type having a property of the type 'WEAKREFERENCE'. The WEAKREFERENCE values can be set to the property of a node, but after retrieving of the node the type the value switches to REFERENCE. As consequences:

      • such WEAKREFERENCE values cannot be used for assignment of the WEAKREFERENCE-properties
      • the specification for comparison of the JCR values is broken
      • the referential integrity "strikes" on e.g. an attempt to remove a node if it's referenced.

      Attachments

        Activity

          People

            rhauch Randall Hauch (Inactive)
            rhauch Randall Hauch (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: