Il 27/07/16 07:19, Romain Manni-Bucau ha scritto:
Yes, (tomee/openejb is the same project): you got the replaced instance so
lookup happens too late to get tomcat instance.
Very minimal working configurations:
The below $webapp/META-INF/context.xml configuration works with no warnings
<Context>
<Resource name="pool1" auth="Container" type="javax.sql.DataSource"
singleton="false"
url="jdbc:postgresql://127.0.0.1:5432/testdb"
username="testuser" password="testpassword"
driverClassName="org.postgresql.Driver"
initialSize="3" maxActive="10" maxWait="300" maxIdle="10"
removeAbandoned="true" removeAbandonedTimeout="60"
logAbandoned="true" />
</Context>
in TomEE+ 7.0 uses
org.apache.tomee.jdbc.TomEEDataSourceCreator$TomEEDataSource
Tomcat 8.0 uses instead org.apache.tomcat.dbcp.dbcp2.BasicDataSource
Also the equivalent $webapp/WEB-INF/resources.xml works
<tomee>
<Resource id="pool2" type="javax.sql.DataSource">
jdbcDriver = org.postgresql.Driver
jdbcUrl = jdbc:postgresql://127.0.0.1:5432/testdb
jtaManaged = false
maxActive = 10
maxWaitTime = 10 seconds
minIdle = 3
maxIdle = 10
password = testpassword
userName = testuser
removeAbandoned = true
removeAbandonedTimeout = 30
logAbandoned = true
</Resource>
</tomee>
the last three properties are not documented at
http://tomee.apache.org/datasource-config.html
but are printed by dataSource.toString()
thank you for all the help
Edoardo
Le 27 juil. 2016 06:53, "Edoardo Panfili" <[email protected]> a écrit :
Il 27/07/16 00:11, Romain Manni-Bucau ha scritto:
2016-07-26 22:15 GMT+02:00 Edoardo Panfili <[email protected]>:
Il 26/07/16 20:48, Romain Manni-Bucau ha scritto:
2016-07-26 20:43 GMT+02:00 Edoardo Panfili <[email protected]>:
Thank you for you propt response,
Il 26/07/16 20:24, Romain Manni-Bucau ha scritto:
Hi Edoardo,
The "unusedProperty" is logged by tomee saying the setter doesn't
exist
and
therefore the setting is just ignored.
Yes, the proble is that I'd like to use that property.
The "is not used in DBCP2" comes from
tomcat org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory
(tomcat-dbcp)
which is a dbcp bridge between tomcat config and their shade.
Issue is tomee will wrap the tomcat resources - originally to add
tomee
features on tomcat defined datasources but since we upgraded to
tomcat 8
not sure it makes much sense anymore - and uses tomee factory (to
allow
you
to get jta support, sql logging etc...) once the webapp is deployed
but
will also ensure resources are available before the webapp is deployed
to
make it available to startup events/beans. In other words you can end
up
using both kind of resources.
The workaround is to not use singleton as resource for the datasource
(but
means it will create one instance per lookup) since the boot will not
eagerly create the datasource the tomcat way and then you just have
the
tomee factory to configure.
How to do that? One instance of datasource every time I use
Context.lookup()?
singleton="false" I think
Object ds1 = lookup();
Object ds2 = lookup();
and you will get ds1 != ds2 where singleton=true will make it equals.
I found (only now) the reference here:
https://tomcat.apache.org/tomcat-8.5-doc/config/context.html
I've read only:
https://tomcat.apache.org/tomcat-8.5-doc/jdbc-pool.html
I'm trying to understand: I did some tests using
-----------------------------------------------------
<Resource name="jdbc/test1" auth="Container" type="javax.sql.DataSource"
initialSize="4" maxActive="10" maxIdle="5" minIdle="3" maxWait="300"
username="testuser" password="testpassword"
driverClassName="org.postgresql.Driver"
url="jdbc:postgresql://127.0.0.1:5432/testdb"
removeAbandoned="true" removeAbandonedTimeout="60"
logAbandoned="true"
/>
-----------------------------------------------------
and adding some code to my test web service:
-----------------------------------------------------
DataSource pool1 = (DataSource) env.lookup("jdbc/test1");
DataSource pool2 = (DataSource) env.lookup("jdbc/test1");
sb.append("<p> compare = "+(pool1==pool2)+"</p>");
-----------------------------------------------------
- with no singleton attribute I got warnings and the message
compare = true
the pool contains 10 connections (as per maxActive attribute, despite the
warning)
- using singleton="true" I got warnings and the message
compare = true
the pool contains 10 connections (as per maxActive attribute, despite the
warning)
- using singleton="false" I got *no* warnings and the message
compare = true
the pool contains 10 connections (as per maxActive attribute)
likely cause you do the lookup once tomee switch the resource definition
and singleton is ignored there (all are singleton)
if you log ds.getClass() you will get org.apache.openejb* or
org.apache.tomcat* output and check that I think.
org.apache.tomee.jdbc.TomEEDataSourceCreator$TomEEDataSource
Edoardo
I did a mistake misunderstanding the measure unit of
removeAbandonedTimeout, using 60 (1 minute) I can see the logs of removed
connections despite the value of "singleton" and the warnings.
thank you again to all
I will try also using resources.xml
Edoardo