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 17:27:37 GMT
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:bedell@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