Er, that should have read:

...

"Unfortunately, once this has been done we have two services with the same 

JNDI service name. Anything which uses the JNDI name 
osgi:service/jdbc/blogdb, expecting a *DataSource*, gets the following 
cast exception:"

...

--
Holly Cummins
OSGi Applications
Desk DE3B18, MP 211, 
IBM Hursley, UK
[email protected] 
Phone: External +44 (0) 1962 815104 ; Internal 7-245104;

Holly Cummins/UK/IBM@IBMGB wrote on 03/05/2011 02:43:56 PM:

> Holly Cummins/UK/IBM@IBMGB 
> 03/05/2011 02:43 PM
> 
> Please respond to
> [email protected]
> 
> To
> 
> [email protected]
> 
> cc
> 
> Subject
> 
> DataSource and XADataSource services and osgi.jndi.service.name property
> 
> Hi all, 
> 
> I'm working through a variant of the blog sample at the moment. In the 
> blog sample we use the service property osgi.jndi.service.name to 
uniquely 
> identify the datasource services. However, in the persistence.xml, we 
only 
> use the jndi service name as a filter property, like: 
> 
> 
> <jta-data-source>osgi:service/javax.sql.DataSource/
> (osgi.jndi.service.name=jdbc/blogdb)</jta-data-source>
> 
> instead of writing:
> 
>     <jta-data-source>osgi:service/jdbc/blogdb</jta-data-source>
> 
> It seems a shame to bother to specify the jndi.service.name property but 

> then not take advantage of the shorter JNDI name, but there's a good 
> reason we don't - it doesn't work. :) 
> 
> The datasource blueprint.xml declares two services, for DataSource and 
> XADataSource, and then Aries helpfully auto-creates a third service, 
which 
> makes the EmbeddedXADataSource bean for lookups of the DataSource 
> interface.
> 
> Unfortunately, once this has been done we have two services with the 
same 
> JNDI service name. Anything which uses the JNDI name 
> osgi:service/jdbc/blogdb, expecting an XADataSource, gets the following 
> cast exception:
> 
> <openjpa-2.0.0-r422266:935683 nonfatal general error> 
> org.apache.openjpa.persistence.PersistenceException: $Proxy13 
incompatible 
> with javax.sql.DataSource
>         at 
> org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker
> (AbstractBrokerFactory.java:208)
>         at 
> org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker
> (DelegatingBrokerFactory.java:156)
>         at 
> 
org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager
> (EntityManagerFactoryImpl.java:213)
>         at 
> 
org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager
> (EntityManagerFactoryImpl.java:57)
>         at 
> 
org.apache.aries.jpa.container.impl.CountingEntityManagerFactory.createEntityManager
> (CountingEntityManagerFactory.java:70)
>         at 
> 
org.apache.aries.jpa.container.context.transaction.impl.JTAPersistenceContextRegistry.getCurrentPersistenceContext
> (JTAPersistenceContextRegistry.java:131)
> 
> I have a few questions:
> 
> 1. When we create the DataSource service from the XADataSource, should 
we 
> treat the osgi.jndi.service.name differently from the other properties? 
It 
> seems wrong for us to deliberately create a JNDI name clash. 
> 2. In my testing, I found that just registering the EmbeddedXADataSource 

> as a javax.sql.DataSource service and not registering any services for 
the 
> XADataSource worked quite well. However, I assume there's a reason we 
> didn't write the sample this way. :) What's the service under the 
> XADataSource interface used for? The service isn't referenced in the 
blog 
> persistence.xml, so I'm assuming that the blog persistence unit never 
sees 
> it. 
> 
> (For those who don't have the code in front of them, the persistence XML 

> only uses the DataSource services:
> 
> 
> <jta-data-source>osgi:service/javax.sql.DataSource/
> (osgi.jndi.service.name=jdbc/blogdb)</jta-data-source>
> 
> <non-jta-data-source>osgi:service/javax.sql.DataSource/
> (osgi.jndi.service.name=jdbc/blogdbnojta)</non-jta-data-source> 
> 
> 
> If I rewrite the dataSource.xml blueprint to remove the bit in the 
square 
> brackets, 
> 
>   <service id="xaDataSource" ref="derbyXADataSource" 
> interface="javax.sql.[XA]DataSource">
>   <service-properties>
>     <entry key="osgi.jndi.service.name" value="jdbc/blogdb"/>
>    </service-properties>
>   </service>
> 
> I can rewrite the persistence.xml to 
> 
>     <jta-data-source>osgi:service/jdbc/blogdb)</jta-data-source>
> 
<non-jta-data-source>osgi:service/jdbc/blogdbnojta)</non-jta-data-source> 
> 
> 
> without apparent ill effects, *and* the Aries container has to do less 
> work.  I assume I'm not hitting some important scenario in my test 
> coverage, but I'm not sure what it is.)
> 
> Holly
> 
> --
> Holly Cummins
> OSGi Applications
> IBM Hursley, UK
> [email protected] 
> 
> 
> 
> 
> 
> 
> Unless stated otherwise above:
> IBM United Kingdom Limited - Registered in England and Wales with number 

> 741598. 
> Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 
3AU
> 
> 
> 
> 
> 






Unless stated otherwise above:
IBM United Kingdom Limited - Registered in England and Wales with number 
741598. 
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU





Reply via email to