tomee-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Zachary Bedell <zbed...@nycourts.gov>
Subject Re: Get JDBC pool capacity
Date Mon, 31 Oct 2016 19:08:18 GMT
We're not a maven shop, alas...  Ant and lots of Ivy magic to get a build working outside.

I *suspect* it's either the datasource-in-ear or the custom implementation of org.apache.openejb.cipher.PasswordCipher
we're using that's the cause.  I'll see if I can steal some time this week to factor those
two out to confirm one way or the other & let you know.  

-Zac

> On Oct 31, 2016, at 14:33, Romain Manni-Bucau <rmannibucau@gmail.com> wrote:
> 
> if you can share a project i can run with "mvn package tomee:run" I can
> sort it out for you if it helps
> 
> 
> Romain Manni-Bucau
> @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> <https://blog-rmannibucau.rhcloud.com> | Old Blog
> <http://rmannibucau.wordpress.com> | Github <https://github.com/rmannibucau>
|
> LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE Factory
> <https://javaeefactory-rmannibucau.rhcloud.com>
> 
> 2016-10-31 18:27 GMT+01:00 Zachary Bedell <zbedell@nycourts.gov>:
> 
>> I tried some variations just to get an idea of what's actually the magic
>> thing that's making my config (not) work.
>> 
>> 1)
>> resource.xml:
>>        DataSourceCreator dbcp
>>        # JmxEnabled absent -- default value
>> 
>> system.properties:
>>        No setting for datasource-creator
>> 
>> RESULT: Works.  Attributes visible in JMX under "openejb.management:
>> DataSource=UCMSSecurity/ucsSecurityKeystore,ObjectType=datasources"
>> 
>> 
>> 2)
>> resource.xml:
>>        # DataSourceCreator absent -- default value
>>        JmxEnabled true
>> 
>> system.properties:
>>        No setting for datasource-creator
>> 
>> RESULT: Fails.  Nothing in JMX for the datasources.
>> 
>> 
>> 3)
>> resource.xml:
>>        # DataSourceCreator absent -- default value
>>        # JmxEnabled -- default value
>> 
>> system.properties:
>>        openejb.jdbc.datasource-creator = *anything*
>> 
>> RESULT: Fails.
>> 
>> I tried dbcp, org.apache.tomee.jdbc.TomEEDataSourceCreator, tomcat-dbcp,
>> as well as complete gibberish for the setting in system.properties.  In all
>> cases, the log message came out as:
>> 
>> 13:07:18,631 INFO  [options] Using 'openejb.jdbc.datasource-
>> creator=org.apache.tomee.jdbc.TomEEDataSourceCreator'
>> 
>> (I'm using log4j, thus different formatting on the logs.)
>> 
>> The string "datasource-creator" doesn't appear anywhere in my distribution
>> other than system.properties and the log files, so I don't see how anything
>> else could be setting that value.  The setting in system.properties appears
>> to be ignored.
>> 
>> 
>> I can run with case #1 now, explicitly setting the datasource creator in
>> each datasource.  I'm getting the stats I need that way.  If there's any
>> other info I can provide to figure out why the setting is being ignored,
>> let me know.
>> 
>> Thanks again for the help!
>> 
>> -Zac
>> 
>> 
>> 
>>> On Oct 28, 2016, at 17:08, Romain Manni-Bucau <rmannibucau@gmail.com>
>> wrote:
>>> 
>>> still openejb.jdbc.datasource-creator and it should even be logged
>> during
>>> startup:
>>> 
>>> Feb 07, 2014 10:40:05 PM org.apache.openejb.util.OptionsLog info
>>> INFO: Using 'openejb.jdbc.datasource-creator=org.apache.tomee.jdbc.
>> TomEEDataSourceCreator'
>>> 
>>> you can give a try to add jmxEnabled=true to your datasource properties
>> but
>>> should be the default
>>> 
>>> 
>>> 
>>> Romain Manni-Bucau
>>> @rmannibucau <https://twitter.com/rmannibucau> |  Blog
>>> <https://blog-rmannibucau.rhcloud.com> | Old Blog
>>> <http://rmannibucau.wordpress.com> | Github <https://github.com/
>> rmannibucau> |
>>> LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE Factory
>>> <https://javaeefactory-rmannibucau.rhcloud.com>
>>> 
>>> 2016-10-28 23:04 GMT+02:00 Zachary Bedell <zbedell@nycourts.gov>:
>>> 
>>>> As far as I know, I didn't do anything to change the pooling
>>>> implementation.
>>>> 
>>>> It does all start working if I add an explicit "DataSourceCreator dbcp"
>> to
>>>> my datasource definitions in resource.xml.  With that, the datasources
>>>> section shows up in JMX, and I see all the stats I need.
>>>> 
>>>> I found a suggestion on this page (https://rmannibucau.
>>>> wordpress.com/2012/08/10/switching-of-datasource-connection-pooling-in-
>>>> tomeeopenejb/) that adding "openejb.jdbc.datasource-creator = dbcp" to
>>>> system.properties should do the same globally, but that didn't work for
>>>> me.  Adding that & removing the DataSourceCreator entry went back to
no
>>>> stats.  Maybe there's any updated name for that property?
>>>> 
>>>> Not sure what about my config breaks the default configuration, but this
>>>> looks like it should do the trick for now.
>>>> 
>>>> Thanks for the pointers!
>>>> 
>>>> -Zac
>>>> 
>>>> 
>>>> On Oct 28, 2016, at 16:14, Romain Manni-Bucau <rmannibucau@gmail.com
>>>> <mailto:rmannibucau@gmail.com>> wrote:
>>>> 
>>>> weird, try to reproduce your setup on github I'll check next week
>>>> 
>>>> only case I'm thiking about is you don't use dbcp or tomcat-jdbc pooling
>>>> 
>>>> 
>>>> Romain Manni-Bucau
>>>> @rmannibucau <https://twitter.com/rmannibucau> |  Blog
>>>> <https://blog-rmannibucau.rhcloud.com<https://blog-
>>>> rmannibucau.rhcloud.com/>> | Old Blog
>>>> <http://rmannibucau.wordpress.com<http://rmannibucau.wordpress.com/>>
|
>>>> Github <https://github.com/rmannibucau> |
>>>> LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE Factory
>>>> <https://javaeefactory-rmannibucau.rhcloud.com<https:
>>>> //javaeefactory-rmannibucau.rhcloud.com/>>
>>>> 
>>>> 2016-10-28 22:12 GMT+02:00 Zachary Bedell <zbedell@nycourts.gov<mailto:
>> z
>>>> bedell@nycourts.gov>>:
>>>> 
>>>> That doesn't exist for me at all in jconsole.
>>>> 
>>>> Screenshot: http://imgur.com/a/5mMgz
>>>> 
>>>> If I enumerate JMX using an ObjectName of "openejb.management:*" with
>>>> something like the code below, there's no "datasources" in any of the
>> found
>>>> objects.  Nothing matching the names of my pools either.
>>>> 
>>>> final ObjectName name = new ObjectName("openejb.management:*");
>>>> final Set<ObjectInstance> search = mbeanServer.queryMBeans(name, null);
>>>> for(final ObjectInstance objectInstance : search) {
>>>> System.out.println(objectInstance.getObjectName().getCanonicalName());
>>>> }
>>>> 
>>>> -Zac
>>>> 
>>>> On Oct 28, 2016, at 15:55, Romain Manni-Bucau <rmannibucau@gmail.com
>>>> <mailto:rmannibucau@gmail.com>
>>>> <mailto:rmannibucau@gmail.com>> wrote:
>>>> 
>>>> openejb.management > datasources
>>>> 
>>>> 
>>>> 
>>>> Romain Manni-Bucau
>>>> @rmannibucau <https://twitter.com/rmannibucau> |  Blog
>>>> <https://blog-rmannibucau.rhcloud.com<https://blog-
>>>> rmannibucau.rhcloud.com/>> | Old Blog
>>>> <http://rmannibucau.wordpress.com<http://rmannibucau.wordpress.com/>>
|
>>>> Github <https://github.com/
>>>> rmannibucau> |
>>>> LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE Factory
>>>> <https://javaeefactory-rmannibucau.rhcloud.com<https:
>>>> //javaeefactory-rmannibucau.rhcloud.com/>>
>>>> 
>>>> 2016-10-28 21:41 GMT+02:00 Zachary Bedell <zbedell@nycourts.gov<mailto:
>> z
>>>> bedell@nycourts.gov><mailto:z
>>>> bedell@nycourts.gov<mailto:bedell@nycourts.gov>>>:
>>>> 
>>>> Would the stats show up in a different part of the tree?  I don't see
>> the
>>>> datasources entry at all under openejb.management.
>>>> 
>>>> I can find DataSourceFactory objects under:
>>>> 
>>>> Catalina:class=org.apache.openejb.resource.jdbc.
>> DataSourceFactory,name="
>>>> EARNAME/POOLNAME",resourcetype=Global,type=Resource
>>>> 
>>>> 
>>>> The DataSource's themselves show up in every WAR they're injected into:
>>>> 
>>>> Catalina:type=DataSource,host=localhost,context=/WARNAME,
>>>> class=javax.sql.DataSource,name="openejb/Resource/POOLNAME"
>>>> 
>>>> 
>>>> Neither the DataSource nor DataSourceFactory expose anything that looks
>>>> like active or max connections.
>>>> 
>>>> We're trying pretty hard to keep everything related to the app in its
>> own
>>>> EAR rather than globally in tomee.xml.  So far the only thing we have in
>>>> tomee.xml is a <Deployments dir="X"/> entry where we're dropping the
>> EAR's.
>>>> 
>>>> -Zac
>>>> 
>>>> On Oct 28, 2016, at 15:28, Romain Manni-Bucau <rmannibucau@gmail.com
>>>> <mailto:rmannibucau@gmail.com>
>>>> <mailto:rmannibucau@gmail.com>>
>>>> wrote:
>>>> 
>>>> they are, name is just prefixed with app name
>>>> 
>>>> 
>>>> Romain Manni-Bucau
>>>> @rmannibucau <https://twitter.com/rmannibucau> |  Blog
>>>> <https://blog-rmannibucau.rhcloud.com<https://blog-
>>>> rmannibucau.rhcloud.com/>> | Old Blog
>>>> <http://rmannibucau.wordpress.com<http://rmannibucau.wordpress.com/>>
|
>>>> Github <https://github.com/
>>>> rmannibucau> |
>>>> LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE Factory
>>>> <https://javaeefactory-rmannibucau.rhcloud.com<https:
>>>> //javaeefactory-rmannibucau.rhcloud.com/>>
>>>> 
>>>> 2016-10-28 21:14 GMT+02:00 Adam Cornett <adam.cornett@gmail.com<mailto:
>>>> adam.cornett@gmail.com><mailto:
>>>> adam.cornett@gmail.com<mailto:adam.cornett@gmail.com>>>:
>>>> 
>>>> Perhaps, my datasources are defined at the container level
>>>> (conf/tomee.xml). Perhaps the app level data sources are not registered
>>>> in
>>>> JMX.
>>>> Romain or another dev would need to speak to that.
>>>> 
>>>> On Fri, Oct 28, 2016 at 2:29 PM, Zachary Bedell <zbedell@nycourts.gov
>>>> <mailto:zbedell@nycourts.gov>
>>>> <mailto:zbedell@nycourts.gov>>
>>>> wrote:
>>>> 
>>>> Yes to TomEE 7.0.1, but I don't see a datasources entry under
>>>> openejb.management in jconsole.  I've got Invocations, JAX-RS, JAX-WS,
>>>> Pool, TransactionManager, and containers.
>>>> 
>>>> Guessing maybe the way I define the datasources may be relevant?
>>>> They're
>>>> in a resources.xml file inside an EAR.  Defined like:
>>>> 
>>>> <Resource id="ucmsTXPool" type="DataSource">
>>>> JdbcDriver oracle.jdbc.xa.client.OracleXADataSource
>>>> JdbcUrl ${ucmsTXPool.JdbcUrl}
>>>> User ${ucmsTXPool.User}
>>>> UserName ${ucmsTXPool.User}
>>>> VaultPassword ${ucmsTXPool.Password}
>>>> InitialSize ${ucmsTXPool.InitialSize}
>>>> MaxActive ${ucmsTXPool.MaxActive}
>>>> MaxIdle 10
>>>> MaxWait 15000
>>>> ValidationQuery "SELECT sysdate FROM DUAL"
>>>> TestOnBorrow true
>>>> TestOnReturn true
>>>> TestWhileIdle true
>>>> TimeBetweenEvictionRunsMillis 60000
>>>> AccessToUnderlyingConnectionAllowed true
>>>> JtaManaged true
>>>> </Resource>
>>>> 
>>>> The ${...} are loaded from a config repository via a Listener in
>>>> server.xml.  The VaultPassword is handled via custom PasswordCipher
>>>> registered via META-INF/org.apache.openejb.cipher.PasswordCipher in a
>>>> jar
>>>> in server/lib.
>>>> 
>>>> -Zac
>>>> 
>>>> On Oct 28, 2016, at 14:09, Adam Cornett <adam.cornett@gmail.com<mailto:
>>>> adam.cornett@gmail.com><mailto:
>>>> adam.cornett@gmail.com<mailto:adam.cornett@gmail.com>>>
>>>> wrote:
>>>> 
>>>> Sure:
>>>> openejb.management/datasources/[DSNAME] should have attributes such
>>>> as:
>>>> Size, Idle, WaitCount, etc.
>>>> 
>>>> There should be an object for each datasource defined in your
>>>> tomee.xml
>>>> file.  I'm assuming you're on TomEE 7?
>>>> 
>>>> On Fri, Oct 28, 2016 at 2:03 PM, Zachary Bedell <zbedell@nycourts.gov
>>>> <mailto:zbedell@nycourts.gov>
>>>> <mailto:zbedell@nycourts.gov>
>>>> 
>>>> wrote:
>>>> 
>>>> Adam, your image didn't come through the list, at least for me.  Can
>>>> you
>>>> give me a textual path to where you're looking?
>>>> 
>>>> 
>>>> The only thing listed as openejb under mbeans is
>>>> "openejb.management."
>>>> There's nothing under there that matches the names of any of my
>>>> pools.
>>>> The
>>>> only matches for "datasource" I see are the containers for the
>>>> stateless,
>>>> stateful, singleton, and managed beans.  The only pool related stuff
>>>> I
>>>> see
>>>> under there is for the EJB instances.
>>>> 
>>>> I see an "Active" attribute under the TransactionManager, but that's
>>>> not
>>>> per-pool, and I'm not sure that it represents all of the JDBC
>>>> connections
>>>> as opposed to an EJB container transaction.  We'd have EJB's that are
>>>> set
>>>> @TransactionAttribute(NOT_SUPPORTED) as well as single transactions
>>>> that
>>>> touch several connection pools (XA), so active transactions from the
>>>> container's point of view isn't granular enough to know if one of the
>>>> pools
>>>> is running low.
>>>> 
>>>> -Zac
>>>> 
>>>> 
>>>> 
>>>> 
>>>> On Oct 28, 2016, at 13:30, Adam Cornett <adam.cornett@gmail.com<mailto:
>>>> adam.cornett@gmail.com><mailto:
>>>> adam.cornett@gmail.com<mailto:adam.cornett@gmail.com>><
>>>> mailto:
>>>> adam.cornett@gmail.com<mailto:adam.cornett@gmail.com><mailto:
>>>> adam.cornett@gmail.com>>> wrote:
>>>> 
>>>> Here is a screenshot out of jconsole showing the location and
>>>> attributes:
>>>> 
>>>> 
>>>> On Fri, Oct 28, 2016 at 1:21 PM, Romain Manni-Bucau <
>>>> rmannibucau@gmail.com<mailto:rmannibucau@gmail.com><mailto:r
>>>> mannibucau@gmail.com>
>>>> <mailto:rmannibucau@gmail.com>> wrote:
>>>> Hi Zachary,
>>>> 
>>>> 2016-10-28 19:18 GMT+02:00 Zachary Bedell <zbedell@nycourts.gov<mailto:
>> z
>>>> bedell@nycourts.gov>
>>>> <mailto:
>>>> z
>>>> bedell@nycourts.gov<mailto:bedell@nycourts.gov><mailto:bedel
>> l@nycourts.gov
>>>>>>> :
>>>> 
>>>> Good afternoon,
>>>> 
>>>> I'm working on a monitoring agent for TomEE to plugin to an in-house
>>>> package we use.  One of the most common failures in our current app
>>>> server
>>>> (JBoss) usually manifests as expended JDBC connection pools, so we
>>>> alert
>>>> as
>>>> pools approach full to get some kind of warning of impending doom
>>>> when
>>>> the
>>>> database can't keep up.
>>>> 
>>>> I need to get a handle on TomEE's datasource pools to check their
>>>> maximum
>>>> size & current active connection count programatically.  I've tried
>>>> searching through both JMX (how we do it in JBoss) and the JNDI
>>>> tree.
>>>> I
>>>> can find the javax.sql.DataSource in both trees as well as a
>>>> reference
>>>> to
>>>> org.apache.openejb.resource.jdbc.DataSourceFactory in JMX.  It
>>>> doesn't
>>>> appear any of the objects I've been able to find expose a count of
>>>> active
>>>> connections nor what the configured maximum is.
>>>> 
>>>> 
>>>> in openejb MBeans it should be there
>>>> 
>>>> 
>>>> Is there a way to get the count of active connections & the
>>>> configured
>>>> max
>>>> for a named connection pool (I can find the names via JMX or JNDI)
>>>> or
>>>> for
>>>> all connection pools?
>>>> 
>>>> 
>>>> 
>>>> Thanks in advance,
>>>> Zac Bedell
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>>> --
>>>> Adam Cornett
>>>> adam.cornett@gmail.com<mailto:adam.cornett@gmail.com><mailto:
>>>> adam.cornett@gmail.com><mailto:
>>>> adam.cornett@gmail.com<mailto:adam.cornett@gmail.com>>
>>>> (678) 296-1150
>>>> 
>>>> 
>>>> 
>>>> 
>>>> --
>>>> Adam Cornett
>>>> adam.cornett@gmail.com<mailto:adam.cornett@gmail.com><mailto:
>>>> adam.cornett@gmail.com>
>>>> (678) 296-1150
>>>> 
>>>> 
>>>> 
>>>> 
>>>> --
>>>> Adam Cornett
>>>> adam.cornett@gmail.com<mailto:adam.cornett@gmail.com><mailto:
>>>> adam.cornett@gmail.com>
>>>> (678) 296-1150
>>>> 
>>>> 
>> 
>> 


Mime
View raw message