Yeah, the use pool can depend the pool imp you use but
openejb.datasource.pool=true will enforce it

Le 2 nov. 2016 21:34, "Zachary Bedell" <[email protected]> a écrit :

> I've narrowed this down a little more.  It appears that using an XA
> DataSource versus a non-XA Driver class is what switches the behavior.  If
> I just switch to using the non-XA Oracle driver, I can take out
> DataSourceCreater and still get stats in JMX.
>
> So both of these give me stats:
>
> JdbcDriver oracle.jdbc.xa.client.OracleXADataSource
> DataSourceCreator dbcp
>
> -OR-
>
> JdbcDriver oracle.jdbc.OracleDriver
> # DataSourceCreator not set
> # Though of course no XA for this one...
>
>
> Digging a little deeper, it looks like the datasource settings I had
> weren't enabling pooling with the default TomEEDataSourceCreator, but were
> with DbcpDataSourceCreator, though I'm not sure why the difference there.
>
>
> I had my pool sizes set using InitialSize & MaxActive in resources.xml.
> Based on [http://tomee.apache.org/datasource-config.html], those seemed
> to be the right attributes.  Looking in org.apache.openejb.resource.
> jdbc.DataSourceFactory#usePool(), it would determine to NOT use a pool
> unless initialPoolSize and maxPoolSize were defined in the datasource
> resource instead of InitialSize and MaxActive.
>
> It looks like DataSourceFactory::create() has different logic depending on
> whether the class specified in the JdbcDriver attribute is a DataSource or
> a Driver.  Looks like with a Driver, create() always calls
> DataSourceCreator#pool{,Managed,ManagedWIthRecovery}(), but with a
> DataSource, usePool has to return TRUE for that to happen.
>
> So this works w/ stats in JMX AND pooling:
>
>     JdbcDriver oracle.jdbc.xa.client.OracleXADataSource
>     JdbcUrl ...
>     User ...
>     UserName ...
>     VaultPassword ...
>     InitialSize 0
>     MaxActive 10
>     InitialPoolSize 0 # Note: Adding this
>     MaxPoolSize 10 # .. And make the difference
>     AccessToUnderlyingConnectionAllowed true
>     JtaManaged true
>
> It's using the Oracle XA DataSource and the default TomEEDataSourceCreator
> class (not forced to dbcp), and I still get stats.
>
> Google doesn't show the MaxPoolSize attribute anywhere on tomee.apache.org
> <http://tomee.apache.org>, so it seems like that shouldn't be necessary,
> but I'm not really sure what's right at this point.
>
> -Zac
>
>
> On Oct 31, 2016, at 15:18, Romain Manni-Bucau <[email protected]
> <mailto:[email protected]>> wrote:
>
> 2016-10-31 20:08 GMT+01:00 Zachary Bedell <[email protected]<mailto:z
> [email protected]>>:
>
> 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.
>
>
> If we are on the bet side of things I'll bet neither of both since the
> ciphering happens in a completely part of the code and ear or not it should
> reuse the same factory so jmx registration. Testing with a war or just
> removing it from the ear and using tomee.xml can confirm it or not BTW.
>
>
> -Zac
>
> On Oct 31, 2016, at 14:33, Romain Manni-Bucau <[email protected]
> <mailto:[email protected]>>
> 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 <[email protected]<mailto:z
> [email protected]>>:
>
> 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 <[email protected]
> <mailto:[email protected]>>
> 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 <[email protected]<mailto:z
> [email protected]>>:
>
> 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-<http:
> //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 <[email protected]
> <mailto:[email protected]>
> <mailto:[email protected]>> 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/<http://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/<http://javaeefactory-rmannibucau.
> rhcloud.com/>>>
>
> 2016-10-28 22:12 GMT+02:00 Zachary Bedell <[email protected]<mailto:z
> [email protected]>
> <mailto:
> z
> [email protected]<mailto:[email protected]>>>:
>
> 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 <[email protected]
> <mailto:[email protected]>
> <mailto:[email protected]>
> <mailto:[email protected]>> wrote:
>
> openejb.management > datasources
>
>
>
> Romain Manni-Bucau
> @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> <https://blog-rmannibucau.rhcloud.com<https://blog-
> rmannibucau.rhcloud.com/<http://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/<http://javaeefactory-rmannibucau.
> rhcloud.com/>>>
>
> 2016-10-28 21:41 GMT+02:00 Zachary Bedell <[email protected]<mailto:z
> [email protected]>
> <mailto:
> z
> [email protected]<mailto:[email protected]>><mailto:z
> [email protected]<mailto:[email protected]><mailto:[email protected]
> >>>:
>
> 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 <[email protected]
> <mailto:[email protected]>
> <mailto:[email protected]>
> <mailto:[email protected]>>
> 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/<http://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/<http://javaeefactory-rmannibucau.
> rhcloud.com/>>>
>
> 2016-10-28 21:14 GMT+02:00 Adam Cornett <[email protected]<mailto:
> [email protected]><
> mailto:
> [email protected]<mailto:[email protected]>><mailto:
> [email protected]<mailto:[email protected]><mailto:
> [email protected]>>>:
>
> 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 <[email protected]
> <mailto:[email protected]>
> <mailto:[email protected]>
> <mailto:[email protected]>>
> 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 <[email protected]<mailto:
> [email protected]><
> mailto:
> [email protected]<mailto:[email protected]>><mailto:
> [email protected]<mailto:[email protected]><mailto:
> [email protected]>>>
> 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 <[email protected]
> <mailto:[email protected]>
> <mailto:[email protected]>
> <mailto:[email protected]>
>
> 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 <[email protected]<mailto:
> [email protected]><
> mailto:
> [email protected]<mailto:[email protected]>><mailto:
> [email protected]<mailto:[email protected]><mailto:
> [email protected]>><
> mailto:
> [email protected]<mailto:[email protected]><mailto:
> [email protected]><mailto:
> [email protected]<mailto:[email protected]>>>> 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 <
> [email protected]<mailto:[email protected]><mailto:r
> [email protected]><mailto:r
> [email protected]<mailto:[email protected]>>
> <mailto:[email protected]>> wrote:
> Hi Zachary,
>
> 2016-10-28 19:18 GMT+02:00 Zachary Bedell <[email protected]<mailto:z
> [email protected]>
> <mailto:
> z
> [email protected]<mailto:[email protected]>>
> <mailto:
> z
> [email protected]<mailto:[email protected]><mailto:[email protected]
> ><mailto:bedel
> [email protected]<mailto:[email protected]>
> :
>
> 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
> [email protected]<mailto:[email protected]><mailto:
> [email protected]><mailto:
> [email protected]<mailto:[email protected]>>
> (678) 296-1150
>
>
>
>
> --
> Adam Cornett
> [email protected]<mailto:[email protected]><mailto:
> [email protected]>
> (678) 296-1150
>
>
>
>
> --
> Adam Cornett
> [email protected]<mailto:[email protected]><mailto:
> [email protected]>
> (678) 296-1150
>
>
>
>
>
>
>
>

Reply via email to