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 >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>> >>>>>>> >>>>>> >>>> >>> >> >
