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