cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Michael Gentry <mgen...@masslight.net>
Subject Re: Reconnecting automatically after DB downtime
Date Mon, 07 Mar 2016 22:30:44 GMT
Just embed Jetty in your application...


On Mon, Mar 7, 2016 at 5:18 PM, Lon Varscsak <lon.varscsak@gmail.com> wrote:

> OT: I’m planning to build jar not war…now I’m not sure how to deploy. :P
>
> -Lon
>
> On Mon, Mar 7, 2016 at 2:27 PM, Hugi Thordarson <hugi@karlmenn.is> wrote:
>
> > >> It looks to me like this makes it much harder to deploy your
> > application in
> > >> development/test/etc type environments since your URL/etc are in the
> > code.
> >
> > Yeah, I see what you mean. We use a homebuilt property system for that
> > which returns configuration based on environment. It’s not JNDI but
> works :)
> >
> > > Unless you use Bootique, or your own property-based config mechanism.
> >
> > Is bootique worth checking out? I’m just noticing it now for the first
> > time and so happens I’m looking into a new basis for our web
> services/APIs
> > (current favorite being spark framework).
> >
> > > "Make jar, not war" :)
> >
> > Ha ha ha :)
> >
> > - hugi
> >
> >
> > >
> > >> On Mar 7, 2016, at 1:13 PM, Michael Gentry <mgentry@masslight.net>
> > wrote:
> > >>
> > >> Hi Hugi,
> > >>
> > >> It looks to me like this makes it much harder to deploy your
> > application in
> > >> development/test/etc type environments since your URL/etc are in the
> > code.
> > >> The advantage of JNDI is you only reference a logical name that is
> > >> configured external to the WAR, making it much easier to have one
> build
> > >> that can be deployed in different environments.  I took a brief glance
> > at
> > >> Hikari and don't think it includes JNDI natively.
> > >>
> > >> mrg
> > >>
> > >>
> > >> On Mon, Mar 7, 2016 at 4:03 PM, 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
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message