incubator-graffito-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ruchi Goel <Ruchi.G...@Sun.COM>
Subject problem in querying nodes (Discriminator ?) Help needed !
Date Thu, 14 Sep 2006 11:05:32 GMT
Hi,
   I am trying a simple save and then query for a java object via 
jcrmapping.
I ahve two questions :

1. What is the concept of "discriminator " and when is it set to 
true/false ?

2. I have set discriminator = falsein mapping file.In a successive save 
and read , I am able to save a node via the following :

Ad ad = new Ad();
     ad.setPath("/ad");
     ad.setTitle("IT");
     ad.setText("This ad is for IT jobs");
     
ad.setImageAsLink("http://http://incubator.apache.org/images/apache-incubator-logo.png");
     Collection links = new ArrayList();
     links.add((String)"http://yahoo.com");
     links.add((String)"http://google.com");
     ad.setLinks(links);
     try{
        FileInputStream fis = new FileInputStream("c:/tmp/Sun_logo.gif");
        ad.setImageAsBinary(fis);
     }catch(IOException ioe){
         System.out.println(ioe.getMessage());
         System.exit(0);
     }
       pm.insert(ad);
        pm.save();
, but when I try to read it back via following :
   public Ad getAd(String title){
        Filter filter = qm.createFilter(Ad.class);
        filter.addEqualTo("title", title);
        Query query = qm.createQuery(filter);
        Ad ad = (Ad)pm.getObject(query);
        return ad;
    };

The result  says :
Exception in thread "main" 
org.apache.portals.graffito.jcr.exception.PersistenceException: 
Impossible to get the object - the query returns more than one object
        at 
org.apache.portals.graffito.jcr.persistence.impl.PersistenceManagerImpl.getObject(PersistenceManagerImpl.java:454)
        at 
com.sun.portal.cms.service.AdModelServiceImpl.getAd(AdModelServiceImpl.java:54)
        at com.sun.portal.cms.Test.testReadAd(Test.java:57)
        at com.sun.portal.cms.Test.main(Test.java:69)

while I check in the repository, I have exactly one node with this title.

If I try to read the collection of objects ,
I get the following error :
Exception in thread "main" 
org.apache.portals.graffito.jcr.exception.JcrMappingException: 
Impossible to find the classdescriptor for /ad. There is no 
discriminator and associated  JCR node type
        at 
org.apache.portals.graffito.jcr.persistence.objectconverter.impl.ObjectConverterImpl.getObject(ObjectConverterImpl.java:271)
        at 
org.apache.portals.graffito.jcr.persistence.impl.PersistenceManagerImpl.getObjects(PersistenceManagerImpl.java:492)
        at 
com.sun.portal.cms.service.AdModelServiceImpl.getAd(AdModelServiceImpl.java:55)
        at com.sun.portal.cms.Test.testReadAd(Test.java:57)
        at com.sun.portal.cms.Test.main(Test.java:69)
Java Result: 1

I am sure I am missing something here , but cannot trace it . I am able 
to do teh above operations via directly using JSR170 calls.
Any help appreciated.


Thanks,
Ruchi


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message