> https://ops4j1.jira.com/wiki/display/PAXJDBC/Pooling+and+XA+support+for+DataSourceFactory
>
> <https://ops4j1.jira.com/wiki/display/PAXJDBC/Pooling+and+XA+support+for+DataSourceFactory>
> https://ops4j1.jira.com/wiki/display/PAXJDBC/Create+DataSource+from+config
> <https://ops4j1.jira.com/wiki/display/PAXJDBC/Create+DataSource+from+config>
With a little help from the master (CS) I now have the following config and
screaming fast DB with connection pool.
osgi.jdbc.driver.class=com.mysql.jdbc.Driver-pool
url=jdbc:mysql://localhost:3306/mydatabase
dataSourceName=jdbc/mynonjta
user=user
password=password
databaseName=mydatabase
Next stop Transaction Control.
Erwin
>
> You just have to install pax-jdbc-mysql, pax-jdbc-config,
> pax-jdbc-pool-dbcp2, transaction
>
> Then you create a config like described in the docs and you will get a
> DataSource with pooling and XA support.
>
> Christian
>
> On 24.07.2016 22:50, Erwin Hogeweg wrote:
>> Hi,
>>
>> Not sure if this is a question for these lists or for the EL list but I
>> figure I start here. Feel free to redirect when you feel it doesn’t belong
>> here.
>>
>> I am trying to get a non-jta connection pool (internal connection pool)
>> working with EL 2.6.2, Aries 2.4.0 (incl. EL adapter), dbcp2-2.1 and mySQL,
>> but I must be missing something because I just can’t get it to work
>> properly. Everything works just fine w/o a connection pool, so this is
>> definitely the source of the misery.
>>
>> Been struggling with this for a while now, and I am running out of ideas. I
>> think I could use some sample code to point me in the right direction that
>> doesn't use Blueprint? I found some of Christian’s examples, but I don’t
>> think they are using connection pools.
>>
>> Below a short summary of what I run into.
>>
>> When I am using the ‘original’ MysqlDataSource...
>>
>> private DataSource createMySQLDataSource( Dictionary<String, String>
>> dbConnProps ) {
>> MysqlDataSource ds = new MysqlDataSource();
>> ds.setUrl( dbConnProps.get( "jdbc_url" ) );
>> ds.setUser( dbConnProps.get( "jdbc_user" ) );
>> ds.setPassword( dbConnProps.get( "jdbc_password" ) );
>> return ds;
>> }
>>
>> … everything kinda works normally. The DataSource, PersistenceProvider and
>> EntityManagerFactory are all created and registered correctly;
>>
>> g! services javax.sql.DataSource
>> {javax.sql.DataSource}={eclipselink.target-database=MySQL,
>> osgi.jndi.service.name=jdbc/mynonjta, service.id=139, service.bundleid=104,
>> service.scope=singleton}
>> "Registered by bundle:"
>> com.my.project.persistence.mysqldatasource_4.0.0.SNAPSHOT [104]
>>
>> g! services javax.persistence.EntityManagerFactory
>> {javax.persistence.EntityManagerFactory}={osgi.unit.version=4.0.0.SNAPSHOT,
>> osgi.unit.name=my.pu,
>> osgi.unit.provider=org.eclipse.persistence.jpa.PersistenceProvider,
>> service.id=142, service.bundleid=98, service.scope=singleton}
>> "Registered by bundle:" com.my.project.model_4.0.0.SNAPSHOT [98]
>>
>> The performance is horrible though as I don’t really seem to get a
>> connection pool. The connection is closed after every query. On top of that
>> I loose all network connections every few seconds with a:
>>
>> com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications
>> link failure
>>
>> Which has me puzzled for a while now.
>>
>> So my next attempt was to use the org.apache.commons.dbcp2.BasicDataSource:
>>
>> private DataSource createMySQLDataSource( Dictionary<String, String>
>> dbConnProps ) {
>>
>> BasicDataSource basicDataSource = new BasicDataSource();
>> basicDataSource.setDriverClassName("com.mysql.jdbc.Driver");
>> ...
>> return basicDataSource;
>> }
>>
>> This fails because the following exception:
>>
>> [EL Severe]: 2016-07-24
>> 14:41:55.872--java.lang.UnsupportedOperationException: Not supported by
>> BasicDataSource
>> at
>> org.apache.commons.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1552)
>>
>> Which is this method:
>>
>> @Override
>> public Connection getConnection(String user, String pass) throws
>> SQLException {
>> // This method isn't supported by the PoolingDataSource returned by
>> // the createDataSource
>> throw new UnsupportedOperationException("Not supported by
>> BasicDataSource");
>> }
>>
>> So I figured I create a version with a PoolingDataSource (following the
>> PoolingDataSourceExample in svn):
>>
>> ConnectionFactory connectionFactory = new
>> DriverManagerConnectionFactory(dbConnProps.get( "jdbc_url" ), "user",
>> "password");
>> PoolableConnectionFactory poolableConnectionFactory = new
>> PoolableConnectionFactory(connectionFactory, null);
>> ObjectPool<PoolableConnection> connectionPool = new
>> GenericObjectPool<>(poolableConnectionFactory);
>> poolableConnectionFactory.setPool(connectionPool);
>> PoolingDataSource<PoolableConnection> dataSource = new
>> PoolingDataSource<>(connectionPool);
>> return dataSource;
>>
>> But that still gives me an exception:
>>
>> [EL Severe]: 2016-07-24 16:40:30.392--java.lang.UnsupportedOperationException
>> at
>> org.apache.commons.dbcp2.PoolingDataSource.getConnection(PoolingDataSource.java:156)
>>
>> So I am kinda lost now.
>>
>> This is the relevant stuff from the persistence.xml file:
>>
>>
>> <non-jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=jdbc/mynonjta)</non-jta-data-source>
>>
>> <property name="javax.persistence.jdbc.driver"
>> value="com.mysql.jdbc.Driver" />
>> <property name="javax.persistence.jdbc.url"
>> value="jdbc:mysql://my_db_server:3306/myschema" />
>> <property name="javax.persistence.jdbc.user" value="user" />
>> <property name="javax.persistence.jdbc.password" value="password" />
>>
>> <!-- Configure connection pool. -->
>> <property name="eclipselink.connection-pool.default.initial" value="10"
>> />
>> <property name="eclipselink.connection-pool.default.min" value="16" />
>> <property name="eclipselink.connection-pool.default.max" value="50" />
>>
>>
>> Although I only see one DataSource registered it somehow feels like there is
>> some more stuff going on behind the (EL?) scenes that I don’t have a handle
>> on yet.
>>
>> BTW... I have also created an org.apache.aries.jpa.my.pu.cfg configuration
>> file, but when I leave the DB properties out of the persistence.xml I get
>> bunch of ClassNotFound exceptions, so that is suspicious.
>>
>> BTW2… the examples link at the bottom of this page is broken:
>> https://commons.apache.org/proper/commons-dbcp/
>> <https://commons.apache.org/proper/commons-dbcp/>
>>
>>
>> Regards,
>>
>> Erwin
>>
>
>
> --
> Christian Schneider
> http://www.liquid-reality.de <http://www.liquid-reality.de/>
>
> Open Source Architect
> http://www.talend.com <http://www.talend.com/>