Nice, works like a charm :). On a side note, websites that I’ve switched to HikariCP have been up since the switch, so it does seem to have been a problem with Cayenne’s connection pool.
Also, the websites I’ve switched over feel like they’ve had a caffeine enema or something of the ilk. They feel vastly faster in many cases. But that may also have something to do with configuration (HikariCP has great pages about DB specific configuration for the most common DBs). https://github.com/brettwooldridge/HikariCP/wiki/MySQL-Configuration Cheers, - hugi > On 8. mar. 2016, at 14:37, Andrus Adamchik <[email protected]> wrote: > > Also pretty easy - define a custom DataSourceFactory: > > builder.addModule(b -> b.bind(DataSourceFactory.class).to(MyImpl.class)); > > Andrus > >> On Mar 8, 2016, at 3:20 AM, Hugi Thordarson <[email protected]> wrote: >> >> Not quite done :). >> >> I have a project that uses multiple Cayenne models connected to multiple >> databases. The connection information is currently stored in the models and >> I’m constructing the ServerRuntime like this: >> >> ServerRuntimeBuilder b = new ServerRuntimeBuilder( "Netbokhald" ); >> b.addConfig( "cayenne-core/cayenne-project.xml" ); >> b.addConfig( "cayenne-reporting/cayenne-project.xml" ); >> >> How would I go about programmatically configuring separate DataSources for >> each model? >> >> Cheers, >> - hugi >> >> >> >>> On 7. mar. 2016, at 21:03, Hugi Thordarson <[email protected]> wrote: >>> >>> Well, that was easy! Up and running in production. >>> >>> HikariConfig config = new HikariConfig(); >>> config.setJdbcUrl( >>> "jdbc:mysql://server:3306/database?useUnicode=true&characterEncoding=utf8&autoReconnect=true&connectTimeout=0" >>> ); >>> config.setUsername( “myUsername" ); >>> config.setPassword( “myPassword" ); >>> >>> HikariDataSource dataSource = new HikariDataSource( config ); >>> serverRuntimeBuilder = serverRuntimeBuilder.dataSource( dataSource ); >>> >>> Thanks, >>> - hugi >>> >>> >>>> On 7. mar. 2016, at 20:51, Andrus Adamchik <[email protected]> wrote: >>>> >>>> Yep. Cayenne built-in pool is intentionally basic with a minimal number of >>>> features (Here we may be dealing with a bug though, and I'd like to fix >>>> it, but that's a separate issue). So yeah, using a third party DS may be a >>>> good idea. Here is an example how you can set it up: >>>> >>>> DataSource ds = // instantiate it via API specific to you DS provider >>>> >>>> ServerRuntime runtime = >>>> ServerRuntimeBuilder.builder().dataSource(ds).build(); >>>> // of course add any other things you need to add to the builder to get a >>>> working Cayenne stack. >>>> >>>> Andrus >>>> >>>> >>>>> On Mar 7, 2016, at 12:45 PM, Hugi Thordarson <[email protected]> wrote: >>>>> >>>>> Thanks John! I’m going to try my hand at HikariCP. >>>>> >>>>> Are there any examples anywhere on how to configure Cayenne to use a >>>>> third party connection pool? >>>>> >>>>> Cheers, >>>>> - hugi >>>>> >>>>> >>>>> >>>>> >>>>>> On 7. mar. 2016, at 20:39, John Huss <[email protected]> wrote: >>>>>> >>>>>> EOF can do JNDI, but that's not going to do anything to fix your problem. >>>>>> >>>>>> The connection pool in cayenne had some changes somewhat recently so it's >>>>>> entirely possible there are bugs. >>>>>> >>>>>> In practice it turns out many people don't use the connection pool >>>>>> built-in >>>>>> to Cayenne at all, and rather use a third-party connection pool, of which >>>>>> there are several. The cayenne one is decent, but it is very limited in >>>>>> functionality and less robust due to having a smaller user base and >>>>>> being a >>>>>> non-core feature. >>>>>> >>>>>> You can use another pool like: >>>>>> hikari <https://github.com/brettwooldridge/HikariCP> - If I was starting >>>>>> a >>>>>> new project I'd use this >>>>>> tomcat-jdbc <https://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html> - >>>>>> This is what I currently use >>>>>> commonds-dbcp <https://commons.apache.org/proper/commons-dbcp/> >>>>>> c3po <http://www.mchange.com/projects/c3p0/> >>>>>> >>>>>> The main reason I turned to a third-party connection pool was to get >>>>>> fair-scheduling which will provide connections to whoever has been >>>>>> waiting >>>>>> the longest, which helps avoid unnecessary errors caused by serving >>>>>> requests out of order. >>>>>> >>>>>> John >>>>>> >>>>>> On Mon, Mar 7, 2016 at 2:31 PM Michael Gentry <[email protected]> >>>>>> wrote: >>>>>> >>>>>>> Well, I'm not sure what you are using to run your web application, but >>>>>>> Tomcat, Jetty, JBoss, etc all have mechanisms to provide JNDI lookups >>>>>>> of DB >>>>>>> connection pools. You just tell Cayenne Modeler to use JNDI lookup and >>>>>>> give it the JNDI name, then configure the container to provide the DB >>>>>>> connection. >>>>>>> >>>>>>> Is your WO application using EOF or Cayenne? Been a while since I used >>>>>>> WO, >>>>>>> but I'd be stunned if EOF cannot use a JNDI lookup as well. >>>>>>> >>>>>>> mrg >>>>>>> >>>>>>> >>>>>>> On Mon, Mar 7, 2016 at 3:07 PM, Hugi Thordarson <[email protected]> >>>>>>> wrote: >>>>>>> >>>>>>>> Hi Michael, >>>>>>>> does using JNDI change anything about the connection itself, isn’t it >>>>>>> just >>>>>>>> a different method of looking up connection information? >>>>>>>> >>>>>>>> But I probably can’t use it anyway since one of the apps is a >>>>>>>> WebObjects >>>>>>>> app and doesn’t provide a JNDI service (at least I’ve never used it). >>>>>>>> >>>>>>>> Thanks, >>>>>>>> - hugi >>>>>>>> >>>>>>>> >>>>>>>>> On 7. mar. 2016, at 19:13, Michael Gentry <[email protected]> >>>>>>> wrote: >>>>>>>>> >>>>>>>>> Hi Hugi, >>>>>>>>> >>>>>>>>> Since this appears to be a web-based application, can you switch to >>>>>>> using >>>>>>>>> JNDI? >>>>>>>>> >>>>>>>>> mrg >>>>>>>>> >>>>>>>>> >>>>>>>>> On Mon, Mar 7, 2016 at 5:46 AM, Hugi Thordarson <[email protected]> >>>>>>>> wrote: >>>>>>>>> >>>>>>>>>> Hi all, >>>>>>>>>> This is still happening, even after I added a validationQuery, our >>>>>>>>>> app >>>>>>>> is >>>>>>>>>> dying quite frequently :(. I’m not quite sure how to debug this, is >>>>>>>> there >>>>>>>>>> any way for me to catch where connections are being opened in the >>>>>>>>>> code >>>>>>>> and >>>>>>>>>> at what location they’re hanging? >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>> >>>>>>> https://www.dropbox.com/s/8jkmh6513s6wwkn/Screenshot%202016-03-07%2010.21.53.png?dl=0 >>>>>>>>>> >>>>>>>>>> Cheer, >>>>>>>>>> - hugi >>>>>>>>>> >>>>>>>>>> // Hugi Thordarson >>>>>>>>>> // http://www.loftfar.is/ >>>>>>>>>> // s. 895-6688 >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>>> On 29. feb. 2016, at 11:25, Andrus Adamchik <[email protected]> >>>>>>>>>> wrote: >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>>> On Feb 29, 2016, at 2:20 PM, Hugi Thordarson <[email protected]> >>>>>>>> wrote: >>>>>>>>>>>> >>>>>>>>>>>> What does validationQuery do? >>>>>>>>>>> >>>>>>>>>>> Periodically executes for each pooled connection, and kills >>>>>>> connections >>>>>>>>>> that throw during validation. So it ensures that all pooled >>>>>>> connections >>>>>>>> are >>>>>>>>>> in a good state. >>>>>>>>>>> >>>>>>>>>>> Andrus >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> >>>>> >>>> >>> >> >
