See below.

On Sep 25, 2012, at 10:48 AM, Denis Gervalle <[email protected]> wrote:

> On Tue, Sep 25, 2012 at 1:29 AM, Andreas Jonsson <[email protected]> wrote:
> 
>> 2012-09-24 17:26, Vincent Massol skrev:
>>> Hi devs,
>>> 
>>> I was trying to make XEM work with HSQLDB and... I have succeeded :)
>>> 
>>> The only problem I have is that DBCP doesn't seem to work with
>> Hibernate. For some weird reasons when we do a SET SCHEMA it makes calls to
>> fail afterwards. In any case if I configure Hibernate to not use DBCP all
>> work just fine.
>> 
>> Funny coincidence!  I was just trying to get it to work with
>> PostgreSQL.  It mostly works, as already commented on the Jira issue.
>> The only thing that seems to work unreliably is the initial template
>> creation.  It seems likely that it is the same issue.
>> 
>> But having looked into this I'm a bit worried about the current XEM
>> implementation.
> 
> 
> You should, we really do scary stuff to support multiple DB, and also
> dynamic mapping.
> 
> 
>> I'm not an expert on Hibernate, but to me it seems that
>> entities are expected to be bound to specific tables at initialization
>> time.  So I'm wondering, does Hibernate really support changing the
>> mappings by switching databases or schemas underneath?
> 
> 
> The tricks is that we do not really support multiple hibernate mapping. All
> accessed DBs use the same mapping. These are serious limitations in
> multi-wiki mode for mapping related features.
> 
> Hibernate does not even knows that we switch the DB under its feet. Even
> the pool provider is not aware. This is why we need to set the correct DB
> each time we open a session/transaction (always tight together), which
> means getting a connection from the pool. We do not support nested
> session/transaction, in particular to different DBs for the same reason.
> 
> 
>> What prevents it
>> from generating prepared queries for accessing the entities, which will
>> be resolved against the initial database/schema, and continue to use
>> these even after the database or schema changes?
>> 
> 
> Our config prevent using prepared statements on the DB server.
> 
> 
>> +1 for your action plan.
>> 
>> Best Regards,
>> 
>> /Andreas
>> 
>>> 
>>> I've googled around and found that there are lots of people complaining
>> about DBCP.
>>> 
>>> I've googled for what connection pooling library to use and I've found
>> that most people are recommending BoneCP (http://jolbox.com/).
>>> 
>>> See:
>>> *
>> http://stackoverflow.com/questions/5640146/java-jdbc-connection-pool-library-choice-in-2011-2012
>>> * http://www.jorambarrez.be/blog/2012/04/30/dbcp_vs_c3p0_bonecp/
>>> *
>> http://stackoverflow.com/questions/8057110/java-database-connection-pool-bonecp-vs-dbpool-vs-c3p0
>>> 
>>> The other thing is that we currently have some 300 line of code that we
>> shouldn't have at all and that we need in XWiki just for handling DBCP (see
>> com.xpn.xwiki.store.DBCPConnectionProvider).
>>> 
>>> The pro of BoneCP is that it seems to be the fastest, see
>> http://jolbox.com/benchmarks.html
>>> 
>>> So here's what I'd like to propose:
>>> 
>>> * We move  DBCPConnectionProvider to a legacy module
>>> * We bundle the bonecp jar by default
>>> * We configure our hibernate.cfg.xml by default to use boneCP:
>>> 
>>>    <property name="bonecp.idleMaxAge">240</property>
>>>    <property name="bonecp.idleConnectionTestPeriod">60</property>
>>>    <property name="bonecp.partitionCount">3</property>
>>>    <property name="bonecp.acquireIncrement">10</property>
>>>    <property name="bonecp.maxConnectionsPerPartition">60</property>
>>>    <property name="bonecp.minConnectionsPerPartition">20</property>
>>>    <property name="bonecp.statementsCacheSize">50</property>
>>>    <property name="bonecp.releaseHelperThreads">3</property>
>>> 
>>>    <property
>> name="connection.provider_class">com.jolbox.bonecp.provider.BoneCPConnectionProvider</property>
>>> 
>>> What this means:
>>> * Existing users of XWiki will not have to change anything, it'll still
>> work
>>> * New users will use bonecp without knowing
>>> * Existing users can migrate to bonecp just by changing one line in
>> their hibernate.cfg.xml file
>>> 
>>> I'd love to do this for 4.3 but we're already quite advanced in the 4.x
>> cycle. That said it's just a one line change in hibernate.cfg.xml in case
>> of problem to go back to DBCP so we could do this for 4.3 which leaves us
>> 4.3, 4.4 and 4.5 to test this out. And if later on we find an issue we'll
>> always be able to release a 4.5.1 that has this one line change to go back
>> to DBCP.
>>> 
>>> WDYT?
>>> 
>>> Here's my +1 for this action plan.
>> 
> 
> Unless BoneCP really provide proven improvements, and not only a potential
> performance increase, that will probably not be tremendous, I am not really
> in favor of changing a well-know Apache project for a project that as not
> really a great team of supporter.

I understand. You should also consider that Apache DBCP is well known for:
* being slow
* being full of bugs
* having a stalled develoment

At least that's what I keep seeing mentioned in all my google everywhere.

I think you shouldn't think Apache == Good. At least not for Commons. Commons 
libs can be very small and maintained by very few people.

If you check http://commons.apache.org/dbcp/team-list.html you'll see several 
committers.
But if you check 
http://svnsearch.org/svnsearch/repos/ASF/search?view=plot&path=%2Fcommons%2Fproper%2Fdbcp&plotsort=commits
 you'll see that only 2 committers have been active since 2009.

You should also note that Tomcat 7 has implemented its own connection pooling 
thus dropping DBCP even though they're both in apache land… you should ask why. 
I don't know the internal story but here's what they say:

http://stackoverflow.com/questions/520585/connection-pooling-options-with-jdbc-dbcp-vs-c3p0/3481821#3481821

Thanks
-Vincent

PS: I don't disagree with your analysis but we shouldn't be too fearful either 
of making discoveries/changes. Provided we can control them and revert easily 
it's  not a bad thing to discover new stuff.

PPS: BoneCP could not be the best choice. Maybe C3P0 is better now or maybe the 
new Tomcat Connection Pool is better.

PPPS: In any case I'm not going to make any change till I get to the bottom of 
this issue with HSQLDB in virtual mode….

> From the project info page, I see only
> one name. From the forum, there seems to be serious rumors that the project
> is no more supported by that guy since more than a year.
> 
> So, currently, I am -1.
> 
> 
>>> 
>>> Thanks
>>> -Vincent
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to