cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Hugi Thordarson <h...@karlmenn.is>
Subject Re: Reconnecting automatically after DB downtime
Date Tue, 08 Mar 2016 11:20:13 GMT
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 <hugi@karlmenn.is> 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 <andrus@objectstyle.org> 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 <hugi@karlmenn.is> 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 <johnthuss@gmail.com> 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 <mgentry@masslight.net>
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 <hugi@karlmenn.is>
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 <mgentry@masslight.net>
>>>>> 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 <hugi@karlmenn.is>
>>>>>> 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 <andrus@objectstyle.org>
>>>>>>>> wrote:
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>>> On Feb 29, 2016, at 2:20 PM, Hugi Thordarson <hugi@karlmenn.is>
>>>>>> 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
>>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>> 
>>>>>> 
>>>>> 
>>> 
>> 
> 


Mime
View raw message