I guess that I have no other choice, but to close the session manually. Thanks, Caleb! You've shed some light on the issue :)
As for wrapping the session and overriding finalize() - it won't do, as the connection pool gets exhausted very fast (I'm doing a bit of stress testing), and the JVM does not guarantee finalizing objects in time close enough to an object getting out of scope. 2010/7/15 Caleb James DeLisle <[email protected]>: > No, we only use Hibernate/JDBC. I don't think it's much of an issue for that > snippet > because you will only ever need to run it once. As far as closing sessions if > you > forget about them you could write a wrapper for the session and override > finalize() > and have it call close(), this way the garbage collector would close the > session if you > forgot about it. > > Caleb > > Igor Popov wrote: >> I'm afraid it is a problem. If I'm not closing the session explicitly >> in my component code, I end up getting pool exhausted exceptions. Some >> time ago, before I started migrating to component design, I used to >> close the session manually in my plugin, but still was getting the >> same exceptions. Maybe my code was buggy, but I would like, if >> possible, avoid handling sessions myself. Is it even possible? Does >> XWiki use any kind of JTA? >> >> 2010/7/15 Caleb James DeLisle <[email protected]>: >>> Yes, it's closed before you have an opportunity to get a hold of it. >>> >>> You could add session.close() to the end of the script. >>> I don't think it is a problem because after extensive testing of that script >>> I still only have 5 processes of postgres running. >>> according to the javadoc, connection.commit() releases the actual connection >>> to the database. The garbage collector would take care of the rest. >>> >>> I just made a snippet in codeville. >>> http://code.xwiki.org/xwiki/bin/view/Snippets/DehiddenifierSnippet >>> >>> Caleb >>> >>> Igor Popov wrote: >>>> Thanks, Caleb! That saved me a lot of time. >>>> >>>> I have another question. Maybe I'm not getting the hibernate sessions >>>> idea right, but >>>> how can I get the current hibernate session that XWiki uses? I'm not >>>> eager to open my own session, as >>>> I'll have to make sure that it's closed correctly in the end. >>>> >>>> I've tried XWikiHibernateStore.getSession() but it appears to give me >>>> a null value. >>>> >>>> 2010/7/14 Caleb James DeLisle <[email protected]>: >>>>> If you don't mind declaring a dependency on xwiki-core, you can >>>>> import org.xwiki.context.Execution >>>>> import com.xpn.xwiki.XWikiContext >>>>> import com.xpn.xwiki.XWiki >>>>> import com.xpn.xwiki.store.XWikiHibernateStore >>>>> and then use: >>>>> >>>>> @Requirement >>>>> Execution ex; >>>>> >>>>> XWikiHibernateStore hib = >>>>> ex.getContext().get("xwikicontext").getWiki().getHibernateStore(); >>>>> >>>>> and you have XWikiHibernateStore, from that you can get the >>>>> SessionFactory, open a session and do whatever. >>>>> >>>>> The API: >>>>> http://maven.xwiki.org/site/xwiki-core-parent/xwiki-core/apidocs/com/xpn/xwiki/store/XWikiHibernateStore.html >>>>> >>>>> Caleb >>>>> >>>>> Igor Popov wrote: >>>>>> Again I have a question. QueryManager class allows to make queries to >>>>>> the database, but, for example, >>>>>> If I want to store an object in the database, I'll have to use >>>>>> something similar to hibernate session's save() method. >>>>>> What should I do? >>>>>> >>>>>> 2010/7/9 Igor Popov <[email protected]>: >>>>>>> Thanks, Alex! Never thought that it could be in the "scripting" >>>>>>> section of docs... >>>>>>> >>>>>>> 2010/7/9 Alex Busenius <[email protected]>: >>>>>>>> I guess this will answer your question: >>>>>>>> http://platform.xwiki.org/xwiki/bin/view/DevGuide/QueryGuide#HFromJavacomponents >>>>>>>> >>>>>>>> On 07/09/2010 06:28 AM, Igor Popov wrote: >>>>>>>>> Hi! >>>>>>>>> >>>>>>>>> I'm new to XWiki (especially to new "Component" design). My question >>>>>>>>> is: can my component/plugin access the database >>>>>>>>> the same way XWiki does? I.e. if I write Hibernate mappings for my own >>>>>>>>> objects and reference them in XWiki hibernate.cfg.xml, >>>>>>>>> how can my plugin/component gain access to Hibernate session object? >>>>>>>>> >>>>>>>>> Previously I've written a plugin for XWiki and had to connect to >>>>>>>>> database separately from XWiki. >>>>>>>>> It was not convenient at all and I want to avoid this practice in >>>>>>>>> further development. >>>>>>>>> Moreover, I had some problems with using connection pool, so I think >>>>>>>>> it would be wiser to >>>>>>>>> use XWiki database connection. >>>>>>>>> _______________________________________________ >>>>>>>>> users mailing list >>>>>>>>> [email protected] >>>>>>>>> http://lists.xwiki.org/mailman/listinfo/users >>>>>>>>> >>>>>>>> _______________________________________________ >>>>>>>> users mailing list >>>>>>>> [email protected] >>>>>>>> http://lists.xwiki.org/mailman/listinfo/users >>>>>>>> >>>>>> _______________________________________________ >>>>>> users mailing list >>>>>> [email protected] >>>>>> http://lists.xwiki.org/mailman/listinfo/users >>>>>> >>>>> _______________________________________________ >>>>> users mailing list >>>>> [email protected] >>>>> http://lists.xwiki.org/mailman/listinfo/users >>>>> >>>> _______________________________________________ >>>> users mailing list >>>> [email protected] >>>> http://lists.xwiki.org/mailman/listinfo/users >>>> >>> _______________________________________________ >>> users mailing list >>> [email protected] >>> http://lists.xwiki.org/mailman/listinfo/users >>> >> _______________________________________________ >> users mailing list >> [email protected] >> http://lists.xwiki.org/mailman/listinfo/users >> > > _______________________________________________ > users mailing list > [email protected] > http://lists.xwiki.org/mailman/listinfo/users > _______________________________________________ users mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/users
