-
1. Re: how to configure ibatis to use an existing datasource?
maxvar May 5, 2011 10:14 AM (in response to maxvar)I'm further trying to use jndi lookup in SqlMapConfig to access a DataSource published as a service in OSGI. Is there an example for this?
-
2. Re: how to configure ibatis to use an existing datasource?
ffang May 5, 2011 8:38 PM (in response to maxvar)Hi,
I believe this discussion thread[1] would help.
http://servicemix.396122.n5.nabble.com/JNDI-JDBC-DataSource-for-ServiceMix-4-td3371885.html
Freeman
-
3. Re: how to configure ibatis to use an existing datasource?
maxvar May 6, 2011 12:24 AM (in response to ffang)Gone through this yesterday:
installed oracle jdbc driver bundle (wrapped jar) into smx
built and installed into smx a bundle with beans.xml:
built and installed bundle with a route using ibatis with SqlMapConfig.xml:
the route:
from("timer://foo?period=60000").to("ibatis:GetUnprocessesUpdates?statementType=QueryForList")
Now when I start the bundle with the route I get the error:
19:30:57,477 | ERROR | foo | DefaultErrorHandler | 68 - org.apache.camel.camel-core - 2.6.0.fuse-01-09 | Failed delivery for exchangeId: ID-1-2272-60983-1304601704780-9-2. Exhausted after delivery attempt: 1 caught: java.lang.RuntimeException: Error occurred. Cause: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: java.lang.RuntimeException: Error parsing XPath '/sqlMapConfig/transactionManager/dataSource/end()'. Cause: com.ibatis.sqlmap.client.SqlMapException: There was an error configuring JndiDataSourceTransactionPool. Cause: javax.naming.NameNotFoundException: (&(objectClass=javax.sql.DataSource)(osgi.jndi.service.name=jndiPARUS)) Root exception is javax.naming.ServiceUnavailableException: (&(objectClass=javax.sql.DataSource)(osgi.jndi.service.name=jndiPARUS))
java.lang.RuntimeException: Error occurred. Cause: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: java.lang.RuntimeException: Error parsing XPath '/sqlMapConfig/transactionManager/dataSource/end()'. Cause: com.ibatis.sqlmap.client.SqlMapException: There was an error configuring JndiDataSourceTransactionPool. Cause: javax.naming.NameNotFoundException: (&(objectClass=javax.sql.DataSource)(osgi.jndi.service.name=jndiPARUS)) Root exception is javax.naming.ServiceUnavailableException: (&(objectClass=javax.sql.DataSource)(osgi.jndi.service.name=jndiPARUS))
at com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser.parse(SqlMapConfigParser.java:49)[222:org.apache.servicemix.bundles.ibatis-sqlmap:2.3.4.726_3]
at com.ibatis.sqlmap.client.SqlMapClientBuilder.buildSqlMapClient(SqlMapClientBuilder.java:63)[222:org.apache.servicemix.bundles.ibatis-sqlmap:2.3.4.726_3]
...
Caused by: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: java.lang.RuntimeException: Error parsing XPath '/sqlMapConfig/transactionManager/dataSource/end()'. Cause: com.ibatis.sqlmap.client.SqlMapException: There was an error configuring JndiDataSourceTransactionPool. Cause: javax.naming.NameNotFoundException: (&(objectClass=javax.sql.DataSource)(osgi.jndi.service.name=jndiPARUS)) Root exception is javax.naming.ServiceUnavailableException: (&(objectClass=javax.sql.DataSource)(osgi.jndi.service.name=jndiPARUS))
at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:53)[222:org.apache.servicemix.bundles.ibatis-sqlmap:2.3.4.726_3]
at com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser.parse(SqlMapConfigParser.java:46)[222:org.apache.servicemix.bundles.ibatis-sqlmap:2.3.4.726_3]
...
Caused by: java.lang.RuntimeException: Error parsing XPath '/sqlMapConfig/transactionManager/dataSource/end()'. Cause: com.ibatis.sqlmap.client.SqlMapException: There was an error configuring JndiDataSourceTransactionPool. Cause: javax.naming.NameNotFoundException: (&(objectClass=javax.sql.DataSource)(osgi.jndi.service.name=jndiPARUS)) Root exception is javax.naming.ServiceUnavailableException: (&(objectClass=javax.sql.DataSource)(osgi.jndi.service.name=jndiPARUS))
at com.ibatis.common.xml.NodeletParser.processNodelet(NodeletParser.java:123)[222:org.apache.servicemix.bundles.ibatis-sqlmap:2.3.4.726_3]
at com.ibatis.common.xml.NodeletParser.process(NodeletParser.java:105)[222:org.apache.servicemix.bundles.ibatis-sqlmap:2.3.4.726_3]
...
Caused by: com.ibatis.sqlmap.client.SqlMapException: There was an error configuring JndiDataSourceTransactionPool. Cause: javax.naming.NameNotFoundException: (&(objectClass=javax.sql.DataSource)(osgi.jndi.service.name=jndiPARUS)) Root exception is javax.naming.ServiceUnavailableException: (&(objectClass=javax.sql.DataSource)(osgi.jndi.service.name=jndiPARUS))
at com.ibatis.sqlmap.engine.datasource.JndiDataSourceFactory.initialize(JndiDataSourceFactory.java:60)[222:org.apache.servicemix.bundles.ibatis-sqlmap:2.3.4.726_3]
at com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser$9.process(SqlMapConfigParser.java:220)[222:org.apache.servicemix.bundles.ibatis-sqlmap:2.3.4.726_3]
at com.ibatis.common.xml.NodeletParser.processNodelet(NodeletParser.java:121)[222:org.apache.servicemix.bundles.ibatis-sqlmap:2.3.4.726_3]
... 43 more
Caused by: javax.naming.NameNotFoundException: (&(objectClass=javax.sql.DataSource)(osgi.jndi.service.name=jndiPARUS)) Root exception is javax.naming.ServiceUnavailableException: (&(objectClass=javax.sql.DataSource)(osgi.jndi.service.name=jndiPARUS))
at org.apache.servicemix.naming.OSGiServicesContext.lookup(OSGiServicesContext.java:67)[77:org.apache.servicemix.naming:1.4.0.fuse-01-09]
at org.apache.servicemix.naming.OSGiContext.lookup(OSGiContext.java:61)[77:org.apache.servicemix.naming:1.4.0.fuse-01-09]
at org.apache.servicemix.naming.InitialContextWrapper.lookup(InitialContextWrapper.java:173)[77:org.apache.servicemix.naming:1.4.0.fuse-01-09]
at javax.naming.InitialContext.lookup(Unknown Source)[:1.6.0_24]
at com.ibatis.sqlmap.engine.datasource.JndiDataSourceFactory.initialize(JndiDataSourceFactory.java:48)[222:org.apache.servicemix.bundles.ibatis-sqlmap:2.3.4.726_3]
... 45 more
Caused by: javax.naming.ServiceUnavailableException: (&(objectClass=javax.sql.DataSource)(osgi.jndi.service.name=jndiPARUS))
at org.apache.servicemix.naming.ProxyInvocationHandler.getTarget(ProxyInvocationHandler.java:59)[77:org.apache.servicemix.naming:1.4.0.fuse-01-09]
at org.apache.servicemix.naming.OSGiServicesContext.lookup(OSGiServicesContext.java:63)[77:org.apache.servicemix.naming:1.4.0.fuse-01-09]
... 49 more
In karaf console i see that the pool bundle is started and (ls) provides:
org.springframework.osgi.bean.name = dsPARUS
Bundle-SymbolicName = db-parus
Bundle-Version = 1.0.0.SNAPSHOT
osgi.jndi.service.name = jndiPARUS
objectClass = javax.sql.DataSource, oracle.jdbc.pool.OracleDataSource
service.id = 255
Where should i look next?
-
4. Re: how to configure ibatis to use an existing datasource?
ffang May 6, 2011 12:52 AM (in response to maxvar)Hi,
This is interesting
Caused by: javax.naming.ServiceUnavailableException: (&(objectClass=javax.sql.DataSource)(osgi.jndi.service.name=jndiPARUS))
but from osgi:ls
osgi.jndi.service.name = jndiPARUS
objectClass = javax.sql.DataSource, oracle.jdbc.pool.OracleDataSource
Further investigation found that oracle.jdbc.pool.OracleDataSource isn't a javax.sql.DataSource, so you expose the OSGi service isn't correct, it should be
Hope this helps
Freeman
-
5. Re: how to configure ibatis to use an existing datasource?
maxvar May 18, 2011 4:29 AM (in response to maxvar)I actually lacked the import of javax.naming and javax.sql in the datasource bundle. So the error handling and diagnosis is a bit shorthanded here =)
What finally worked was a combo of
(1) db-parus bundle with
-
-
in beans.xml
(2) import of javax.naming, javax.sql, oracle.jdbc.pool in db-parus bundle
(3) sap-psu bundle with SqlMapConfig with
-
-
Now it works sharing the DB pool with another JBI BC+SE combo bundle.
-
6. Re: how to configure ibatis to use an existing datasource?
chandraprabha Sep 1, 2011 2:07 PM (in response to ffang)=
Edited by: chandraprabha on Sep 1, 2011 6:07 PM