Return-Path: Delivered-To: apmail-jackrabbit-users-archive@minotaur.apache.org Received: (qmail 87347 invoked from network); 9 Jul 2010 19:15:41 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 9 Jul 2010 19:15:41 -0000 Received: (qmail 97137 invoked by uid 500); 9 Jul 2010 19:15:40 -0000 Delivered-To: apmail-jackrabbit-users-archive@jackrabbit.apache.org Received: (qmail 97079 invoked by uid 500); 9 Jul 2010 19:15:40 -0000 Mailing-List: contact users-help@jackrabbit.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: users@jackrabbit.apache.org Delivered-To: mailing list users@jackrabbit.apache.org Received: (qmail 97070 invoked by uid 99); 9 Jul 2010 19:15:40 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 09 Jul 2010 19:15:40 +0000 X-ASF-Spam-Status: No, hits=-0.0 required=10.0 tests=SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: local policy) Received: from [62.15.141.74] (HELO aguilardelgado.com) (62.15.141.74) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 09 Jul 2010 19:15:30 +0000 Received: from [192.168.10.100] (179.228.16.95.dynamic.jazztel.es [95.16.228.179]) (authenticated bits=0) by aguilardelgado.com (8.14.3/8.14.3/Debian-9.1ubuntu1) with ESMTP id o69JF0k2002028 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Fri, 9 Jul 2010 21:15:09 +0200 Subject: Re: Why lazy initialization of collections only works second time it's accessed? From: Gonzalo Aguilar Delgado To: users@jackrabbit.apache.org In-Reply-To: <1278702475.11720.20.camel@azul1> References: <1278702475.11720.20.camel@azul1> Content-Type: text/plain; charset="UTF-8" Date: Fri, 09 Jul 2010 21:14:59 +0200 Message-ID: <1278702899.11720.23.camel@azul1> Mime-Version: 1.0 X-Mailer: Evolution 2.28.3 Content-Transfer-Encoding: 8bit X-Virus-Checked: Checked by ClamAV on apache.org Really curious... Changing the line @Bean(converter=ParentBeanConverterImpl.class) protected JetspeedFolder parentFolder; to @Bean(converter=ParentBeanConverterImpl.class) protected JetspeedCMSObject parentFolder; Worked well because all parent objects will be of type JetspeedCMSObject. This is not really what I want but I have to move on and later set constraints... But as I said. I'm still curious. Why second time trying loading worked? El vie, 09-07-2010 a las 21:07 +0200, Gonzalo Aguilar Delgado escribió: > Hi there! > > This one is good! ;D > I have nodetypes as follows: > > Hierarchy: > > CMSObject > Hierarchy > Page > Fragment > > We only create nodes of type Page and Fragment and a page can contain > several fragments because hierarchy node specifies that one or more > CMSObjects can be children of nodes of it. And of course nodes that > extends it. > > Well I can save a page with it's fragments. That works well. just adding > them as childrens. That's great! > > And I can retrieve the page also! Normal eh? But not! This piece of code > fails: > Page page = pageManager.getPage("/test002.psml"); > System.out.println("This is page " + page.getId()); > > // Temp test > JetspeedPageImpl jspage = (JetspeedPageImpl) page; > > ---->>> Here it fails: Because proxy inside the collection > for(Iterator it = jspage.getChildren().iterator(); > it.hasNext(); ) > { > JetspeedFragmentImpl child = (JetspeedFragmentImpl) it.next(); > if(child instanceof JetspeedFragmentImpl) > { > System.out.println("Is Fragment: " + child.getId()); > } > } > > And it fails because the proxy fails to load childrens on first try. > Don't know why because of log problem I have (I have open another > thread). > SEE DEBUG BELOW > > Curious thing is that it tries to load two times the fragment inside the > page. One as page and one as fragment. (Check last two lines of first > try). > > When I stop to debug before that point I can use the watch window in > eclipse and click on the proxy that fills the collection. This causes it > to try loading. It shows same error. But if I try a second time it > shows. Last line with: > "Target loaded". > > So it works! But only the second time. > > Mmmmmmmmm. Strange... > > Any help on this? > > Thank you in advance. > ========================= NOTICE (UPDATE)=================== > I added a try like this before the sentence that fails: > List child = jspage.getChildren(); > try > { > child.iterator(); > }catch(Exception ex) > { > log.debug("Exception occurred: " + ex.getMessage()); > } > > And found a error like this one: > > DEBUG > org.apache.jetspeed.page.TestJackrabbitPageManager.testBasicGetPage(TestJackrabbitPageManager.java:216): Exception occurred: Cannot set the field parentFolder in the class : org.apache.jetspeed.om.model.JetspeedFragmentImpl; nested exception is java.lang.IllegalArgumentException: Cannot invoke org.apache.jetspeed.om.model.JetspeedCMSObjectImpl.setParentFolder on bean class 'class org.apache.jetspeed.om.model.JetspeedFragmentImpl' - argument type mismatch - had objects of type "org.apache.jetspeed.om.model.JetspeedPageImpl" but expected signature "org.apache.jetspeed.om.model.interfaces.JetspeedFolder" > > But why the second time it works?! With this try and catch everything > works well... > > =========================================================== > > > ============================================ LOG ================= > > > DEBUG > org.apache.jackrabbit.ocm.manager.objectconverter.impl.SimpleFieldsHelper.retrieveSimpleField(SimpleFieldsHelper.java:184): retrieveSimpleField: Use default value from property definition for missing mapped property j2:name of class 'org.apache.jetspeed.om.model.JetspeedPageImpl' > DEBUG > org.apache.jackrabbit.ocm.manager.collectionconverter.impl.NTCollectionConverterImpl.doGetCollection(NTCollectionConverterImpl.java:230): Collection node found : /test002.psml/P-129b887435c-10000 > DEBUG > org.apache.jackrabbit.ocm.manager.objectconverter.impl.SimpleFieldsHelper.retrieveSimpleField(SimpleFieldsHelper.java:184): retrieveSimpleField: Use default value from property definition for missing mapped property j2:title of class 'org.apache.jetspeed.om.model.JetspeedFragmentImpl' > DEBUG > org.apache.jackrabbit.ocm.manager.objectconverter.impl.SimpleFieldsHelper.retrieveSimpleField(SimpleFieldsHelper.java:184): retrieveSimpleField: Use default value from property definition for missing mapped property j2:name of class 'org.apache.jetspeed.om.model.JetspeedFragmentImpl' > DEBUG > org.apache.jackrabbit.ocm.manager.objectconverter.impl.SimpleFieldsHelper.retrieveSimpleField(SimpleFieldsHelper.java:184): retrieveSimpleField: Use default value from property definition for missing mapped property j2:name of class 'org.apache.jetspeed.om.model.JetspeedPageImpl' > > ============= SECOND TRY WITH eclipse debugging after this it works. > DEBUG > org.apache.jackrabbit.ocm.manager.collectionconverter.impl.NTCollectionConverterImpl.doGetCollection(NTCollectionConverterImpl.java:230): Collection node found : /test002.psml/P-129b887435c-10000 > DEBUG > org.apache.jackrabbit.ocm.manager.objectconverter.impl.AbstractLazyLoader.getTarget(AbstractLazyLoader.java:59): Target loaded > > > > > > > >