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